/******************************************************************************* OpenAirInterface Copyright(c) 1999 - 2014 Eurecom OpenAirInterface is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenAirInterface is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenAirInterface.The full GNU General Public License is included in this distribution in the file called "COPYING". If not, see . Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France. *******************************************************************************/ /***************************************************************************** Source nas_parser.c Version 0.1 Date 2012/02/27 Product NAS stack Subsystem NAS main process Author Frederic Maurel Description NAS command line parser *****************************************************************************/ #include "nas_parser.h" #include "parser.h" #include // fprintf #include // atoi /****************************************************************************/ /**************** E X T E R N A L D E F I N I T I O N S ****************/ /****************************************************************************/ /****************************************************************************/ /******************* L O C A L D E F I N I T I O N S *******************/ /****************************************************************************/ /* * Identifiers of the NAS command line options */ enum { NAS_PARSER_TRACE_LEVEL, /* Logging trace level */ NAS_PARSER_NETWORK_HOST, /* Network layer's hostname */ NAS_PARSER_NETWORK_PORT, /* Network layer's port number */ NAS_PARSER_NB_OPTIONS }; /* ----------------------------------------------------- * Definition of the internal NAS command line structure * ----------------------------------------------------- * The command line is defined with a name (default is "NASprocess" * but it will be replaced by the command name actually used at * runtime), a number of options and the list of options. * An option is defined with a name, an argument following the name, * the usage displayed by the usage function and a default value. */ static parser_command_line_t nasParserCommandLine = { "NASprocess", /* Command name */ NAS_PARSER_NB_OPTIONS, /* Number of options */ { /* Command line options */ { "-trace", "", "Logging trace level\t\t", NAS_PARSER_DEFAULT_TRACE_LEVEL }, { "-nhost", "", "Network layer's hostname\t", NAS_PARSER_DEFAULT_NETWORK_HOSTNAME }, { "-nport", "", "Network layer's port number\t", NAS_PARSER_DEFAULT_NETWORK_PORT_NUMBER }, } }; /* * Converts a string, containing hexadecimal formatted integer, to an integer */ static int atohex(const char *a_char); /****************************************************************************/ /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ /**************************************************************************** ** ** ** Name: nas_parser_print_usage() ** ** ** ** Description: Displays the command line options used to run the NAS ** ** process and the firmware version defined at compilation ** ** time ** ** ** ** Inputs: version: Firmware version ** ** Others: None ** ** ** ** Outputs: Return: None ** ** Others: None ** ** ** ***************************************************************************/ void nas_parser_print_usage(const char *version) { parser_print_usage(&nasParserCommandLine); fprintf(stderr, "Version: %s\n", version); } /**************************************************************************** ** ** ** Name: nas_parser_get_options() ** ** ** ** Description: Gets the command line options used to run the NAS process ** ** ** ** Inputs: argc: Number of options ** ** argv: Pointer to the list of options ** ** Others: None ** ** ** ** Outputs: Return: RETURNerror, RETURNok ** ** Others: None ** ** ** ***************************************************************************/ int nas_parser_get_options(int argc, const char **argv) { return parser_get_options(argc, argv, &nasParserCommandLine); } /**************************************************************************** ** ** ** Name: nas_parser_get_nb_options() ** ** ** ** Description: Returns the number of the command line options used to ** ** run the NAS process ** ** ** ** Inputs: None ** ** Others: None ** ** ** ** Outputs: Return: Number of command line options ** ** Others: None ** ** ** ***************************************************************************/ int nas_parser_get_nb_options(void) { return nasParserCommandLine.nb_options; } /**************************************************************************** ** ** ** Name: nas_parser_get_trace_level() ** ** ** ** Description: Returns the value of the logging trace level ** ** ** ** Inputs: None ** ** Others: None ** ** ** ** Outputs: Return: Value of the logging trace level ** ** Others: None ** ** ** ***************************************************************************/ int nas_parser_get_trace_level(void) { return atohex( nasParserCommandLine.options[NAS_PARSER_TRACE_LEVEL].pvalue ); } /**************************************************************************** ** ** ** Name: nas_parser_get_network_host() ** ** ** ** Description: Returns the value of the network layer hostname ** ** ** ** Inputs: None ** ** Others: None ** ** ** ** Outputs: Return: Value of the network layer hostname ** ** Others: None ** ** ** ***************************************************************************/ const char *nas_parser_get_network_host(void) { return nasParserCommandLine.options[NAS_PARSER_NETWORK_HOST].pvalue; } /**************************************************************************** ** ** ** Name: nas_parser_get_network_port() ** ** ** ** Description: Returns the value of the network layer port number ** ** ** ** Inputs: None ** ** Others: None ** ** ** ** Outputs: Return: Value of the network layer port number ** ** Others: None ** ** ** ***************************************************************************/ const char *nas_parser_get_network_port(void) { return nasParserCommandLine.options[NAS_PARSER_NETWORK_PORT].pvalue; } /****************************************************************************/ /********************* L O C A L F U N C T I O N S *********************/ /****************************************************************************/ static int atohex(const char *a_char) { int result; for (result=0; a_char; a_char++) { if (*a_char >= '0' && *a_char <= '9') { result = (result << 4) + (*a_char - '0'); } else if (*a_char >= 'A' && *a_char <= 'F') { result = (result << 4) + (*a_char - 'A' + 10); } else if (*a_char >= 'a' && *a_char <= 'f') { result = (result << 4) + (*a_char - 'a' + 10); } else { break; } } return result; }