Added selmode
diff --git a/sgsnemu/cmdline.c b/sgsnemu/cmdline.c
index fa7ad7f..08582c9 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:
-  /mnt/hda5/bin/gengetopt --conf-parser 
+  gengetopt --conf-parser 
 
   The developers of gengetopt consider the fixed text that goes in all
   gengetopt output files to be in the public domain:
@@ -55,6 +55,7 @@
   printf("              --timelimit=INT    Exit after timelimit seconds (default='0')\n");
   printf("              --gtpversion=INT   GTP version to use (default='1')\n");
   printf("   -aSTRING   --apn=STRING       Access point name (default='internet')\n");
+  printf("              --selmode=INT      Selection mode (default='0x01')\n");
   printf("   -iSTRING   --imsi=STRING      IMSI (default='240010123456789')\n");
   printf("              --nsapi=INT        NSAPI (default='0')\n");
   printf("   -mSTRING   --msisdn=STRING    Mobile Station ISDN number (default='46702123456')\n");
@@ -108,6 +109,7 @@
   args_info->timelimit_given = 0 ;
   args_info->gtpversion_given = 0 ;
   args_info->apn_given = 0 ;
+  args_info->selmode_given = 0 ;
   args_info->imsi_given = 0 ;
   args_info->nsapi_given = 0 ;
   args_info->msisdn_given = 0 ;
@@ -137,6 +139,7 @@
   args_info->timelimit_arg = 0 ;\
   args_info->gtpversion_arg = 1 ;\
   args_info->apn_arg = strdup("internet") ;\
+  args_info->selmode_arg = 0x01 ;\
   args_info->imsi_arg = strdup("240010123456789") ;\
   args_info->nsapi_arg = 0 ;\
   args_info->msisdn_arg = strdup("46702123456") ;\
@@ -181,6 +184,7 @@
         { "timelimit",	1, NULL, 0 },
         { "gtpversion",	1, NULL, 0 },
         { "apn",	1, NULL, 'a' },
+        { "selmode",	1, NULL, 0 },
         { "imsi",	1, NULL, 'i' },
         { "nsapi",	1, NULL, 0 },
         { "msisdn",	1, NULL, 'm' },
@@ -418,6 +422,19 @@
             args_info->gtpversion_arg = strtol (optarg,&stop_char,0);
             break;
           }
+          /* Selection mode.  */
+          else if (strcmp (long_options[option_index].name, "selmode") == 0)
+          {
+            if (args_info->selmode_given)
+              {
+                fprintf (stderr, "%s: `--selmode' option given more than once\n", PACKAGE);
+                clear_args ();
+                exit (EXIT_FAILURE);
+              }
+            args_info->selmode_given = 1;
+            args_info->selmode_arg = strtol (optarg,&stop_char,0);
+            break;
+          }
           /* NSAPI.  */
           else if (strcmp (long_options[option_index].name, "nsapi") == 0)
           {
@@ -803,6 +820,22 @@
                 }
               continue;
             }
+          if (!strcmp(fopt, "selmode"))
+            {
+              if (override || !args_info->selmode_given)
+                {
+                  args_info->selmode_given = 1;
+                  if (fnum == 2)
+                    args_info->selmode_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, "imsi"))
             {
               if (override || !args_info->imsi_given)
diff --git a/sgsnemu/cmdline.ggo b/sgsnemu/cmdline.ggo
index 203f60b..c3e2943 100644
--- a/sgsnemu/cmdline.ggo
+++ b/sgsnemu/cmdline.ggo
@@ -30,6 +30,7 @@
 
 option  "gtpversion"   - "GTP version to use"             int    default="1" no
 option  "apn"          a "Access point name"              string default="internet" no
+option  "selmode"      - "Selection mode"                 int    default="0x01" no
 option  "imsi"         i "IMSI"                           string default="240010123456789" no
 option  "nsapi"        - "NSAPI"                          int default="0" no
 option  "msisdn"       m "Mobile Station ISDN number"     string default="46702123456" no
diff --git a/sgsnemu/cmdline.h b/sgsnemu/cmdline.h
index 7298f17..c462ef0 100644
--- a/sgsnemu/cmdline.h
+++ b/sgsnemu/cmdline.h
@@ -31,6 +31,7 @@
   int timelimit_arg;	/* Exit after timelimit seconds (default='0').  */
   int gtpversion_arg;	/* GTP version to use (default='1').  */
   char * apn_arg;	/* Access point name (default='internet').  */
+  int selmode_arg;	/* Selection mode (default='0x01').  */
   char * imsi_arg;	/* IMSI (default='240010123456789').  */
   int nsapi_arg;	/* NSAPI (default='0').  */
   char * msisdn_arg;	/* Mobile Station ISDN number (default='46702123456').  */
@@ -62,6 +63,7 @@
   int timelimit_given ;	/* Whether timelimit was given.  */
   int gtpversion_given ;	/* Whether gtpversion was given.  */
   int apn_given ;	/* Whether apn was given.  */
+  int selmode_given ;	/* Whether selmode was given.  */
   int imsi_given ;	/* Whether imsi was given.  */
   int nsapi_given ;	/* Whether nsapi was given.  */
   int msisdn_given ;	/* Whether msisdn was given.  */
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
index 2d281fb..c6cf20d 100644
--- a/sgsnemu/sgsnemu.c
+++ b/sgsnemu/sgsnemu.c
@@ -108,6 +108,7 @@
   struct ul255_t qos;
   uint16_t cch;
   struct ul255_t apn;
+  uint8_t selmode;
   struct ul16_t msisdn;
 } options;
 
@@ -447,6 +448,12 @@
   options.apn.v[0] = (char) strlen(args_info.apn_arg);
   strncpy(&options.apn.v[1], args_info.apn_arg, sizeof(options.apn.v)-1);
   printf("Using APN:             %s\n", args_info.apn_arg);
+
+
+  /* selmode */
+  options.selmode = args_info.selmode_arg;
+  printf("Using selection mode:  %d\n", args_info.selmode_arg);
+
   
   /* msisdn                                                          */
   if (strlen(args_info.msisdn_arg)>(sizeof(options.msisdn.v)-1)) {
@@ -1134,7 +1141,7 @@
     pdp->qos_req.v[0] = 0x00;
     memcpy(pdp->qos_req.v+1, options.qos.v, options.qos.l);
     
-    pdp->selmode = 0x01; /* MS provided APN, subscription not verified */
+    pdp->selmode = options.selmode;
     
     if (options.apn.l > sizeof(pdp->apn_use.v)) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, "APN length too big");