aboutsummaryrefslogtreecommitdiffstats
path: root/sgsnemu
diff options
context:
space:
mode:
Diffstat (limited to 'sgsnemu')
-rw-r--r--sgsnemu/cmdline.c39
-rw-r--r--sgsnemu/cmdline.ggo1
-rw-r--r--sgsnemu/cmdline.h4
-rw-r--r--sgsnemu/sgsnemu.c14
4 files changed, 48 insertions, 10 deletions
diff --git a/sgsnemu/cmdline.c b/sgsnemu/cmdline.c
index be47cc1..fa7ad7f 100644
--- a/sgsnemu/cmdline.c
+++ b/sgsnemu/cmdline.c
@@ -1,7 +1,7 @@
/*
File autogenerated by gengetopt version 2.8
generated with the following command:
- gengetopt --conf-parser
+ /mnt/hda5/bin/gengetopt --conf-parser
The developers of gengetopt consider the fixed text that goes in all
gengetopt output files to be in the public domain:
@@ -56,9 +56,10 @@ cmdline_parser_print_help (void)
printf(" --gtpversion=INT GTP version to use (default='1')\n");
printf(" -aSTRING --apn=STRING Access point name (default='internet')\n");
printf(" -iSTRING --imsi=STRING IMSI (default='240010123456789')\n");
- printf(" --nsapi=INT NSAPI (default='1')\n");
+ printf(" --nsapi=INT NSAPI (default='0')\n");
printf(" -mSTRING --msisdn=STRING Mobile Station ISDN number (default='46702123456')\n");
printf(" -qINT --qos=INT Requested quality of service (default='0x0b921f')\n");
+ printf(" --charging=INT Charging characteristics (default='0x0800')\n");
printf(" -uSTRING --uid=STRING Login user ID (default='mig')\n");
printf(" -pSTRING --pwd=STRING Login password (default='hemmelig')\n");
printf(" --createif Create local network interface (default=off)\n");
@@ -111,6 +112,7 @@ cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_i
args_info->nsapi_given = 0 ;
args_info->msisdn_given = 0 ;
args_info->qos_given = 0 ;
+ args_info->charging_given = 0 ;
args_info->uid_given = 0 ;
args_info->pwd_given = 0 ;
args_info->createif_given = 0 ;
@@ -136,9 +138,10 @@ cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_i
args_info->gtpversion_arg = 1 ;\
args_info->apn_arg = strdup("internet") ;\
args_info->imsi_arg = strdup("240010123456789") ;\
- args_info->nsapi_arg = 1 ;\
+ args_info->nsapi_arg = 0 ;\
args_info->msisdn_arg = strdup("46702123456") ;\
args_info->qos_arg = 0x0b921f ;\
+ args_info->charging_arg = 0x0800 ;\
args_info->uid_arg = strdup("mig") ;\
args_info->pwd_arg = strdup("hemmelig") ;\
args_info->createif_flag = 0;\
@@ -182,6 +185,7 @@ cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_i
{ "nsapi", 1, NULL, 0 },
{ "msisdn", 1, NULL, 'm' },
{ "qos", 1, NULL, 'q' },
+ { "charging", 1, NULL, 0 },
{ "uid", 1, NULL, 'u' },
{ "pwd", 1, NULL, 'p' },
{ "createif", 0, NULL, 0 },
@@ -427,6 +431,19 @@ cmdline_parser (int argc, char * const *argv, struct gengetopt_args_info *args_i
args_info->nsapi_arg = strtol (optarg,&stop_char,0);
break;
}
+ /* Charging characteristics. */
+ else if (strcmp (long_options[option_index].name, "charging") == 0)
+ {
+ if (args_info->charging_given)
+ {
+ fprintf (stderr, "%s: `--charging' option given more than once\n", PACKAGE);
+ clear_args ();
+ exit (EXIT_FAILURE);
+ }
+ args_info->charging_given = 1;
+ args_info->charging_arg = strtol (optarg,&stop_char,0);
+ break;
+ }
/* Create local network interface. */
else if (strcmp (long_options[option_index].name, "createif") == 0)
{
@@ -850,6 +867,22 @@ cmdline_parser_configfile (char * const filename, struct gengetopt_args_info *ar
}
continue;
}
+ if (!strcmp(fopt, "charging"))
+ {
+ if (override || !args_info->charging_given)
+ {
+ args_info->charging_given = 1;
+ if (fnum == 2)
+ args_info->charging_arg = strtol (farg,&stop_char,0);
+ else
+ {
+ fprintf (stderr, "%s:%d: required <option_name> <option_val>\n",
+ filename, line_num);
+ exit (EXIT_FAILURE);
+ }
+ }
+ continue;
+ }
if (!strcmp(fopt, "uid"))
{
if (override || !args_info->uid_given)
diff --git a/sgsnemu/cmdline.ggo b/sgsnemu/cmdline.ggo
index 1d0ea75..203f60b 100644
--- a/sgsnemu/cmdline.ggo
+++ b/sgsnemu/cmdline.ggo
@@ -34,6 +34,7 @@ option "imsi" i "IMSI" string default="240010
option "nsapi" - "NSAPI" int default="0" no
option "msisdn" m "Mobile Station ISDN number" string default="46702123456" no
option "qos" q "Requested quality of service" int default="0x0b921f" no
+option "charging" - "Charging characteristics" int default="0x0800" no
option "uid" u "Login user ID" string default="mig" no
option "pwd" p "Login password" string default="hemmelig" no
diff --git a/sgsnemu/cmdline.h b/sgsnemu/cmdline.h
index 2d9b7e5..7298f17 100644
--- a/sgsnemu/cmdline.h
+++ b/sgsnemu/cmdline.h
@@ -32,9 +32,10 @@ struct gengetopt_args_info
int gtpversion_arg; /* GTP version to use (default='1'). */
char * apn_arg; /* Access point name (default='internet'). */
char * imsi_arg; /* IMSI (default='240010123456789'). */
- int nsapi_arg; /* NSAPI (default='1'). */
+ int nsapi_arg; /* NSAPI (default='0'). */
char * msisdn_arg; /* Mobile Station ISDN number (default='46702123456'). */
int qos_arg; /* Requested quality of service (default='0x0b921f'). */
+ int charging_arg; /* Charging characteristics (default='0x0800'). */
char * uid_arg; /* Login user ID (default='mig'). */
char * pwd_arg; /* Login password (default='hemmelig'). */
int createif_flag; /* Create local network interface (default=off). */
@@ -65,6 +66,7 @@ struct gengetopt_args_info
int nsapi_given ; /* Whether nsapi was given. */
int msisdn_given ; /* Whether msisdn was given. */
int qos_given ; /* Whether qos was given. */
+ int charging_given ; /* Whether charging was given. */
int uid_given ; /* Whether uid was given. */
int pwd_given ; /* Whether pwd was given. */
int createif_given ; /* Whether createif was given. */
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
index 388f736..2d281fb 100644
--- a/sgsnemu/sgsnemu.c
+++ b/sgsnemu/sgsnemu.c
@@ -106,6 +106,7 @@ struct {
int gtpversion;
struct ul255_t pco;
struct ul255_t qos;
+ uint16_t cch;
struct ul255_t apn;
struct ul16_t msisdn;
} options;
@@ -224,6 +225,7 @@ int process_options(int argc, char **argv) {
printf("debug: %d\n", args_info.debug_flag);
if (args_info.imsi_arg) printf("imsi: %s\n", args_info.imsi_arg);
printf("qos: %#08x\n", args_info.qos_arg);
+ printf("charging: %#04x\n", args_info.charging_arg);
if (args_info.apn_arg) printf("apn: %s\n", args_info.apn_arg);
if (args_info.msisdn_arg) printf("msisdn: %s\n", args_info.msisdn_arg);
if (args_info.uid_arg) printf("uid: %s\n", args_info.uid_arg);
@@ -257,6 +259,7 @@ int process_options(int argc, char **argv) {
printf("debug: %d\n", args_info.debug_flag);
if (args_info.imsi_arg) printf("imsi: %s\n", args_info.imsi_arg);
printf("qos: %#08x\n", args_info.qos_arg);
+ printf("charging: %#04x\n", args_info.charging_arg);
if (args_info.apn_arg) printf("apn: %s\n", args_info.apn_arg);
if (args_info.msisdn_arg) printf("msisdn: %s\n", args_info.msisdn_arg);
if (args_info.uid_arg) printf("uid: %s\n", args_info.uid_arg);
@@ -411,6 +414,9 @@ int process_options(int argc, char **argv) {
options.qos.v[2] = (args_info.qos_arg) & 0xff;
options.qos.v[1] = ((args_info.qos_arg) >> 8) & 0xff;
options.qos.v[0] = ((args_info.qos_arg) >> 16) & 0xff;
+
+ /* charging */
+ options.cch = args_info.charging_arg;
/* contexts */
if (args_info.contexts_arg > MAXCONTEXTS) {
@@ -1168,12 +1174,8 @@ int main(int argc, char **argv)
pdp->hisaddr0 = options.remote;
pdp->hisaddr1 = options.remote;
- /* TODO: This could be an option */
- pdp->cch_pdp = 2048; /* Normal charging 3GPP 32.015 */
- /* 2048 = Normal
- 1024 = Prepaid
- 0512 = Flat rate
- 0256 = Hot billing */
+ pdp->cch_pdp = options.cch; /* 2048 = Normal, 1024 = Prepaid,
+ 512 = Flat rate, 256 = Hot billing */
/* Create context */
/* We send this of once. Retransmissions are handled by gtplib */