aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjjako <jjako>2004-05-27 20:06:36 +0000
committerjjako <jjako>2004-05-27 20:06:36 +0000
commit7e051d37bb866b5b50b450569ad869f55299f765 (patch)
tree7b4050625e9bf1b0d63fe15101a6b4ae06ec1a5a
parentb62c3dd3c40c32c39466d83e589a846707d9ea99 (diff)
Charging option
-rw-r--r--doc/sgsnemu.813
-rw-r--r--sgsnemu/cmdline.c39
-rw-r--r--sgsnemu/cmdline.ggo1
-rw-r--r--sgsnemu/cmdline.h4
-rw-r--r--sgsnemu/sgsnemu.c14
5 files changed, 59 insertions, 12 deletions
diff --git a/doc/sgsnemu.8 b/doc/sgsnemu.8
index 4718992..94e51a5 100644
--- a/doc/sgsnemu.8
+++ b/doc/sgsnemu.8
@@ -19,7 +19,7 @@
.\" IP indented paragraph
.\" TP hanging label
-.TH sgsnemu 8 "July 2003"
+.TH sgsnemu 8 "May 2004"
.SH NAME
sgsnemu \- Serving GPRS Support Node Emulator
.SH SYNOPSIS
@@ -61,6 +61,8 @@ sgsnemu \- Serving GPRS Support Node Emulator
] [
.BI \-\-qos " qos"
] [
+.BI \-\-charging " charging"
+] [
.BI \-\-uid " uid"
] [
.BI \-\-pwd " pwd"
@@ -242,6 +244,13 @@ abbreviation of Quality of Service. See 3GPP specification 09.60 for
the format of this string.
.TP
+.BI --charging " charging"
+Charging characteristics to use when connecting to the GGSN (default =
+0x0800). 0x0800 = Normal, 0x0400 = Prepaid, 0x0200 = Flat rate, 0x0100
+= Hot billing. See 3GPP specification 32.015 for the format of this
+field.
+
+.TP
.BI --uid " uid"
User ID to send to GGSN as protocol configuration option.
@@ -368,7 +377,7 @@ can be found at
.SH COPYRIGHT
-Copyright (C) 2002, 2003 by Mondru AB.
+Copyright (C) 2002, 2003, 2004 by Mondru AB.
The contents of this file may be used under the terms of the GNU
General Public License Version 2, provided that the above copyright
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 */