ggsn: Be able to set the log level for the text file

Fixes: SYS#599
diff --git a/ggsn/cmdline.c b/ggsn/cmdline.c
index 3fcfbd5..37ed992 100644
--- a/ggsn/cmdline.c
+++ b/ggsn/cmdline.c
@@ -53,6 +53,7 @@
   "  -a, --apn=STRING       Access point name  (default=`internet')",
   "  -q, --qos=INT          Requested quality of service  (default=`0x0b921f')",
   "      --logfile=STRING   Logfile for errors",
+  "      --loglevel=STRING  Global log ldevel  (default=`error')",
     0
 };
 
@@ -121,6 +122,7 @@
   args_info->apn_given = 0 ;
   args_info->qos_given = 0 ;
   args_info->logfile_given = 0 ;
+  args_info->loglevel_given = 0 ;
 }
 
 static
@@ -159,6 +161,8 @@
   args_info->qos_orig = NULL;
   args_info->logfile_arg = NULL;
   args_info->logfile_orig = NULL;
+  args_info->loglevel_arg = gengetopt_strdup ("error");
+  args_info->loglevel_orig = NULL;
   
 }
 
@@ -186,6 +190,7 @@
   args_info->apn_help = gengetopt_args_info_help[16] ;
   args_info->qos_help = gengetopt_args_info_help[17] ;
   args_info->logfile_help = gengetopt_args_info_help[18] ;
+  args_info->loglevel_help = gengetopt_args_info_help[19] ;
   
 }
 
@@ -297,6 +302,8 @@
   free_string_field (&(args_info->qos_orig));
   free_string_field (&(args_info->logfile_arg));
   free_string_field (&(args_info->logfile_orig));
+  free_string_field (&(args_info->loglevel_arg));
+  free_string_field (&(args_info->loglevel_orig));
   
   
 
@@ -365,6 +372,8 @@
     write_into_file(outfile, "qos", args_info->qos_orig, 0);
   if (args_info->logfile_given)
     write_into_file(outfile, "logfile", args_info->logfile_orig, 0);
+  if (args_info->loglevel_given)
+    write_into_file(outfile, "loglevel", args_info->loglevel_orig, 0);
   
 
   i = EXIT_SUCCESS;
@@ -594,12 +603,14 @@
   
   int override;
   int initialize;
+  int check_required;
   int check_ambiguity;
   
   package_name = argv[0];
   
   override = params->override;
   initialize = params->initialize;
+  check_required = params->check_required;
   check_ambiguity = params->check_ambiguity;
 
   if (initialize)
@@ -636,6 +647,7 @@
         { "apn",	1, NULL, 'a' },
         { "qos",	1, NULL, 'q' },
         { "logfile",	1, NULL, 0 },
+        { "loglevel",	1, NULL, 0 },
         { 0,  0, 0, 0 }
       };
 
@@ -877,6 +889,20 @@
               goto failure;
           
           }
+          /* Global log ldevel.  */
+          else if (strcmp (long_options[option_index].name, "loglevel") == 0)
+          {
+          
+          
+            if (update_arg( (void *)&(args_info->loglevel_arg), 
+                 &(args_info->loglevel_orig), &(args_info->loglevel_given),
+                &(local_args_info.loglevel_given), optarg, 0, "error", ARG_STRING,
+                check_ambiguity, override, 0, 0,
+                "loglevel", '-',
+                additional_error))
+              goto failure;
+          
+          }
           
           break;
         case '?':	/* Invalid option.  */
diff --git a/ggsn/cmdline.ggo b/ggsn/cmdline.ggo
index 5bb05dc..9c4c976 100644
--- a/ggsn/cmdline.ggo
+++ b/ggsn/cmdline.ggo
@@ -32,4 +32,4 @@
 option  "apn"         a "Access point name"             string default="internet" no
 option  "qos"         q "Requested quality of service"  int    default="0x0b921f" no
 option  "logfile"     - "Logfile for errors"            string no
-
+option  "loglevel"    - "Global log ldevel"		string default="error" no
diff --git a/ggsn/cmdline.h b/ggsn/cmdline.h
index f3636e8..a87fa4a 100644
--- a/ggsn/cmdline.h
+++ b/ggsn/cmdline.h
@@ -92,6 +92,9 @@
   char * logfile_arg;	/**< @brief Logfile for errors.  */
   char * logfile_orig;	/**< @brief Logfile for errors original value given at command line.  */
   const char *logfile_help; /**< @brief Logfile for errors help description.  */
+  char * loglevel_arg;	/**< @brief Global log ldevel (default='error').  */
+  char * loglevel_orig;	/**< @brief Global log ldevel original value given at command line.  */
+  const char *loglevel_help; /**< @brief Global log ldevel help description.  */
   
   unsigned int help_given ;	/**< @brief Whether help was given.  */
   unsigned int version_given ;	/**< @brief Whether version was given.  */
@@ -112,6 +115,7 @@
   unsigned int apn_given ;	/**< @brief Whether apn was given.  */
   unsigned int qos_given ;	/**< @brief Whether qos was given.  */
   unsigned int logfile_given ;	/**< @brief Whether logfile was given.  */
+  unsigned int loglevel_given ;	/**< @brief Whether loglevel was given.  */
 
 } ;
 
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 3fd584a..86a9899 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -280,6 +280,8 @@
 	/* Open a log file */
 	if (args_info.logfile_arg) {
 		struct log_target *tgt;
+		int lvl;
+
 		tgt = log_target_find(LOG_TGT_TYPE_FILE, args_info.logfile_arg);
 		if (!tgt) {
 			tgt = log_target_create_file(args_info.logfile_arg);
@@ -291,6 +293,16 @@
 			}
 			log_add_target(tgt);
 		}
+		log_set_all_filter(tgt, 1);
+		log_set_use_color(tgt, 0);
+
+		if (args_info.loglevel_arg) {
+			lvl = log_parse_level(args_info.loglevel_arg);
+			log_set_log_level(tgt, lvl);
+			LOGP(DGGSN, LOGL_NOTICE,
+				"Set file log level to %s\n",
+				log_level_str(lvl));
+		}
 	}
 
 	if (args_info.debug_flag) {