<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17758">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Refactor arg/cfg parser to use talloc<br><br>Used to get rid of some annoying memory leaks presented by ASan after<br>each run. both ASan and talloc_report_full are fine after these changes,<br>and sgsnemu continues to work as expected.<br><br>Change-Id: Ie0d48a12a8349be5a859a03191421cbd9cc324cc<br>---<br>M sgsnemu/cmdline.c<br>M sgsnemu/cmdline.h<br>M sgsnemu/sgsnemu.c<br>3 files changed, 367 insertions(+), 377 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/58/17758/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sgsnemu/cmdline.c b/sgsnemu/cmdline.c</span><br><span>index 604e76b..1789c63 100644</span><br><span>--- a/sgsnemu/cmdline.c</span><br><span>+++ b/sgsnemu/cmdline.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /*</span><br><span> File autogenerated by gengetopt version 2.22.6</span><br><span> generated with the following command:</span><br><span style="color: hsl(0, 100%, 40%);">- gengetopt --conf-parser </span><br><span style="color: hsl(120, 100%, 40%);">+ gengetopt --conf-parser</span><br><span> </span><br><span> The developers of gengetopt consider the fixed text that goes in all</span><br><span> gengetopt output files to be in the public domain:</span><br><span>@@ -21,6 +21,8 @@</span><br><span> #define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <getopt.h></span><br><span> </span><br><span> #include "cmdline.h"</span><br><span>@@ -116,14 +118,12 @@</span><br><span> while (cmd_line_list) {</span><br><span> cmd_line_list_tmp = cmd_line_list;</span><br><span> cmd_line_list = cmd_line_list->next;</span><br><span style="color: hsl(0, 100%, 40%);">- free(cmd_line_list_tmp->string_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- free(cmd_line_list_tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(cmd_line_list_tmp->string_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(cmd_line_list_tmp);</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static char *gengetopt_strdup(const char *s);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static</span><br><span> void clear_given(struct gengetopt_args_info *args_info)</span><br><span> {</span><br><span>@@ -183,9 +183,9 @@</span><br><span> args_info->debug_flag = 0;</span><br><span> args_info->conf_arg = NULL;</span><br><span> args_info->conf_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->pidfile_arg = gengetopt_strdup("./sgsnemu.pid");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pidfile_arg = talloc_strdup(args_info, "./sgsnemu.pid");</span><br><span> args_info->pidfile_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->statedir_arg = gengetopt_strdup("./");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->statedir_arg = talloc_strdup(args_info, "./");</span><br><span> args_info->statedir_orig = NULL;</span><br><span> args_info->dns_arg = NULL;</span><br><span> args_info->dns_orig = NULL;</span><br><span>@@ -199,26 +199,26 @@</span><br><span> args_info->timelimit_orig = NULL;</span><br><span> args_info->gtpversion_arg = 1;</span><br><span> args_info->gtpversion_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->apn_arg = gengetopt_strdup("internet");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->apn_arg = talloc_strdup(args_info, "internet");</span><br><span> args_info->apn_orig = NULL;</span><br><span> args_info->selmode_arg = 0x01;</span><br><span> args_info->selmode_orig = NULL;</span><br><span> args_info->rattype_arg = 1;</span><br><span> args_info->rattype_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->userloc_arg = gengetopt_strdup("02509946241207");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->userloc_arg = talloc_strdup(args_info, "02509946241207");</span><br><span> args_info->userloc_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->rai_arg = gengetopt_strdup("02509946241207");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->rai_arg = talloc_strdup(args_info, "02509946241207");</span><br><span> args_info->rai_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->mstz_arg = gengetopt_strdup("0");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->mstz_arg = talloc_strdup(args_info, "0");</span><br><span> args_info->mstz_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->imeisv_arg = gengetopt_strdup("2143658709214365");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->imeisv_arg = talloc_strdup(args_info, "2143658709214365");</span><br><span> args_info->imeisv_orig = NULL;</span><br><span> args_info->norecovery_flag = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->imsi_arg = gengetopt_strdup("240010123456789");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->imsi_arg = talloc_strdup(args_info, "240010123456789");</span><br><span> args_info->imsi_orig = NULL;</span><br><span> args_info->nsapi_arg = 0;</span><br><span> args_info->nsapi_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->msisdn_arg = gengetopt_strdup("46702123456");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->msisdn_arg = talloc_strdup(args_info, "46702123456");</span><br><span> args_info->msisdn_orig = NULL;</span><br><span> args_info->qos_arg = 0x000b921f;</span><br><span> args_info->qos_orig = NULL;</span><br><span>@@ -232,9 +232,9 @@</span><br><span> args_info->qose4_orig = NULL;</span><br><span> args_info->charging_arg = 0x0800;</span><br><span> args_info->charging_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->uid_arg = gengetopt_strdup("mig");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->uid_arg = talloc_strdup(args_info, "mig");</span><br><span> args_info->uid_orig = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->pwd_arg = gengetopt_strdup("hemmelig");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pwd_arg = talloc_strdup(args_info, "hemmelig");</span><br><span> args_info->pwd_orig = NULL;</span><br><span> args_info->createif_flag = 0;</span><br><span> args_info->net_arg = NULL;</span><br><span>@@ -258,7 +258,7 @@</span><br><span> args_info->pingcount_orig = NULL;</span><br><span> args_info->pingquiet_flag = 0;</span><br><span> args_info->no_tx_gpdu_seq_flag = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- args_info->pdp_type_arg = gengetopt_strdup("v4");</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pdp_type_arg = talloc_strdup(args_info, "v4");</span><br><span> args_info->pdp_type_orig = NULL;</span><br><span> </span><br><span> }</span><br><span>@@ -371,7 +371,7 @@</span><br><span> static void free_string_field(char **s)</span><br><span> {</span><br><span> if (*s) {</span><br><span style="color: hsl(0, 100%, 40%);">- free(*s);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(*s);</span><br><span> *s = 0;</span><br><span> }</span><br><span> }</span><br><span>@@ -439,7 +439,7 @@</span><br><span> free_string_field(&(args_info->pdp_type_arg));</span><br><span> free_string_field(&(args_info->pdp_type_orig));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- clear_given(args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(args_info);</span><br><span> }</span><br><span> </span><br><span> static void</span><br><span>@@ -591,25 +591,6 @@</span><br><span> return i;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void cmdline_parser_free(struct gengetopt_args_info *args_info)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_release(args_info);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/** @brief replacement of strdup, which is not standard */</span><br><span style="color: hsl(0, 100%, 40%);">-char *gengetopt_strdup(const char *s)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- char *result = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- if (!s)</span><br><span style="color: hsl(0, 100%, 40%);">- return result;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- result = (char *)malloc(strlen(s) + 1);</span><br><span style="color: hsl(0, 100%, 40%);">- if (result == (char *)0)</span><br><span style="color: hsl(0, 100%, 40%);">- return (char *)0;</span><br><span style="color: hsl(0, 100%, 40%);">- strcpy(result, s);</span><br><span style="color: hsl(0, 100%, 40%);">- return result;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> int cmdline_parser(int argc, char **argv, struct gengetopt_args_info *args_info)</span><br><span> {</span><br><span> return cmdline_parser2(argc, argv, args_info, 0, 1, 1);</span><br><span>@@ -623,7 +604,7 @@</span><br><span> result = cmdline_parser_internal(argc, argv, args_info, params, 0);</span><br><span> </span><br><span> if (result == EXIT_FAILURE) {</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(args_info);</span><br><span> exit(EXIT_FAILURE);</span><br><span> }</span><br><span> </span><br><span>@@ -646,7 +627,7 @@</span><br><span> result = cmdline_parser_internal(argc, argv, args_info, ¶ms, 0);</span><br><span> </span><br><span> if (result == EXIT_FAILURE) {</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(args_info);</span><br><span> exit(EXIT_FAILURE);</span><br><span> }</span><br><span> </span><br><span>@@ -663,7 +644,7 @@</span><br><span> result = EXIT_FAILURE;</span><br><span> </span><br><span> if (result == EXIT_FAILURE) {</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(args_info);</span><br><span> exit(EXIT_FAILURE);</span><br><span> }</span><br><span> </span><br><span>@@ -748,6 +729,7 @@</span><br><span> </span><br><span> /**</span><br><span> * @brief updates an option</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param tall_ctx talloc ctx</span><br><span> * @param field the generic pointer to the field to update</span><br><span> * @param orig_field the pointer to the orig field</span><br><span> * @param field_given the pointer to the number of occurrence of this option</span><br><span>@@ -765,7 +747,7 @@</span><br><span> * @param additional_error possible further error specification</span><br><span> */</span><br><span> static</span><br><span style="color: hsl(0, 100%, 40%);">-int update_arg(void *field, char **orig_field,</span><br><span style="color: hsl(120, 100%, 40%);">+int update_arg(void *tall_ctx, void *field, char **orig_field,</span><br><span> unsigned int *field_given, unsigned int *prev_given,</span><br><span> char *value, const char *possible_values[],</span><br><span> const char *default_value,</span><br><span>@@ -822,8 +804,8 @@</span><br><span> if (val) {</span><br><span> string_field = (char **)field;</span><br><span> if (!no_free && *string_field)</span><br><span style="color: hsl(0, 100%, 40%);">- free(*string_field); /* free previous string */</span><br><span style="color: hsl(0, 100%, 40%);">- *string_field = gengetopt_strdup(val);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(*string_field); /* free previous string */</span><br><span style="color: hsl(120, 100%, 40%);">+ *string_field = talloc_strdup(tall_ctx, val);</span><br><span> }</span><br><span> break;</span><br><span> default:</span><br><span>@@ -854,8 +836,8 @@</span><br><span> *orig_field = value;</span><br><span> } else {</span><br><span> if (*orig_field)</span><br><span style="color: hsl(0, 100%, 40%);">- free(*orig_field); /* free previous string */</span><br><span style="color: hsl(0, 100%, 40%);">- *orig_field = gengetopt_strdup(value);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(*orig_field); /* free previous string */</span><br><span style="color: hsl(120, 100%, 40%);">+ *orig_field = talloc_strdup(tall_ctx, value);</span><br><span> }</span><br><span> }</span><br><span> };</span><br><span>@@ -896,7 +878,7 @@</span><br><span> int c; /* Character of the parsed option. */</span><br><span> </span><br><span> int error_occurred = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- struct gengetopt_args_info local_args_info;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gengetopt_args_info *local_args_info = talloc(NULL, struct gengetopt_args_info);</span><br><span> </span><br><span> int override;</span><br><span> int initialize;</span><br><span>@@ -913,7 +895,7 @@</span><br><span> if (initialize)</span><br><span> cmdline_parser_init(args_info);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_init(&local_args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ cmdline_parser_init(local_args_info);</span><br><span> </span><br><span> optarg = 0;</span><br><span> optind = 0;</span><br><span>@@ -981,20 +963,20 @@</span><br><span> switch (c) {</span><br><span> case 'h': /* Print help and exit. */</span><br><span> cmdline_parser_print_help();</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(&local_args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(local_args_info);</span><br><span> exit(EXIT_SUCCESS);</span><br><span> </span><br><span> case 'V': /* Print version and exit. */</span><br><span> cmdline_parser_print_version();</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(&local_args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(local_args_info);</span><br><span> exit(EXIT_SUCCESS);</span><br><span> </span><br><span> case 'd': /* Run in debug mode. */</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->debug_flag), 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->debug_flag), 0,</span><br><span> &(args_info->debug_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.debug_given), optarg, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->debug_given), optarg, 0, 0,</span><br><span> ARG_FLAG, check_ambiguity, override, 1, 0, "debug",</span><br><span> 'd', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1002,10 +984,10 @@</span><br><span> break;</span><br><span> case 'c': /* Read configuration file. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->conf_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->conf_arg),</span><br><span> &(args_info->conf_orig),</span><br><span> &(args_info->conf_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.conf_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->conf_given), optarg, 0,</span><br><span> 0, ARG_STRING, check_ambiguity, override,</span><br><span> 0, 0, "conf", 'c', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1013,10 +995,10 @@</span><br><span> break;</span><br><span> case 'l': /* Local host. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->listen_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->listen_arg),</span><br><span> &(args_info->listen_orig),</span><br><span> &(args_info->listen_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.listen_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->listen_given), optarg,</span><br><span> 0, 0, ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "listen", 'l',</span><br><span> additional_error))</span><br><span>@@ -1025,10 +1007,10 @@</span><br><span> break;</span><br><span> case 'r': /* Remote host. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->remote_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->remote_arg),</span><br><span> &(args_info->remote_orig),</span><br><span> &(args_info->remote_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.remote_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->remote_given), optarg,</span><br><span> 0, 0, ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "remote", 'r',</span><br><span> additional_error))</span><br><span>@@ -1037,10 +1019,10 @@</span><br><span> break;</span><br><span> case 'a': /* Access point name. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->apn_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->apn_arg),</span><br><span> &(args_info->apn_orig),</span><br><span> &(args_info->apn_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.apn_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->apn_given), optarg, 0,</span><br><span> "internet", ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "apn", 'a',</span><br><span> additional_error))</span><br><span>@@ -1049,10 +1031,10 @@</span><br><span> break;</span><br><span> case 'i': /* IMSI. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->imsi_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->imsi_arg),</span><br><span> &(args_info->imsi_orig),</span><br><span> &(args_info->imsi_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.imsi_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->imsi_given), optarg, 0,</span><br><span> "240010123456789", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0, "imsi",</span><br><span> 'i', additional_error))</span><br><span>@@ -1061,10 +1043,10 @@</span><br><span> break;</span><br><span> case 'm': /* Mobile Station ISDN number. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->msisdn_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->msisdn_arg),</span><br><span> &(args_info->msisdn_orig),</span><br><span> &(args_info->msisdn_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.msisdn_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->msisdn_given), optarg,</span><br><span> 0, "46702123456", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "msisdn", 'm', additional_error))</span><br><span>@@ -1073,10 +1055,10 @@</span><br><span> break;</span><br><span> case 'q': /* Requested quality of service. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->qos_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->qos_arg),</span><br><span> &(args_info->qos_orig),</span><br><span> &(args_info->qos_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.qos_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->qos_given), optarg, 0,</span><br><span> "0x000b921f", ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "qos", 'q',</span><br><span> additional_error))</span><br><span>@@ -1085,10 +1067,10 @@</span><br><span> break;</span><br><span> case 'u': /* Login user ID. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->uid_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->uid_arg),</span><br><span> &(args_info->uid_orig),</span><br><span> &(args_info->uid_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.uid_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->uid_given), optarg, 0,</span><br><span> "mig", ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "uid", 'u',</span><br><span> additional_error))</span><br><span>@@ -1097,10 +1079,10 @@</span><br><span> break;</span><br><span> case 'p': /* Login password. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->pwd_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->pwd_arg),</span><br><span> &(args_info->pwd_orig),</span><br><span> &(args_info->pwd_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pwd_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pwd_given), optarg, 0,</span><br><span> "hemmelig", ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "pwd", 'p',</span><br><span> additional_error))</span><br><span>@@ -1110,10 +1092,10 @@</span><br><span> case 'n': /* Network address for local interface. */</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->net_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->net_arg),</span><br><span> &(args_info->net_orig),</span><br><span> &(args_info->net_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.net_given), optarg, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->net_given), optarg, 0,</span><br><span> 0, ARG_STRING, check_ambiguity, override,</span><br><span> 0, 0, "net", 'n', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1121,10 +1103,10 @@</span><br><span> break;</span><br><span> case 't': /* PDP Type. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->pdp_type_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->pdp_type_arg),</span><br><span> &(args_info->pdp_type_orig),</span><br><span> &(args_info->pdp_type_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pdp_type_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pdp_type_given),</span><br><span> optarg, 0, "v4", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "pdp-type", 't', additional_error))</span><br><span>@@ -1138,10 +1120,10 @@</span><br><span> == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pidfile_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pidfile_arg),</span><br><span> &(args_info->pidfile_orig),</span><br><span> &(args_info->pidfile_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pidfile_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pidfile_given), optarg,</span><br><span> 0, "./sgsnemu.pid", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0, "pidfile",</span><br><span> '-', additional_error))</span><br><span>@@ -1154,10 +1136,10 @@</span><br><span> "statedir") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->statedir_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->statedir_arg),</span><br><span> &(args_info->statedir_orig),</span><br><span> &(args_info->statedir_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.statedir_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->statedir_given), optarg,</span><br><span> 0, "./", ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "statedir", '-',</span><br><span> additional_error))</span><br><span>@@ -1168,10 +1150,10 @@</span><br><span> else if (strcmp(long_options[option_index].name, "dns")</span><br><span> == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->dns_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->dns_arg),</span><br><span> &(args_info->dns_orig),</span><br><span> &(args_info->dns_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.dns_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->dns_given),</span><br><span> optarg, 0, 0, ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "dns", '-', additional_error))</span><br><span>@@ -1184,10 +1166,10 @@</span><br><span> "contexts") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->contexts_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->contexts_arg),</span><br><span> &(args_info->contexts_orig),</span><br><span> &(args_info->contexts_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.contexts_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->contexts_given), optarg,</span><br><span> 0, "1", ARG_INT, check_ambiguity, override,</span><br><span> 0, 0, "contexts", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1199,10 +1181,10 @@</span><br><span> "timelimit") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->timelimit_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->timelimit_arg),</span><br><span> &(args_info->timelimit_orig),</span><br><span> &(args_info->timelimit_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.timelimit_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->timelimit_given), optarg,</span><br><span> 0, "0", ARG_INT, check_ambiguity, override,</span><br><span> 0, 0, "timelimit", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1214,10 +1196,10 @@</span><br><span> "gtpversion") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->gtpversion_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->gtpversion_arg),</span><br><span> &(args_info->gtpversion_orig),</span><br><span> &(args_info->gtpversion_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.gtpversion_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->gtpversion_given),</span><br><span> optarg, 0, "1", ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "gtpversion", '-',</span><br><span> additional_error))</span><br><span>@@ -1230,10 +1212,10 @@</span><br><span> "selmode") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->selmode_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->selmode_arg),</span><br><span> &(args_info->selmode_orig),</span><br><span> &(args_info->selmode_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.selmode_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->selmode_given), optarg,</span><br><span> 0, "0x01", ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "selmode", '-',</span><br><span> additional_error))</span><br><span>@@ -1246,10 +1228,10 @@</span><br><span> "rattype") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->rattype_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->rattype_arg),</span><br><span> &(args_info->rattype_orig),</span><br><span> &(args_info->rattype_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.rattype_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->rattype_given), optarg,</span><br><span> 0, "1", ARG_INT, check_ambiguity, override,</span><br><span> 0, 0, "rattype", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1261,10 +1243,10 @@</span><br><span> "userloc") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->userloc_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->userloc_arg),</span><br><span> &(args_info->userloc_orig),</span><br><span> &(args_info->userloc_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.userloc_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->userloc_given), optarg,</span><br><span> 0, "02509946241207", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0, "userloc",</span><br><span> '-', additional_error))</span><br><span>@@ -1275,10 +1257,10 @@</span><br><span> else if (strcmp(long_options[option_index].name, "rai")</span><br><span> == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->rai_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->rai_arg),</span><br><span> &(args_info->rai_orig),</span><br><span> &(args_info->rai_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.rai_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->rai_given),</span><br><span> optarg, 0, "02509946241207",</span><br><span> ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "rai", '-',</span><br><span>@@ -1290,10 +1272,10 @@</span><br><span> else if (strcmp(long_options[option_index].name, "mstz")</span><br><span> == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->mstz_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->mstz_arg),</span><br><span> &(args_info->mstz_orig),</span><br><span> &(args_info->mstz_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.mstz_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->mstz_given),</span><br><span> optarg, 0, "0", ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "mstz", '-', additional_error))</span><br><span>@@ -1305,10 +1287,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "imeisv") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->imeisv_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->imeisv_arg),</span><br><span> &(args_info->imeisv_orig),</span><br><span> &(args_info->imeisv_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.imeisv_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->imeisv_given),</span><br><span> optarg, 0, "2143658709214365",</span><br><span> ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "imeisv", '-',</span><br><span>@@ -1322,9 +1304,9 @@</span><br><span> "norecovery") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->norecovery_flag), 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->norecovery_flag), 0,</span><br><span> &(args_info->norecovery_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.norecovery_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->norecovery_given),</span><br><span> optarg, 0, 0, ARG_FLAG, check_ambiguity,</span><br><span> override, 1, 0, "norecovery", '-',</span><br><span> additional_error))</span><br><span>@@ -1336,10 +1318,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "nsapi") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->nsapi_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->nsapi_arg),</span><br><span> &(args_info->nsapi_orig),</span><br><span> &(args_info->nsapi_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.nsapi_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->nsapi_given),</span><br><span> optarg, 0, "0", ARG_INT,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "nsapi", '-', additional_error))</span><br><span>@@ -1351,10 +1333,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "qose1") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->qose1_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->qose1_arg),</span><br><span> &(args_info->qose1_orig),</span><br><span> &(args_info->qose1_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.qose1_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->qose1_given),</span><br><span> optarg, 0, "0x9396404074f9ffff",</span><br><span> ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "qose1", '-',</span><br><span>@@ -1367,10 +1349,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "qose2") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->qose2_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->qose2_arg),</span><br><span> &(args_info->qose2_orig),</span><br><span> &(args_info->qose2_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.qose2_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->qose2_given),</span><br><span> optarg, 0, "0x11", ARG_INT,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "qose2", '-', additional_error))</span><br><span>@@ -1382,10 +1364,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "qose3") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->qose3_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->qose3_arg),</span><br><span> &(args_info->qose3_orig),</span><br><span> &(args_info->qose3_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.qose3_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->qose3_given),</span><br><span> optarg, 0, "0x0101", ARG_INT,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "qose3", '-', additional_error))</span><br><span>@@ -1397,10 +1379,10 @@</span><br><span> (long_options[option_index].name,</span><br><span> "qose4") == 0) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->qose4_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->qose4_arg),</span><br><span> &(args_info->qose4_orig),</span><br><span> &(args_info->qose4_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.qose4_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->qose4_given),</span><br><span> optarg, 0, "0x4040", ARG_INT,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "qose4", '-', additional_error))</span><br><span>@@ -1413,10 +1395,10 @@</span><br><span> "charging") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->charging_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->charging_arg),</span><br><span> &(args_info->charging_orig),</span><br><span> &(args_info->charging_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.charging_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->charging_given), optarg,</span><br><span> 0, "0x0800", ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "charging", '-',</span><br><span> additional_error))</span><br><span>@@ -1430,9 +1412,9 @@</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->createif_flag), 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->createif_flag), 0,</span><br><span> &(args_info->createif_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.createif_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->createif_given), optarg,</span><br><span> 0, 0, ARG_FLAG, check_ambiguity, override,</span><br><span> 1, 0, "createif", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1445,9 +1427,9 @@</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->defaultroute_flag), 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->defaultroute_flag), 0,</span><br><span> &(args_info->defaultroute_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.defaultroute_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->defaultroute_given),</span><br><span> optarg, 0, 0, ARG_FLAG, check_ambiguity,</span><br><span> override, 1, 0, "defaultroute", '-',</span><br><span> additional_error))</span><br><span>@@ -1459,10 +1441,10 @@</span><br><span> == 0) {</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->ipup_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->ipup_arg),</span><br><span> &(args_info->ipup_orig),</span><br><span> &(args_info->ipup_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.ipup_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->ipup_given),</span><br><span> optarg, 0, 0, ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "ipup", '-', additional_error))</span><br><span>@@ -1475,10 +1457,10 @@</span><br><span> "ipdown") == 0) {</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->ipdown_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->ipdown_arg),</span><br><span> &(args_info->ipdown_orig),</span><br><span> &(args_info->ipdown_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.ipdown_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->ipdown_given),</span><br><span> optarg, 0, 0, ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "ipdown", '-', additional_error))</span><br><span>@@ -1492,10 +1474,10 @@</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->tun_device_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->tun_device_arg),</span><br><span> &(args_info->tun_device_orig),</span><br><span> &(args_info->tun_device_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.tun_device_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->tun_device_given),</span><br><span> optarg, 0, 0, ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "tun-device", '-',</span><br><span> additional_error))</span><br><span>@@ -1508,10 +1490,10 @@</span><br><span> "netns") == 0) {</span><br><span> args_info->createif_mode_counter += 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (update_arg((void *)&(args_info->netns_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ if (update_arg(args_info, (void *)&(args_info->netns_arg),</span><br><span> &(args_info->netns_orig),</span><br><span> &(args_info->netns_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.netns_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->netns_given),</span><br><span> optarg, 0, 0, ARG_STRING,</span><br><span> check_ambiguity, override, 0, 0,</span><br><span> "netns", '-', additional_error))</span><br><span>@@ -1525,10 +1507,10 @@</span><br><span> args_info->pinghost_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pinghost_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pinghost_arg),</span><br><span> &(args_info->pinghost_orig),</span><br><span> &(args_info->pinghost_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pinghost_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pinghost_given), optarg,</span><br><span> 0, 0, ARG_STRING, check_ambiguity,</span><br><span> override, 0, 0, "pinghost", '-',</span><br><span> additional_error))</span><br><span>@@ -1542,10 +1524,10 @@</span><br><span> args_info->pinghost_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pingrate_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pingrate_arg),</span><br><span> &(args_info->pingrate_orig),</span><br><span> &(args_info->pingrate_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pingrate_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pingrate_given), optarg,</span><br><span> 0, "1", ARG_INT, check_ambiguity, override,</span><br><span> 0, 0, "pingrate", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1558,10 +1540,10 @@</span><br><span> args_info->pinghost_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pingsize_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pingsize_arg),</span><br><span> &(args_info->pingsize_orig),</span><br><span> &(args_info->pingsize_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pingsize_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pingsize_given), optarg,</span><br><span> 0, "56", ARG_INT, check_ambiguity,</span><br><span> override, 0, 0, "pingsize", '-',</span><br><span> additional_error))</span><br><span>@@ -1575,10 +1557,10 @@</span><br><span> args_info->pinghost_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pingcount_arg),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pingcount_arg),</span><br><span> &(args_info->pingcount_orig),</span><br><span> &(args_info->pingcount_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pingcount_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pingcount_given), optarg,</span><br><span> 0, "0", ARG_INT, check_ambiguity, override,</span><br><span> 0, 0, "pingcount", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1591,9 +1573,9 @@</span><br><span> args_info->pinghost_mode_counter += 1;</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->pingquiet_flag), 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->pingquiet_flag), 0,</span><br><span> &(args_info->pingquiet_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.pingquiet_given), optarg,</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->pingquiet_given), optarg,</span><br><span> 0, 0, ARG_FLAG, check_ambiguity, override,</span><br><span> 1, 0, "pingquiet", '-', additional_error))</span><br><span> goto failure;</span><br><span>@@ -1605,9 +1587,9 @@</span><br><span> "no-tx-gpdu-seq") == 0) {</span><br><span> </span><br><span> if (update_arg</span><br><span style="color: hsl(0, 100%, 40%);">- ((void *)&(args_info->no_tx_gpdu_seq_flag),</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info, (void *)&(args_info->no_tx_gpdu_seq_flag),</span><br><span> 0, &(args_info->no_tx_gpdu_seq_given),</span><br><span style="color: hsl(0, 100%, 40%);">- &(local_args_info.no_tx_gpdu_seq_given),</span><br><span style="color: hsl(120, 100%, 40%);">+ &(local_args_info->no_tx_gpdu_seq_given),</span><br><span> optarg, 0, 0, ARG_FLAG, check_ambiguity,</span><br><span> override, 1, 0, "no-tx-gpdu-seq", '-',</span><br><span> additional_error))</span><br><span>@@ -1660,7 +1642,7 @@</span><br><span> additional_error);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_release(&local_args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ cmdline_parser_release(local_args_info);</span><br><span> </span><br><span> if (error_occurred)</span><br><span> return (EXIT_FAILURE);</span><br><span>@@ -1669,7 +1651,7 @@</span><br><span> </span><br><span> failure:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_release(&local_args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ cmdline_parser_release(local_args_info);</span><br><span> return (EXIT_FAILURE);</span><br><span> }</span><br><span> </span><br><span>@@ -1803,10 +1785,10 @@</span><br><span> ++(*my_argc);</span><br><span> </span><br><span> cmd_line_list_tmp =</span><br><span style="color: hsl(0, 100%, 40%);">- (struct line_list *)malloc(sizeof(struct line_list));</span><br><span style="color: hsl(120, 100%, 40%);">+ (struct line_list *)talloc(NULL, struct line_list);</span><br><span> cmd_line_list_tmp->next = cmd_line_list;</span><br><span> cmd_line_list = cmd_line_list_tmp;</span><br><span style="color: hsl(0, 100%, 40%);">- cmd_line_list->string_arg = gengetopt_strdup(my_argv);</span><br><span style="color: hsl(120, 100%, 40%);">+ cmd_line_list->string_arg = talloc_strdup(cmd_line_list_tmp, my_argv);</span><br><span> } /* while */</span><br><span> </span><br><span> if (file)</span><br><span>@@ -1842,16 +1824,16 @@</span><br><span> </span><br><span> /* store the program name */</span><br><span> cmd_line_list_tmp =</span><br><span style="color: hsl(0, 100%, 40%);">- (struct line_list *)malloc(sizeof(struct line_list));</span><br><span style="color: hsl(120, 100%, 40%);">+ (struct line_list *)talloc(NULL, struct line_list);</span><br><span> cmd_line_list_tmp->next = cmd_line_list;</span><br><span> cmd_line_list = cmd_line_list_tmp;</span><br><span style="color: hsl(0, 100%, 40%);">- cmd_line_list->string_arg = gengetopt_strdup(CMDLINE_PARSER_PACKAGE);</span><br><span style="color: hsl(120, 100%, 40%);">+ cmd_line_list->string_arg = talloc_strdup(cmd_line_list, CMDLINE_PARSER_PACKAGE);</span><br><span> </span><br><span> result = _cmdline_parser_configfile(filename, &my_argc);</span><br><span> </span><br><span> if (result != EXIT_FAILURE) {</span><br><span style="color: hsl(0, 100%, 40%);">- my_argv_arg = (char **)malloc((my_argc + 1) * sizeof(char *));</span><br><span> cmd_line_list_tmp = cmd_line_list;</span><br><span style="color: hsl(120, 100%, 40%);">+ my_argv_arg = (char **)talloc_size(cmd_line_list_tmp, (my_argc + 1) * sizeof(char *));</span><br><span> </span><br><span> for (i = my_argc - 1; i >= 0; --i) {</span><br><span> my_argv_arg[i] = cmd_line_list_tmp->string_arg;</span><br><span>@@ -1861,7 +1843,7 @@</span><br><span> my_argv_arg[my_argc] = 0;</span><br><span> </span><br><span> additional_error =</span><br><span style="color: hsl(0, 100%, 40%);">- (char *)malloc(strlen(filename) + strlen(ADDITIONAL_ERROR) +</span><br><span style="color: hsl(120, 100%, 40%);">+ (char *)talloc_size(cmd_line_list_tmp, strlen(filename) + strlen(ADDITIONAL_ERROR) +</span><br><span> 1);</span><br><span> strcpy(additional_error, ADDITIONAL_ERROR);</span><br><span> strcat(additional_error, filename);</span><br><span>@@ -1869,13 +1851,13 @@</span><br><span> cmdline_parser_internal(my_argc, my_argv_arg, args_info,</span><br><span> params, additional_error);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- free(additional_error);</span><br><span style="color: hsl(0, 100%, 40%);">- free(my_argv_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(additional_error);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(my_argv_arg);</span><br><span> }</span><br><span> </span><br><span> free_cmd_list();</span><br><span> if (result == EXIT_FAILURE) {</span><br><span style="color: hsl(0, 100%, 40%);">- cmdline_parser_free(args_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(args_info);</span><br><span> exit(EXIT_FAILURE);</span><br><span> }</span><br><span> </span><br><span>diff --git a/sgsnemu/cmdline.h b/sgsnemu/cmdline.h</span><br><span>index 4dd4989..ad203fb 100644</span><br><span>--- a/sgsnemu/cmdline.h</span><br><span>+++ b/sgsnemu/cmdline.h</span><br><span>@@ -473,7 +473,7 @@</span><br><span> void cmdline_parser_print_version(void);</span><br><span> </span><br><span> /**</span><br><span style="color: hsl(0, 100%, 40%);">- * Initializes all the fields a cmdline_parser_params structure </span><br><span style="color: hsl(120, 100%, 40%);">+ * Initializes all the fields a cmdline_parser_params structure</span><br><span> * to their default values</span><br><span> * @param params the structure to initialize</span><br><span> */</span><br><span>diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c</span><br><span>index fce5059..01bdf9b 100644</span><br><span>--- a/sgsnemu/sgsnemu.c</span><br><span>+++ b/sgsnemu/sgsnemu.c</span><br><span>@@ -239,7 +239,7 @@</span><br><span> static int process_options(int argc, char **argv)</span><br><span> {</span><br><span> /* gengeopt declarations */</span><br><span style="color: hsl(0, 100%, 40%);">- struct gengetopt_args_info args_info;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gengetopt_args_info *args_info = talloc(tall_sgsnemu_ctx, struct gengetopt_args_info);</span><br><span> </span><br><span> struct hostent *host;</span><br><span> unsigned int n;</span><br><span>@@ -262,120 +262,120 @@</span><br><span> int nbquarters;</span><br><span> int DST;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (cmdline_parser(argc, argv, &args_info) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cmdline_parser(argc, argv, args_info) != 0)</span><br><span> return -1;</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.debug_flag) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.remote_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("remote: %s\n", args_info.remote_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.listen_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("listen: %s\n", args_info.listen_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.conf_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("conf: %s\n", args_info.conf_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("debug: %d\n", args_info.debug_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.imsi_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("imsi: %s\n", args_info.imsi_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qos: %#08x\n", args_info.qos_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose1: %#0.16llx\n", args_info.qose1_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose2: %#04x\n", args_info.qose2_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose3: %#06x\n", args_info.qose3_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose4: %#06x\n", args_info.qose4_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("charging: %#04x\n", args_info.charging_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.apn_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("apn: %s\n", args_info.apn_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.msisdn_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("msisdn: %s\n", args_info.msisdn_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.uid_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("uid: %s\n", args_info.uid_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pwd_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pwd: %s\n", args_info.pwd_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pidfile_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pidfile: %s\n", args_info.pidfile_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.statedir_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("statedir: %s\n", args_info.statedir_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.dns_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("dns: %s\n", args_info.dns_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("contexts: %d\n", args_info.contexts_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("timelimit: %d\n", args_info.timelimit_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("createif: %d\n", args_info.createif_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.tun_device_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("tun-device: %s\n", args_info.tun_device_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.netns_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("netns: %s\n", args_info.netns_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.ipup_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("ipup: %s\n", args_info.ipup_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.ipdown_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("ipdown: %s\n", args_info.ipdown_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("defaultroute: %d\n", args_info.defaultroute_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pinghost_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pinghost: %s\n", args_info.pinghost_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingrate: %d\n", args_info.pingrate_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingsize: %d\n", args_info.pingsize_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingcount: %d\n", args_info.pingcount_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingquiet: %d\n", args_info.pingquiet_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("norecovery: %d\n", args_info.norecovery_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("no-tx-gpdu-seq: %d\n", args_info.no_tx_gpdu_seq_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->debug_flag) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->remote_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("remote: %s\n", args_info->remote_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->listen_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("listen: %s\n", args_info->listen_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->conf_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("conf: %s\n", args_info->conf_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("debug: %d\n", args_info->debug_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->imsi_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("imsi: %s\n", args_info->imsi_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qos: %#08x\n", args_info->qos_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose1: %#0.16llx\n", args_info->qose1_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose2: %#04x\n", args_info->qose2_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose3: %#06x\n", args_info->qose3_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose4: %#06x\n", args_info->qose4_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("charging: %#04x\n", args_info->charging_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->apn_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("apn: %s\n", args_info->apn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->msisdn_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("msisdn: %s\n", args_info->msisdn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->uid_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("uid: %s\n", args_info->uid_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pwd_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pwd: %s\n", args_info->pwd_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pidfile_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pidfile: %s\n", args_info->pidfile_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->statedir_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("statedir: %s\n", args_info->statedir_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->dns_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("dns: %s\n", args_info->dns_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("contexts: %d\n", args_info->contexts_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("timelimit: %d\n", args_info->timelimit_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("createif: %d\n", args_info->createif_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->tun_device_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("tun-device: %s\n", args_info->tun_device_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->netns_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("netns: %s\n", args_info->netns_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->ipup_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("ipup: %s\n", args_info->ipup_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->ipdown_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("ipdown: %s\n", args_info->ipdown_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("defaultroute: %d\n", args_info->defaultroute_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pinghost_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pinghost: %s\n", args_info->pinghost_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingrate: %d\n", args_info->pingrate_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingsize: %d\n", args_info->pingsize_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingcount: %d\n", args_info->pingcount_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingquiet: %d\n", args_info->pingquiet_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("norecovery: %d\n", args_info->norecovery_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("no-tx-gpdu-seq: %d\n", args_info->no_tx_gpdu_seq_flag);</span><br><span> }</span><br><span> </span><br><span> /* Try out our new parser */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.conf_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->conf_arg) {</span><br><span> if (cmdline_parser_configfile</span><br><span style="color: hsl(0, 100%, 40%);">- (args_info.conf_arg, &args_info, 0, 0, 0) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info->conf_arg, args_info, 0, 0, 0) != 0)</span><br><span> return -1;</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.debug_flag) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->debug_flag) {</span><br><span> printf("cmdline_parser_configfile\n");</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.remote_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("remote: %s\n", args_info.remote_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.listen_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("listen: %s\n", args_info.listen_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.conf_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("conf: %s\n", args_info.conf_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("debug: %d\n", args_info.debug_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.imsi_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("imsi: %s\n", args_info.imsi_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qos: %#08x\n", args_info.qos_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose1: %#0.16llx\n", args_info.qose1_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose2: %#04x\n", args_info.qose2_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose3: %#06x\n", args_info.qose3_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("qose4: %#06x\n", args_info.qose4_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("charging: %#04x\n", args_info.charging_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.apn_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("apn: %s\n", args_info.apn_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.msisdn_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("msisdn: %s\n", args_info.msisdn_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.uid_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("uid: %s\n", args_info.uid_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pwd_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pwd: %s\n", args_info.pwd_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pidfile_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pidfile: %s\n", args_info.pidfile_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.statedir_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->remote_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("remote: %s\n", args_info->remote_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->listen_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("listen: %s\n", args_info->listen_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->conf_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("conf: %s\n", args_info->conf_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("debug: %d\n", args_info->debug_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->imsi_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("imsi: %s\n", args_info->imsi_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qos: %#08x\n", args_info->qos_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose1: %#0.16llx\n", args_info->qose1_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose2: %#04x\n", args_info->qose2_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose3: %#06x\n", args_info->qose3_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("qose4: %#06x\n", args_info->qose4_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("charging: %#04x\n", args_info->charging_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->apn_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("apn: %s\n", args_info->apn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->msisdn_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("msisdn: %s\n", args_info->msisdn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->uid_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("uid: %s\n", args_info->uid_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pwd_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pwd: %s\n", args_info->pwd_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pidfile_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pidfile: %s\n", args_info->pidfile_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->statedir_arg)</span><br><span> printf("statedir: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.statedir_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.dns_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("dns: %s\n", args_info.dns_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("contexts: %d\n", args_info.contexts_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("timelimit: %d\n", args_info.timelimit_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("createif: %d\n", args_info.createif_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.tun_device_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("tun-device: %s\n", args_info.tun_device_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.netns_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("netns: %s\n", args_info.netns_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.ipup_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("ipup: %s\n", args_info.ipup_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.ipdown_arg)</span><br><span style="color: hsl(0, 100%, 40%);">- printf("ipdown: %s\n", args_info.ipdown_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->statedir_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->dns_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("dns: %s\n", args_info->dns_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("contexts: %d\n", args_info->contexts_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("timelimit: %d\n", args_info->timelimit_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("createif: %d\n", args_info->createif_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->tun_device_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("tun-device: %s\n", args_info->tun_device_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->netns_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("netns: %s\n", args_info->netns_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->ipup_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("ipup: %s\n", args_info->ipup_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->ipdown_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("ipdown: %s\n", args_info->ipdown_arg);</span><br><span> printf("defaultroute: %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.defaultroute_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pinghost_arg)</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->defaultroute_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pinghost_arg)</span><br><span> printf("pinghost: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.pinghost_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingrate: %d\n", args_info.pingrate_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingsize: %d\n", args_info.pingsize_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingcount: %d\n", args_info.pingcount_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("pingquiet: %d\n", args_info.pingquiet_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("norecovery: %d\n", args_info.norecovery_flag);</span><br><span style="color: hsl(0, 100%, 40%);">- printf("no-tx-gpdu-seq: %d\n", args_info.no_tx_gpdu_seq_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pinghost_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingrate: %d\n", args_info->pingrate_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingsize: %d\n", args_info->pingsize_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingcount: %d\n", args_info->pingcount_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("pingquiet: %d\n", args_info->pingquiet_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("norecovery: %d\n", args_info->norecovery_flag);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("no-tx-gpdu-seq: %d\n", args_info->no_tx_gpdu_seq_flag);</span><br><span> }</span><br><span> }</span><br><span> </span><br><span>@@ -384,7 +384,7 @@</span><br><span> /* foreground */</span><br><span> /* If fg flag not given run as a daemon */</span><br><span> /* Do not allow sgsnemu to run as deamon</span><br><span style="color: hsl(0, 100%, 40%);">- if (!args_info.fg_flag)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!args_info->fg_flag)</span><br><span> {</span><br><span> closelog();</span><br><span> freopen("/dev/null", "w", stdout);</span><br><span>@@ -395,22 +395,22 @@</span><br><span> } */</span><br><span> </span><br><span> /* debug */</span><br><span style="color: hsl(0, 100%, 40%);">- options.debug = args_info.debug_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.debug = args_info->debug_flag;</span><br><span> </span><br><span> /* pidfile */</span><br><span> /* This has to be done after we have our final pid */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pidfile_arg) {</span><br><span style="color: hsl(0, 100%, 40%);">- log_pid(args_info.pidfile_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pidfile_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ log_pid(args_info->pidfile_arg);</span><br><span> }</span><br><span> </span><br><span> /* dns */</span><br><span> /* If no dns option is given use system default */</span><br><span> /* Do hostname lookup to translate hostname to IP address */</span><br><span> printf("\n");</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.dns_arg) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(host = gethostbyname(args_info.dns_arg))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->dns_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!(host = gethostbyname(args_info->dns_arg))) {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span style="color: hsl(0, 100%, 40%);">- "Invalid DNS address: %s!", args_info.dns_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ "Invalid DNS address: %s!", args_info->dns_arg);</span><br><span> return -1;</span><br><span> } else {</span><br><span> memcpy(&options.dns.s_addr, host->h_addr,</span><br><span>@@ -418,7 +418,7 @@</span><br><span> _res.nscount = 1;</span><br><span> _res.nsaddr_list[0].sin_addr = options.dns;</span><br><span> printf("Using DNS server: %s (%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.dns_arg, inet_ntoa(options.dns));</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->dns_arg, inet_ntoa(options.dns));</span><br><span> }</span><br><span> } else {</span><br><span> options.dns.s_addr = 0;</span><br><span>@@ -428,17 +428,17 @@</span><br><span> /* listen */</span><br><span> /* If no listen option is specified listen to any local port */</span><br><span> /* Do hostname lookup to translate hostname to IP address */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.listen_arg) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(host = gethostbyname(args_info.listen_arg))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->listen_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!(host = gethostbyname(args_info->listen_arg))) {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span> "Invalid listening address: %s!",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.listen_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->listen_arg);</span><br><span> return -1;</span><br><span> } else {</span><br><span> memcpy(&options.listen.s_addr, host->h_addr,</span><br><span> host->h_length);</span><br><span> printf("Local IP address is: %s (%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.listen_arg, inet_ntoa(options.listen));</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->listen_arg, inet_ntoa(options.listen));</span><br><span> }</span><br><span> } else {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span>@@ -449,17 +449,17 @@</span><br><span> /* remote */</span><br><span> /* If no remote option is specified terminate */</span><br><span> /* Do hostname lookup to translate hostname to IP address */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.remote_arg) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(host = gethostbyname(args_info.remote_arg))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->remote_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!(host = gethostbyname(args_info->remote_arg))) {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span> "Invalid remote address: %s!",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.remote_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->remote_arg);</span><br><span> return -1;</span><br><span> } else {</span><br><span> memcpy(&options.remote.s_addr, host->h_addr,</span><br><span> host->h_length);</span><br><span> printf("Remote IP address is: %s (%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.remote_arg, inet_ntoa(options.remote));</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->remote_arg, inet_ntoa(options.remote));</span><br><span> }</span><br><span> } else {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span>@@ -468,106 +468,106 @@</span><br><span> }</span><br><span> </span><br><span> /* imsi */</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(args_info.imsi_arg) != 15) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strlen(args_info->imsi_arg) != 15) {</span><br><span> printf("Invalid IMSI\n");</span><br><span> return -1;</span><br><span> }</span><br><span> </span><br><span> options.imsi = 0xf000000000000000ull;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[0] - 48));</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[1] - 48)) << 4;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[2] - 48)) << 8;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[3] - 48)) << 12;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[4] - 48)) << 16;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[5] - 48)) << 20;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[6] - 48)) << 24;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[7] - 48)) << 28;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[8] - 48)) << 32;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[9] - 48)) << 36;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[10] - 48)) << 40;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[11] - 48)) << 44;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[12] - 48)) << 48;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[13] - 48)) << 52;</span><br><span style="color: hsl(0, 100%, 40%);">- options.imsi |= ((uint64_t) (args_info.imsi_arg[14] - 48)) << 56;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[0] - 48));</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[1] - 48)) << 4;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[2] - 48)) << 8;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[3] - 48)) << 12;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[4] - 48)) << 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[5] - 48)) << 20;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[6] - 48)) << 24;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[7] - 48)) << 28;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[8] - 48)) << 32;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[9] - 48)) << 36;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[10] - 48)) << 40;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[11] - 48)) << 44;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[12] - 48)) << 48;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[13] - 48)) << 52;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.imsi |= ((uint64_t) (args_info->imsi_arg[14] - 48)) << 56;</span><br><span> </span><br><span> printf("IMSI is: %s (%#08llx)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.imsi_arg, options.imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->imsi_arg, options.imsi);</span><br><span> </span><br><span> /* nsapi */</span><br><span style="color: hsl(0, 100%, 40%);">- if ((args_info.nsapi_arg > 15) || (args_info.nsapi_arg < 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if ((args_info->nsapi_arg > 15) || (args_info->nsapi_arg < 0)) {</span><br><span> printf("Invalid NSAPI\n");</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- options.nsapi = args_info.nsapi_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using NSAPI: %d\n", args_info.nsapi_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ options.nsapi = args_info->nsapi_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using NSAPI: %d\n", args_info->nsapi_arg);</span><br><span> </span><br><span> /* qos */</span><br><span> options.qos.l = 4;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[3] = (args_info.qos_arg) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[2] = ((args_info.qos_arg) >> 8) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[1] = ((args_info.qos_arg) >> 16) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[0] = ((args_info.qos_arg) >> 24) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[3] = (args_info->qos_arg) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[2] = ((args_info->qos_arg) >> 8) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[1] = ((args_info->qos_arg) >> 16) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[0] = ((args_info->qos_arg) >> 24) & 0xff;</span><br><span> /* Extensions according to 3GPP TS 24.008 */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.qose1_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->qose1_given == 1) {</span><br><span> options.qos.l = 12;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[11] = (args_info.qose1_arg) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[10] = ((args_info.qose1_arg) >> 8) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[9] = ((args_info.qose1_arg) >> 16) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[8] = ((args_info.qose1_arg) >> 24) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[7] = ((args_info.qose1_arg) >> 32) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[6] = ((args_info.qose1_arg) >> 40) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[5] = ((args_info.qose1_arg) >> 48) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[4] = ((args_info.qose1_arg) >> 56) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.qose2_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[11] = (args_info->qose1_arg) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[10] = ((args_info->qose1_arg) >> 8) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[9] = ((args_info->qose1_arg) >> 16) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[8] = ((args_info->qose1_arg) >> 24) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[7] = ((args_info->qose1_arg) >> 32) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[6] = ((args_info->qose1_arg) >> 40) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[5] = ((args_info->qose1_arg) >> 48) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[4] = ((args_info->qose1_arg) >> 56) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->qose2_given == 1) {</span><br><span> options.qos.l = 13;</span><br><span style="color: hsl(0, 100%, 40%);">- options.qos.v[12] = (args_info.qose2_arg) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.qose3_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ options.qos.v[12] = (args_info->qose2_arg) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->qose3_given == 1) {</span><br><span> options.qos.l = 15;</span><br><span> options.qos.v[14] =</span><br><span style="color: hsl(0, 100%, 40%);">- (args_info.qose3_arg) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info->qose3_arg) & 0xff;</span><br><span> options.qos.v[13] =</span><br><span style="color: hsl(0, 100%, 40%);">- ((args_info.qose3_arg) >> 8) & 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.qose4_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ((args_info->qose3_arg) >> 8) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->qose4_given == 1) {</span><br><span> options.qos.l = 17;</span><br><span> options.qos.v[16] =</span><br><span style="color: hsl(0, 100%, 40%);">- (args_info.qose4_arg) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info->qose4_arg) & 0xff;</span><br><span> options.qos.v[15] =</span><br><span style="color: hsl(0, 100%, 40%);">- ((args_info.qose4_arg) >> 8) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ ((args_info->qose4_arg) >> 8) & 0xff;</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span> </span><br><span> /* charging */</span><br><span style="color: hsl(0, 100%, 40%);">- options.cch = args_info.charging_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.cch = args_info->charging_arg;</span><br><span> </span><br><span> /* contexts */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.contexts_arg > MAXCONTEXTS) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->contexts_arg > MAXCONTEXTS) {</span><br><span> printf("Contexts has to be less than %d\n", MAXCONTEXTS);</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- options.contexts = args_info.contexts_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.contexts = args_info->contexts_arg;</span><br><span> </span><br><span> /* Timelimit */</span><br><span style="color: hsl(0, 100%, 40%);">- options.timelimit = args_info.timelimit_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.timelimit = args_info->timelimit_arg;</span><br><span> </span><br><span> /* gtpversion */</span><br><span style="color: hsl(0, 100%, 40%);">- if ((args_info.gtpversion_arg > 1) || (args_info.gtpversion_arg < 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if ((args_info->gtpversion_arg > 1) || (args_info->gtpversion_arg < 0)) {</span><br><span> printf("Invalid GTP version\n");</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- options.gtpversion = args_info.gtpversion_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using GTP version: %d\n", args_info.gtpversion_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ options.gtpversion = args_info->gtpversion_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using GTP version: %d\n", args_info->gtpversion_arg);</span><br><span> </span><br><span> /* apn */</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(args_info.apn_arg) > (sizeof(options.apn.v) - 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strlen(args_info->apn_arg) > (sizeof(options.apn.v) - 1)) {</span><br><span> printf("Invalid APN\n");</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- options.apn.l = strlen(args_info.apn_arg) + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.apn.l = strlen(args_info->apn_arg) + 1;</span><br><span> </span><br><span> apn = (char *)options.apn.v;</span><br><span style="color: hsl(0, 100%, 40%);">- for (tok = strtok(args_info.apn_arg, ".");</span><br><span style="color: hsl(120, 100%, 40%);">+ for (tok = strtok(args_info->apn_arg, ".");</span><br><span> tok != NULL;</span><br><span> tok = strtok(NULL, ".")) {</span><br><span> size_t len = strlen(tok);</span><br><span>@@ -577,25 +577,25 @@</span><br><span> apn += len;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using APN: %s\n", args_info.apn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using APN: %s\n", args_info->apn_arg);</span><br><span> </span><br><span> /* selmode */</span><br><span style="color: hsl(0, 100%, 40%);">- options.selmode = args_info.selmode_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using selection mode: %d\n", args_info.selmode_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ options.selmode = args_info->selmode_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using selection mode: %d\n", args_info->selmode_arg);</span><br><span> </span><br><span> /* rattype */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.rattype_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->rattype_given == 1) {</span><br><span> options.rattype_given = 1;</span><br><span> options.rattype.l = 1;</span><br><span style="color: hsl(0, 100%, 40%);">- options.rattype.v[0] = args_info.rattype_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using RAT Type: %d\n", args_info.rattype_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ options.rattype.v[0] = args_info->rattype_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using RAT Type: %d\n", args_info->rattype_arg);</span><br><span> }</span><br><span> </span><br><span> /* userloc */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.userloc_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->userloc_given == 1) {</span><br><span> printf("Using User Location Information: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.userloc_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- tmp = args_info.userloc_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->userloc_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ tmp = args_info->userloc_arg;</span><br><span> n = 0;</span><br><span> pch = strtok(tmp, ".");</span><br><span> while (pch != NULL) {</span><br><span>@@ -687,9 +687,9 @@</span><br><span> }</span><br><span> </span><br><span> /* RAI */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.rai_given == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using RAI: %s\n", args_info.rai_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- tmp = args_info.rai_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->rai_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using RAI: %s\n", args_info->rai_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ tmp = args_info->rai_arg;</span><br><span> n = 0;</span><br><span> pch = strtok(tmp, ".");</span><br><span> while (pch != NULL) {</span><br><span>@@ -761,12 +761,12 @@</span><br><span> }</span><br><span> </span><br><span> /* mstz */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.mstz_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->mstz_given == 1) {</span><br><span> options.mstz_given = 1;</span><br><span> options.mstz.l = 2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using MS Time Zone: %s\n", args_info.mstz_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- tmp = args_info.mstz_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using MS Time Zone: %s\n", args_info->mstz_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ tmp = args_info->mstz_arg;</span><br><span> n = 0;</span><br><span> pch = strtok(tmp, ".");</span><br><span> while (pch != NULL) {</span><br><span>@@ -815,80 +815,80 @@</span><br><span> }</span><br><span> </span><br><span> /* imeisv */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.imeisv_given == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->imeisv_given == 1) {</span><br><span> options.imeisv_given = 1;</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(args_info.imeisv_arg) != 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strlen(args_info->imeisv_arg) != 16) {</span><br><span> printf("Invalid IMEI(SV)\n");</span><br><span> return -1;</span><br><span> }</span><br><span> options.imeisv.l = 8;</span><br><span> for (n = 0; n < 8; n++) {</span><br><span style="color: hsl(0, 100%, 40%);">- a = (uint8_t) (args_info.imeisv_arg[2 * n] - 48);</span><br><span style="color: hsl(0, 100%, 40%);">- b = (uint8_t) (args_info.imeisv_arg[2 * n + 1] - 48);</span><br><span style="color: hsl(120, 100%, 40%);">+ a = (uint8_t) (args_info->imeisv_arg[2 * n] - 48);</span><br><span style="color: hsl(120, 100%, 40%);">+ b = (uint8_t) (args_info->imeisv_arg[2 * n + 1] - 48);</span><br><span> options.imeisv.v[n] = 16 * b + a;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using IMEI(SV): %s\n", args_info.imeisv_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using IMEI(SV): %s\n", args_info->imeisv_arg);</span><br><span> }</span><br><span> </span><br><span> /* msisdn */</span><br><span style="color: hsl(0, 100%, 40%);">- if (strlen(args_info.msisdn_arg) > (sizeof(options.msisdn.v) - 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (strlen(args_info->msisdn_arg) > (sizeof(options.msisdn.v) - 1)) {</span><br><span> printf("Invalid MSISDN\n");</span><br><span> return -1;</span><br><span> }</span><br><span> options.msisdn.l = 1;</span><br><span> options.msisdn.v[0] = 0x91; /* International format */</span><br><span style="color: hsl(0, 100%, 40%);">- for (n = 0; n < strlen(args_info.msisdn_arg); n++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ for (n = 0; n < strlen(args_info->msisdn_arg); n++) {</span><br><span> if ((n % 2) == 0) {</span><br><span> options.msisdn.v[((int)n / 2) + 1] =</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.msisdn_arg[n] - 48 + 0xf0;</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->msisdn_arg[n] - 48 + 0xf0;</span><br><span> options.msisdn.l += 1;</span><br><span> } else {</span><br><span> options.msisdn.v[((int)n / 2) + 1] =</span><br><span> (options.msisdn.v[((int)n / 2) + 1] & 0x0f) +</span><br><span style="color: hsl(0, 100%, 40%);">- (args_info.msisdn_arg[n] - 48) * 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ (args_info->msisdn_arg[n] - 48) * 16;</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- printf("Using MSISDN: %s\n", args_info.msisdn_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Using MSISDN: %s\n", args_info->msisdn_arg);</span><br><span> </span><br><span> /* UID and PWD */</span><br><span> /* Might need to also insert stuff like DNS etc. */</span><br><span style="color: hsl(0, 100%, 40%);">- if ((strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 10) ></span><br><span style="color: hsl(120, 100%, 40%);">+ if ((strlen(args_info->uid_arg) + strlen(args_info->pwd_arg) + 10) ></span><br><span> (sizeof(options.pco.v) - 1)) {</span><br><span> printf("invalid UID and PWD\n");</span><br><span> return -1;</span><br><span> }</span><br><span> options.pco.l =</span><br><span style="color: hsl(0, 100%, 40%);">- strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 10;</span><br><span style="color: hsl(120, 100%, 40%);">+ strlen(args_info->uid_arg) + strlen(args_info->pwd_arg) + 10;</span><br><span> options.pco.v[0] = 0x80; /* PPP */</span><br><span> options.pco.v[1] = 0xc0; /* PAP */</span><br><span> options.pco.v[2] = 0x23;</span><br><span> options.pco.v[3] =</span><br><span style="color: hsl(0, 100%, 40%);">- strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 6;</span><br><span style="color: hsl(120, 100%, 40%);">+ strlen(args_info->uid_arg) + strlen(args_info->pwd_arg) + 6;</span><br><span> options.pco.v[4] = 0x01; /* Authenticate request */</span><br><span> options.pco.v[5] = 0x01;</span><br><span> options.pco.v[6] = 0x00; /* MSB of length */</span><br><span> options.pco.v[7] =</span><br><span style="color: hsl(0, 100%, 40%);">- strlen(args_info.uid_arg) + strlen(args_info.pwd_arg) + 6;</span><br><span style="color: hsl(0, 100%, 40%);">- options.pco.v[8] = strlen(args_info.uid_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&options.pco.v[9], args_info.uid_arg, strlen(args_info.uid_arg));</span><br><span style="color: hsl(0, 100%, 40%);">- options.pco.v[9 + strlen(args_info.uid_arg)] =</span><br><span style="color: hsl(0, 100%, 40%);">- strlen(args_info.pwd_arg);</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&options.pco.v[10 + strlen(args_info.uid_arg)],</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.pwd_arg, strlen(args_info.pwd_arg));</span><br><span style="color: hsl(120, 100%, 40%);">+ strlen(args_info->uid_arg) + strlen(args_info->pwd_arg) + 6;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pco.v[8] = strlen(args_info->uid_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(&options.pco.v[9], args_info->uid_arg, strlen(args_info->uid_arg));</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pco.v[9 + strlen(args_info->uid_arg)] =</span><br><span style="color: hsl(120, 100%, 40%);">+ strlen(args_info->pwd_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ memcpy(&options.pco.v[10 + strlen(args_info->uid_arg)],</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pwd_arg, strlen(args_info->pwd_arg));</span><br><span> </span><br><span> /* createif */</span><br><span style="color: hsl(0, 100%, 40%);">- options.createif = args_info.createif_flag;</span><br><span style="color: hsl(0, 100%, 40%);">- options.tun_dev_name = args_info.tun_device_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- options.netns = args_info.netns_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.createif = args_info->createif_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.tun_dev_name = args_info->tun_device_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.netns = args_info->netns_arg;</span><br><span> </span><br><span> /* net */</span><br><span> /* Store net as in_addr net and mask */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.net_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->net_arg) {</span><br><span> if (ippool_aton</span><br><span style="color: hsl(0, 100%, 40%);">- (&options.net, &options.prefixlen, args_info.net_arg, 0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ (&options.net, &options.prefixlen, args_info->net_arg, 0)) {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span> "Invalid network address: %s!",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.net_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->net_arg);</span><br><span> exit(1);</span><br><span> }</span><br><span> options.netaddr = options.net;</span><br><span>@@ -902,56 +902,56 @@</span><br><span> }</span><br><span> </span><br><span> /* ipup */</span><br><span style="color: hsl(0, 100%, 40%);">- options.ipup = args_info.ipup_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.ipup = args_info->ipup_arg;</span><br><span> </span><br><span> /* ipdown */</span><br><span style="color: hsl(0, 100%, 40%);">- options.ipdown = args_info.ipdown_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.ipdown = args_info->ipdown_arg;</span><br><span> </span><br><span> /* statedir */</span><br><span style="color: hsl(0, 100%, 40%);">- options.statedir = args_info.statedir_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.statedir = args_info->statedir_arg;</span><br><span> </span><br><span> /* defaultroute */</span><br><span style="color: hsl(0, 100%, 40%);">- options.defaultroute = args_info.defaultroute_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.defaultroute = args_info->defaultroute_flag;</span><br><span> </span><br><span> /* pinghost */</span><br><span> /* Store ping host as in_addr */</span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.pinghost_arg) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(host = gethostbyname(args_info.pinghost_arg))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->pinghost_arg) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!(host = gethostbyname(args_info->pinghost_arg))) {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0,</span><br><span> "Invalid ping host: %s!",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.pinghost_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pinghost_arg);</span><br><span> return -1;</span><br><span> } else {</span><br><span> memcpy(&options.pinghost.s_addr, host->h_addr,</span><br><span> host->h_length);</span><br><span> printf("Using ping host: %s (%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.pinghost_arg,</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pinghost_arg,</span><br><span> inet_ntoa(options.pinghost));</span><br><span> }</span><br><span> }</span><br><span> </span><br><span> /* Other ping parameters */</span><br><span style="color: hsl(0, 100%, 40%);">- options.pingrate = args_info.pingrate_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- options.pingsize = args_info.pingsize_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- options.pingcount = args_info.pingcount_arg;</span><br><span style="color: hsl(0, 100%, 40%);">- options.pingquiet = args_info.pingquiet_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pingrate = args_info->pingrate_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pingsize = args_info->pingsize_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pingcount = args_info->pingcount_arg;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.pingquiet = args_info->pingquiet_flag;</span><br><span> </span><br><span> /* norecovery */</span><br><span style="color: hsl(0, 100%, 40%);">- options.norecovery_given = args_info.norecovery_flag;</span><br><span style="color: hsl(120, 100%, 40%);">+ options.norecovery_given = args_info->norecovery_flag;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (args_info.no_tx_gpdu_seq_flag)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (args_info->no_tx_gpdu_seq_flag)</span><br><span> options.tx_gpdu_seq = 0;</span><br><span> else</span><br><span> options.tx_gpdu_seq = 1;</span><br><span> </span><br><span> /* PDP Type */</span><br><span style="color: hsl(0, 100%, 40%);">- if (!strcmp(args_info.pdp_type_arg, "v6"))</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!strcmp(args_info->pdp_type_arg, "v6"))</span><br><span> options.pdp_type = PDP_EUA_TYPE_v6;</span><br><span style="color: hsl(0, 100%, 40%);">- else if (!strcmp(args_info.pdp_type_arg, "v4"))</span><br><span style="color: hsl(120, 100%, 40%);">+ else if (!strcmp(args_info->pdp_type_arg, "v4"))</span><br><span> options.pdp_type = PDP_EUA_TYPE_v4;</span><br><span> else {</span><br><span> SYS_ERR(DSGSN, LOGL_ERROR, 0, "Unsupported/unknown PDP Type '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">- args_info.pdp_type_arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ args_info->pdp_type_arg);</span><br><span> return -1;</span><br><span> }</span><br><span> </span><br><span>@@ -1607,6 +1607,9 @@</span><br><span> signal(SIGHUP, signal_handler);</span><br><span> signal(SIGINT, signal_handler);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Track the use of talloc NULL memory contexts */</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_enable_null_tracking();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> tall_sgsnemu_ctx = talloc_named_const(NULL, 0, "sgsnemu");</span><br><span> msgb_talloc_ctx_init(tall_sgsnemu_ctx, 0);</span><br><span> osmo_init_logging2(tall_sgsnemu_ctx, &log_info);</span><br><span>@@ -1936,6 +1939,11 @@</span><br><span> if (options.createif)</span><br><span> tun_free(tun);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(tall_sgsnemu_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+ fprintf(stderr, "=== talloc report (NULL):\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_report_full(NULL, stderr);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_disable_null_tracking();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if (0 == state)</span><br><span> exit(1); /* Indicate error */</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17758">change 17758</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17758"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ggsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie0d48a12a8349be5a859a03191421cbd9cc324cc </div>
<div style="display:none"> Gerrit-Change-Number: 17758 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>