9
0
Fork 0

convert literal APN name to protocol encoded version before use

The definition of the APN field format in GTPv1 is hidden in a chain
of documents.

3GPP TS 29.060 (the GTPv1-C specification) Section 7.7.30:

> The Access Point Name contains a logical name (see 3GPP TS 23.060 [4]).
> It is coded as in the value part defined in 3GPP TS 24.008

3GPP TS 24.008 Section 10.5.6.1:

> The value part is defined in 3GPP TS 23.003.

3GPP TS 23.003 Section 9.1:

> The APN consists of one or more labels. Each label is coded as a one
> octet length field followed by that number of octets coded as 8 bit
> ASCII characters

This converts a literal APN (e.g. Label1.Label2.Label3) to a structured
field (e.g. \006Label1\006Label2\006Label3)

Signed-off-by: Andreas Schultz <aschultz@tpip.net>
This commit is contained in:
Andreas Schultz 2015-11-13 15:57:37 +01:00 committed by Harald Welte
parent a377b0874a
commit 10abfba949
1 changed files with 14 additions and 4 deletions

View File

@ -231,6 +231,7 @@ int process_options(int argc, char **argv)
char *type;
char *mcc;
char *mnc;
char *tok, *apn;
char *lac;
int lac_d;
char *rest;
@ -534,10 +535,19 @@ int process_options(int argc, char **argv)
printf("Invalid APN\n");
return -1;
}
options.apn.l = strlen(args_info.apn_arg);
strncpy((char *)options.apn.v, args_info.apn_arg,
sizeof(options.apn.v));
options.apn.v[sizeof(options.apn.v) - 1] = 0;
options.apn.l = strlen(args_info.apn_arg) + 1;
apn = (char *)options.apn.v;
for (tok = strtok(args_info.apn_arg, ".");
tok != NULL;
tok = strtok(NULL, ".")) {
size_t len = strlen(tok);
*apn++ = (char)len;
strncpy(apn, tok, len);
apn += len;
}
printf("Using APN: %s\n", args_info.apn_arg);
/* selmode */