diff --git a/ggsn/cmdline.h b/ggsn/cmdline.h
index 23a6eee..1ce222e 100644
--- a/ggsn/cmdline.h
+++ b/ggsn/cmdline.h
@@ -1,6 +1,9 @@
-/* cmdline.h */
-
-/* File autogenerated by gengetopt version 2.17  */
+/** @file cmdline.h
+ *  @brief The header file for the command line option parser
+ *  generated by GNU Gengetopt version 2.22.6
+ *  http://www.gnu.org/software/gengetopt.
+ *  DO NOT modify this file, since it can be overwritten
+ *  @author GNU Gengetopt by Lorenzo Bettini */
 
 #ifndef CMDLINE_H
 #define CMDLINE_H
@@ -10,116 +13,252 @@
 #include "config.h"
 #endif
 
+#include <stdio.h> /* for FILE */
+
 #ifdef __cplusplus
 extern "C" {
-#endif				/* __cplusplus */
+#endif /* __cplusplus */
 
 #ifndef CMDLINE_PARSER_PACKAGE
+/** @brief the program name (used for printing errors) */
 #define CMDLINE_PARSER_PACKAGE PACKAGE
 #endif
 
+#ifndef CMDLINE_PARSER_PACKAGE_NAME
+/** @brief the complete program name (used for help and version) */
+#ifdef PACKAGE_NAME
+#define CMDLINE_PARSER_PACKAGE_NAME PACKAGE_NAME
+#else
+#define CMDLINE_PARSER_PACKAGE_NAME PACKAGE
+#endif
+#endif
+
 #ifndef CMDLINE_PARSER_VERSION
+/** @brief the program version */
 #define CMDLINE_PARSER_VERSION VERSION
 #endif
 
-	struct gengetopt_args_info {
-		const char *help_help;	/* Print help and exit help description.  */
-		const char *version_help;	/* Print version and exit help description.  */
-		int fg_flag;	/* Run in foreground (default=off).  */
-		const char *fg_help;	/* Run in foreground help description.  */
-		int debug_flag;	/* Run in debug mode (default=off).  */
-		const char *debug_help;	/* Run in debug mode help description.  */
-		char *conf_arg;	/* Read configuration file (default='/etc/ggsn.conf').  */
-		char *conf_orig;	/* Read configuration file original value given at command line.  */
-		const char *conf_help;	/* Read configuration file help description.  */
-		char *pidfile_arg;	/* Filename of process id file (default='/var/run/ggsn.pid').  */
-		char *pidfile_orig;	/* Filename of process id file original value given at command line.  */
-		const char *pidfile_help;	/* Filename of process id file help description.  */
-		char *statedir_arg;	/* Directory of nonvolatile data (default='/var/lib/ggsn/').  */
-		char *statedir_orig;	/* Directory of nonvolatile data original value given at command line.  */
-		const char *statedir_help;	/* Directory of nonvolatile data help description.  */
-		char *listen_arg;	/* Local interface.  */
-		char *listen_orig;	/* Local interface original value given at command line.  */
-		const char *listen_help;	/* Local interface help description.  */
-		char *net_arg;	/* Network (default='192.168.0.0/24').  */
-		char *net_orig;	/* Network original value given at command line.  */
-		const char *net_help;	/* Network help description.  */
-		char *ipup_arg;	/* Script to run after link-up.  */
-		char *ipup_orig;	/* Script to run after link-up original value given at command line.  */
-		const char *ipup_help;	/* Script to run after link-up help description.  */
-		char *ipdown_arg;	/* Script to run after link-down.  */
-		char *ipdown_orig;	/* Script to run after link-down original value given at command line.  */
-		const char *ipdown_help;	/* Script to run after link-down help description.  */
-		char *dynip_arg;	/* Dynamic IP address pool.  */
-		char *dynip_orig;	/* Dynamic IP address pool original value given at command line.  */
-		const char *dynip_help;	/* Dynamic IP address pool help description.  */
-		char *statip_arg;	/* Static IP address pool.  */
-		char *statip_orig;	/* Static IP address pool original value given at command line.  */
-		const char *statip_help;	/* Static IP address pool help description.  */
-		char *pcodns1_arg;	/* PCO DNS Server 1 (default='0.0.0.0').  */
-		char *pcodns1_orig;	/* PCO DNS Server 1 original value given at command line.  */
-		const char *pcodns1_help;	/* PCO DNS Server 1 help description.  */
-		char *pcodns2_arg;	/* PCO DNS Server 2 (default='0.0.0.0').  */
-		char *pcodns2_orig;	/* PCO DNS Server 2 original value given at command line.  */
-		const char *pcodns2_help;	/* PCO DNS Server 2 help description.  */
-		int timelimit_arg;	/* Exit after timelimit seconds (default='0').  */
-		char *timelimit_orig;	/* Exit after timelimit seconds original value given at command line.  */
-		const char *timelimit_help;	/* Exit after timelimit seconds help description.  */
-		char *apn_arg;	/* Access point name (default='internet').  */
-		char *apn_orig;	/* Access point name original value given at command line.  */
-		const char *apn_help;	/* Access point name help description.  */
-		int qos_arg;	/* Requested quality of service (default='0x0b921f').  */
-		char *qos_orig;	/* Requested quality of service original value given at command line.  */
-		const char *qos_help;	/* Requested quality of service help description.  */
+/** @brief Where the command line options are stored */
+struct gengetopt_args_info
+{
+  const char *help_help; /**< @brief Print help and exit help description.  */
+  const char *version_help; /**< @brief Print version and exit help description.  */
+  int fg_flag;	/**< @brief Run in foreground (default=off).  */
+  const char *fg_help; /**< @brief Run in foreground help description.  */
+  int debug_flag;	/**< @brief Run in debug mode (default=off).  */
+  const char *debug_help; /**< @brief Run in debug mode help description.  */
+  char * conf_arg;	/**< @brief Read configuration file (default='/etc/ggsn.conf').  */
+  char * conf_orig;	/**< @brief Read configuration file original value given at command line.  */
+  const char *conf_help; /**< @brief Read configuration file help description.  */
+  char * pidfile_arg;	/**< @brief Filename of process id file (default='/var/run/ggsn.pid').  */
+  char * pidfile_orig;	/**< @brief Filename of process id file original value given at command line.  */
+  const char *pidfile_help; /**< @brief Filename of process id file help description.  */
+  char * statedir_arg;	/**< @brief Directory of nonvolatile data (default='/var/lib/ggsn/').  */
+  char * statedir_orig;	/**< @brief Directory of nonvolatile data original value given at command line.  */
+  const char *statedir_help; /**< @brief Directory of nonvolatile data help description.  */
+  char * listen_arg;	/**< @brief Local interface.  */
+  char * listen_orig;	/**< @brief Local interface original value given at command line.  */
+  const char *listen_help; /**< @brief Local interface help description.  */
+  char * net_arg;	/**< @brief Network (default='192.168.0.0/24').  */
+  char * net_orig;	/**< @brief Network original value given at command line.  */
+  const char *net_help; /**< @brief Network help description.  */
+  char * ipup_arg;	/**< @brief Script to run after link-up.  */
+  char * ipup_orig;	/**< @brief Script to run after link-up original value given at command line.  */
+  const char *ipup_help; /**< @brief Script to run after link-up help description.  */
+  char * ipdown_arg;	/**< @brief Script to run after link-down.  */
+  char * ipdown_orig;	/**< @brief Script to run after link-down original value given at command line.  */
+  const char *ipdown_help; /**< @brief Script to run after link-down help description.  */
+  char * dynip_arg;	/**< @brief Dynamic IP address pool.  */
+  char * dynip_orig;	/**< @brief Dynamic IP address pool original value given at command line.  */
+  const char *dynip_help; /**< @brief Dynamic IP address pool help description.  */
+  char * statip_arg;	/**< @brief Static IP address pool.  */
+  char * statip_orig;	/**< @brief Static IP address pool original value given at command line.  */
+  const char *statip_help; /**< @brief Static IP address pool help description.  */
+  char * pcodns1_arg;	/**< @brief PCO DNS Server 1 (default='0.0.0.0').  */
+  char * pcodns1_orig;	/**< @brief PCO DNS Server 1 original value given at command line.  */
+  const char *pcodns1_help; /**< @brief PCO DNS Server 1 help description.  */
+  char * pcodns2_arg;	/**< @brief PCO DNS Server 2 (default='0.0.0.0').  */
+  char * pcodns2_orig;	/**< @brief PCO DNS Server 2 original value given at command line.  */
+  const char *pcodns2_help; /**< @brief PCO DNS Server 2 help description.  */
+  int timelimit_arg;	/**< @brief Exit after timelimit seconds (default='0').  */
+  char * timelimit_orig;	/**< @brief Exit after timelimit seconds original value given at command line.  */
+  const char *timelimit_help; /**< @brief Exit after timelimit seconds help description.  */
+  char * apn_arg;	/**< @brief Access point name (default='internet').  */
+  char * apn_orig;	/**< @brief Access point name original value given at command line.  */
+  const char *apn_help; /**< @brief Access point name help description.  */
+  int qos_arg;	/**< @brief Requested quality of service (default='0x0b921f').  */
+  char * qos_orig;	/**< @brief Requested quality of service original value given at command line.  */
+  const char *qos_help; /**< @brief Requested quality of service help description.  */
+  
+  unsigned int help_given ;	/**< @brief Whether help was given.  */
+  unsigned int version_given ;	/**< @brief Whether version was given.  */
+  unsigned int fg_given ;	/**< @brief Whether fg was given.  */
+  unsigned int debug_given ;	/**< @brief Whether debug was given.  */
+  unsigned int conf_given ;	/**< @brief Whether conf was given.  */
+  unsigned int pidfile_given ;	/**< @brief Whether pidfile was given.  */
+  unsigned int statedir_given ;	/**< @brief Whether statedir was given.  */
+  unsigned int listen_given ;	/**< @brief Whether listen was given.  */
+  unsigned int net_given ;	/**< @brief Whether net was given.  */
+  unsigned int ipup_given ;	/**< @brief Whether ipup was given.  */
+  unsigned int ipdown_given ;	/**< @brief Whether ipdown was given.  */
+  unsigned int dynip_given ;	/**< @brief Whether dynip was given.  */
+  unsigned int statip_given ;	/**< @brief Whether statip was given.  */
+  unsigned int pcodns1_given ;	/**< @brief Whether pcodns1 was given.  */
+  unsigned int pcodns2_given ;	/**< @brief Whether pcodns2 was given.  */
+  unsigned int timelimit_given ;	/**< @brief Whether timelimit was given.  */
+  unsigned int apn_given ;	/**< @brief Whether apn was given.  */
+  unsigned int qos_given ;	/**< @brief Whether qos was given.  */
 
-		int help_given;	/* Whether help was given.  */
-		int version_given;	/* Whether version was given.  */
-		int fg_given;	/* Whether fg was given.  */
-		int debug_given;	/* Whether debug was given.  */
-		int conf_given;	/* Whether conf was given.  */
-		int pidfile_given;	/* Whether pidfile was given.  */
-		int statedir_given;	/* Whether statedir was given.  */
-		int listen_given;	/* Whether listen was given.  */
-		int net_given;	/* Whether net was given.  */
-		int ipup_given;	/* Whether ipup was given.  */
-		int ipdown_given;	/* Whether ipdown was given.  */
-		int dynip_given;	/* Whether dynip was given.  */
-		int statip_given;	/* Whether statip was given.  */
-		int pcodns1_given;	/* Whether pcodns1 was given.  */
-		int pcodns2_given;	/* Whether pcodns2 was given.  */
-		int timelimit_given;	/* Whether timelimit was given.  */
-		int apn_given;	/* Whether apn was given.  */
-		int qos_given;	/* Whether qos was given.  */
+} ;
 
-	};
+/** @brief The additional parameters to pass to parser functions */
+struct cmdline_parser_params
+{
+  int override; /**< @brief whether to override possibly already present options (default 0) */
+  int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */
+  int check_required; /**< @brief whether to check that all required options were provided (default 1) */
+  int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */
+  int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */
+} ;
 
-	extern const char *gengetopt_args_info_purpose;
-	extern const char *gengetopt_args_info_usage;
-	extern const char *gengetopt_args_info_help[];
+/** @brief the purpose string of the program */
+extern const char *gengetopt_args_info_purpose;
+/** @brief the usage string of the program */
+extern const char *gengetopt_args_info_usage;
+/** @brief the description string of the program */
+extern const char *gengetopt_args_info_description;
+/** @brief all the lines making the help output */
+extern const char *gengetopt_args_info_help[];
 
-	int cmdline_parser(int argc, char *const *argv,
-			   struct gengetopt_args_info *args_info);
-	int cmdline_parser2(int argc, char *const *argv,
-			    struct gengetopt_args_info *args_info,
-			    int override, int initialize, int check_required);
-	int cmdline_parser_file_save(const char *filename,
-				     struct gengetopt_args_info *args_info);
+/**
+ * The command line parser
+ * @param argc the number of command line options
+ * @param argv the command line options
+ * @param args_info the structure where option information will be stored
+ * @return 0 if everything went fine, NON 0 if an error took place
+ */
+int cmdline_parser (int argc, char **argv,
+  struct gengetopt_args_info *args_info);
 
-	void cmdline_parser_print_help(void);
-	void cmdline_parser_print_version(void);
+/**
+ * The command line parser (version with additional parameters - deprecated)
+ * @param argc the number of command line options
+ * @param argv the command line options
+ * @param args_info the structure where option information will be stored
+ * @param override whether to override possibly already present options
+ * @param initialize whether to initialize the option structure my_args_info
+ * @param check_required whether to check that all required options were provided
+ * @return 0 if everything went fine, NON 0 if an error took place
+ * @deprecated use cmdline_parser_ext() instead
+ */
+int cmdline_parser2 (int argc, char **argv,
+  struct gengetopt_args_info *args_info,
+  int override, int initialize, int check_required);
 
-	void cmdline_parser_init(struct gengetopt_args_info *args_info);
-	void cmdline_parser_free(struct gengetopt_args_info *args_info);
+/**
+ * The command line parser (version with additional parameters)
+ * @param argc the number of command line options
+ * @param argv the command line options
+ * @param args_info the structure where option information will be stored
+ * @param params additional parameters for the parser
+ * @return 0 if everything went fine, NON 0 if an error took place
+ */
+int cmdline_parser_ext (int argc, char **argv,
+  struct gengetopt_args_info *args_info,
+  struct cmdline_parser_params *params);
 
-	int cmdline_parser_configfile(char *const filename,
-				      struct gengetopt_args_info *args_info,
-				      int override, int initialize,
-				      int check_required);
+/**
+ * Save the contents of the option struct into an already open FILE stream.
+ * @param outfile the stream where to dump options
+ * @param args_info the option struct to dump
+ * @return 0 if everything went fine, NON 0 if an error took place
+ */
+int cmdline_parser_dump(FILE *outfile,
+  struct gengetopt_args_info *args_info);
 
-	int cmdline_parser_required(struct gengetopt_args_info *args_info,
-				    const char *prog_name);
+/**
+ * Save the contents of the option struct into a (text) file.
+ * This file can be read by the config file parser (if generated by gengetopt)
+ * @param filename the file where to save
+ * @param args_info the option struct to save
+ * @return 0 if everything went fine, NON 0 if an error took place
+ */
+int cmdline_parser_file_save(const char *filename,
+  struct gengetopt_args_info *args_info);
+
+/**
+ * Print the help
+ */
+void cmdline_parser_print_help(void);
+/**
+ * Print the version
+ */
+void cmdline_parser_print_version(void);
+
+/**
+ * Initializes all the fields a cmdline_parser_params structure 
+ * to their default values
+ * @param params the structure to initialize
+ */
+void cmdline_parser_params_init(struct cmdline_parser_params *params);
+
+/**
+ * Allocates dynamically a cmdline_parser_params structure and initializes
+ * all its fields to their default values
+ * @return the created and initialized cmdline_parser_params structure
+ */
+struct cmdline_parser_params *cmdline_parser_params_create(void);
+
+/**
+ * Initializes the passed gengetopt_args_info structure's fields
+ * (also set default values for options that have a default)
+ * @param args_info the structure to initialize
+ */
+void cmdline_parser_init (struct gengetopt_args_info *args_info);
+/**
+ * Deallocates the string fields of the gengetopt_args_info structure
+ * (but does not deallocate the structure itself)
+ * @param args_info the structure to deallocate
+ */
+void cmdline_parser_free (struct gengetopt_args_info *args_info);
+
+/**
+ * The config file parser (deprecated version)
+ * @param filename the name of the config file
+ * @param args_info the structure where option information will be stored
+ * @param override whether to override possibly already present options
+ * @param initialize whether to initialize the option structure my_args_info
+ * @param check_required whether to check that all required options were provided
+ * @return 0 if everything went fine, NON 0 if an error took place
+ * @deprecated use cmdline_parser_config_file() instead
+ */
+int cmdline_parser_configfile (const char *filename,
+  struct gengetopt_args_info *args_info,
+  int override, int initialize, int check_required);
+
+/**
+ * The config file parser
+ * @param filename the name of the config file
+ * @param args_info the structure where option information will be stored
+ * @param params additional parameters for the parser
+ * @return 0 if everything went fine, NON 0 if an error took place
+ */
+int cmdline_parser_config_file (const char *filename,
+  struct gengetopt_args_info *args_info,
+  struct cmdline_parser_params *params);
+
+/**
+ * Checks that all the required options were specified
+ * @param args_info the structure to check
+ * @param prog_name the name of the program that will be used to print
+ *   possible errors
+ * @return
+ */
+int cmdline_parser_required (struct gengetopt_args_info *args_info,
+  const char *prog_name);
+
 
 #ifdef __cplusplus
 }
-#endif				/* __cplusplus */
-#endif				/* CMDLINE_H */
+#endif /* __cplusplus */
+#endif /* CMDLINE_H */
