logging: Switch to using libosmocore logging for all the code
diff --git a/ggsn/Makefile.am b/ggsn/Makefile.am
index ada5720..91df8f0 100644
--- a/ggsn/Makefile.am
+++ b/ggsn/Makefile.am
@@ -2,9 +2,9 @@
 
 AM_LDFLAGS = @EXEC_LDFLAGS@
 
-AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb
+AM_CFLAGS = -O2 -D_GNU_SOURCE -fno-builtin -Wall -DSBINDIR='"$(sbindir)"' -ggdb $(LIBOSMOCORE_CFLAGS)
 
-ggsn_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a
+ggsn_LDADD = @EXEC_LDADD@ -lgtp -L../gtp ../lib/libmisc.a $(LIBOSMOCORE_LIBS)
 ggsn_DEPENDENCIES = ../gtp/libgtp.la ../lib/libmisc.a
 ggsn_SOURCES = ggsn.c cmdline.c cmdline.h
 
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 0022b1b..3fd584a 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -19,11 +19,12 @@
 
 #include "../config.h"
 
+#include <osmocom/core/application.h>
+
 #ifdef HAVE_STDINT_H
 #include <stdint.h>
 #endif
 
-#include <syslog.h>
 #include <ctype.h>
 #include <netdb.h>
 #include <signal.h>
@@ -88,7 +89,7 @@
 	file = fopen(pidfile, "w");
 	umask(oldmask);
 	if (!file) {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+		SYS_ERR(DGGSN, LOGL_ERROR, 0,
 			"Failed to create process ID file: %s!", pidfile);
 		return;
 	}
@@ -149,7 +150,7 @@
 	if (pdp->peer)
 		ippool_freeip(ippool, (struct ippoolm_t *)pdp->peer);
 	else
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Peer not defined!");
+		SYS_ERR(DGGSN, LOGL_ERROR, 0, "Peer not defined!");
 	return 0;
 }
 
@@ -240,15 +241,7 @@
 	int timelimit;		/* Number of seconds to be connected */
 	int starttime;		/* Time program was started */
 
-	/* open a connection to the syslog daemon */
-	/*openlog(PACKAGE, LOG_PID, LOG_DAEMON); */
-
-	/* TODO: Only use LOG__PERROR for linux */
-#ifdef __linux__
-	openlog(PACKAGE, (LOG_PID | LOG_PERROR), LOG_DAEMON);
-#else
-	openlog(PACKAGE, (LOG_PID), LOG_DAEMON);
-#endif
+	osmo_init_logging(&log_info);
 
 	if (cmdline_parser(argc, argv, &args_info) != 0)
 		exit(1);
@@ -286,13 +279,18 @@
 
 	/* Open a log file */
 	if (args_info.logfile_arg) {
-		FILE* log_file = fopen(args_info.logfile_arg, "a");
-		if (!log_file) {
-			printf("Failed to open logfile: '%s'\n",
-				args_info.logfile_arg);
-			exit(1);
+		struct log_target *tgt;
+		tgt = log_target_find(LOG_TGT_TYPE_FILE, args_info.logfile_arg);
+		if (!tgt) {
+			tgt = log_target_create_file(args_info.logfile_arg);
+			if (!tgt) {
+				LOGP(DGGSN, LOGL_ERROR,
+					"Failed to create logfile: %s\n",
+					args_info.logfile_arg);
+				exit(1);
+			}
+			log_add_target(tgt);
 		}
-		sys_err_setlogfile(log_file);
 	}
 
 	if (args_info.debug_flag) {
@@ -332,7 +330,7 @@
 	/* required for create_pdp_context_response messages            */
 	if (args_info.listen_arg) {
 		if (!(host = gethostbyname(args_info.listen_arg))) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Invalid listening address: %s!",
 				args_info.listen_arg);
 			exit(1);
@@ -340,7 +338,7 @@
 			memcpy(&listen_.s_addr, host->h_addr, host->h_length);
 		}
 	} else {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+		SYS_ERR(DGGSN, LOGL_ERROR, 0,
 			"Listening address must be specified! "
 			"Please use command line option --listen or "
 			"edit %s configuration file\n", args_info.conf_arg);
@@ -351,7 +349,7 @@
 	/* Store net as in_addr net and mask                            */
 	if (args_info.net_arg) {
 		if (ippool_aton(&net, &mask, args_info.net_arg, 0)) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Invalid network address: %s!",
 				args_info.net_arg);
 			exit(1);
@@ -359,7 +357,7 @@
 		netaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
 		destaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
 	} else {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+		SYS_ERR(DGGSN, LOGL_ERROR, 0,
 			"Network address must be specified: %s!",
 			args_info.net_arg);
 		exit(1);
@@ -370,7 +368,7 @@
 		if (ippool_new(&ippool, args_info.net_arg, NULL, 1, 0,
 			       IPPOOL_NONETWORK | IPPOOL_NOGATEWAY |
 			       IPPOOL_NOBROADCAST)) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to allocate IP pool!");
 			exit(1);
 		}
@@ -378,7 +376,7 @@
 		if (ippool_new(&ippool, args_info.dynip_arg, NULL, 1, 0,
 			       IPPOOL_NONETWORK | IPPOOL_NOGATEWAY |
 			       IPPOOL_NOBROADCAST)) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to allocate IP pool!");
 			exit(1);
 		}
@@ -389,7 +387,7 @@
 	dns1.s_addr = 0;
 	if (args_info.pcodns1_arg) {
 		if (0 == inet_aton(args_info.pcodns1_arg, &dns1)) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to convert pcodns1!");
 			exit(1);
 		}
@@ -397,7 +395,7 @@
 	dns2.s_addr = 0;
 	if (args_info.pcodns2_arg) {
 		if (0 == inet_aton(args_info.pcodns2_arg, &dns2)) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to convert pcodns2!");
 			exit(1);
 		}
@@ -407,7 +405,7 @@
 	if (args_info.pcodns1_arg) {
 		dns1.s_addr = inet_addr(args_info.pcodns1_arg);
 		if (dns1.s_addr == -1) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to convert pcodns1!");
 			exit(1);
 		}
@@ -416,7 +414,7 @@
 	if (args_info.pcodns2_arg) {
 		dns2.s_addr = inet_addr(args_info.pcodns2_arg);
 		if (dns2.s_addr == -1) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"Failed to convert pcodns2!");
 			exit(1);
 		}
@@ -469,32 +467,29 @@
 	if (!args_info.fg_flag) {
 		FILE *f;
 		int rc;
-		closelog();
 		/* Close the standard file descriptors. */
 		/* Is this really needed ? */
 		f = freopen("/dev/null", "w", stdout);
 		if (f == NULL) {
-			sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_NOTICE, 0,
 				"Could not redirect stdout to /dev/null");
 		}
 		f = freopen("/dev/null", "w", stderr);
 		if (f == NULL) {
-			sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_NOTICE, 0,
 				"Could not redirect stderr to /dev/null");
 		}
 		f = freopen("/dev/null", "r", stdin);
 		if (f == NULL) {
-			sys_err(LOG_WARNING, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_NOTICE, 0,
 				"Could not redirect stdin to /dev/null");
 		}
 		rc = daemon(0, 0);
 		if (rc != 0) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, rc,
+			SYS_ERR(DGGSN, LOGL_ERROR, rc,
 				"Could not daemonize");
 			exit(1);
 		}
-		/* Open log again. This time with new pid */
-		openlog(PACKAGE, LOG_PID, LOG_DAEMON);
 	}
 
 	/* pidfile */
@@ -507,7 +502,7 @@
 		printf("gtpclient: Initialising GTP tunnel\n");
 
 	if (gtp_new(&gsn, args_info.statedir_arg, &listen_, GTP_MODE_GGSN)) {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create gtp");
+		SYS_ERR(DGGSN, LOGL_ERROR, 0, "Failed to create gtp");
 		exit(1);
 	}
 	if (gsn->fd0 > maxfd)
@@ -525,7 +520,7 @@
 	if (debug)
 		printf("Creating tun interface\n");
 	if (tun_new((struct tun_t **)&tun)) {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Failed to create tun");
+		SYS_ERR(DGGSN, LOGL_ERROR, 0, "Failed to create tun");
 		if (debug)
 			printf("Failed to create tun\n");
 		exit(1);
@@ -534,7 +529,7 @@
 	if (debug)
 		printf("Setting tun IP address\n");
 	if (tun_setaddr(tun, &netaddr, &destaddr, &mask)) {
-		sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+		SYS_ERR(DGGSN, LOGL_ERROR, 0,
 			"Failed to set tun IP address");
 		if (debug)
 			printf("Failed to set tun IP address\n");
@@ -565,7 +560,7 @@
 		gtp_retranstimeout(gsn, &idleTime);
 		switch (select(maxfd + 1, &fds, NULL, NULL, &idleTime)) {
 		case -1:	/* errno == EINTR : unblocked signal */
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"select() returned -1");
 			/* On error, select returns without modifying fds */
 			FD_ZERO(&fds);
@@ -580,7 +575,7 @@
 
 		if (tun->fd != -1 && FD_ISSET(tun->fd, &fds) &&
 		    tun_decaps(tun) < 0) {
-			sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+			SYS_ERR(DGGSN, LOGL_ERROR, 0,
 				"TUN read failed (fd)=(%d)", tun->fd);
 		}