/* cmdline.h */

/* File autogenerated by gengetopt version 2.17  */

#ifndef CMDLINE_H
#define CMDLINE_H

/* If we use autoconf.  */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif				/* __cplusplus */

#ifndef CMDLINE_PARSER_PACKAGE
#define CMDLINE_PARSER_PACKAGE PACKAGE
#endif

#ifndef CMDLINE_PARSER_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.  */

		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.  */

	};

	extern const char *gengetopt_args_info_purpose;
	extern const char *gengetopt_args_info_usage;
	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);

	void cmdline_parser_print_help(void);
	void cmdline_parser_print_version(void);

	void cmdline_parser_init(struct gengetopt_args_info *args_info);
	void cmdline_parser_free(struct gengetopt_args_info *args_info);

	int cmdline_parser_configfile(char *const filename,
				      struct gengetopt_args_info *args_info,
				      int override, int initialize,
				      int check_required);

	int cmdline_parser_required(struct gengetopt_args_info *args_info,
				    const char *prog_name);

#ifdef __cplusplus
}
#endif				/* __cplusplus */
#endif				/* CMDLINE_H */
