gtp: Make use of new libgtp APIs with multi-gsn support

Drop use of deprecated APIs everywhere in libgtp and use the new ones instead.

Related: OS#2873
Change-Id: Ibf56a063f01d1f95a2a3271416da6e062e85fdfa
This commit is contained in:
Pau Espin 2019-05-31 16:29:32 +02:00
parent eefa30dce8
commit 9fbcb10568
1 changed files with 22 additions and 23 deletions

View File

@ -156,9 +156,8 @@ int gtp_freepdp_teardown(struct gsn_t *gsn, struct pdp_t *pdp)
for (n = 0; n < PDP_MAXNSAPI; n++) { for (n = 0; n < PDP_MAXNSAPI; n++) {
if (pdp->secondary_tei[n]) { if (pdp->secondary_tei[n]) {
if (pdp_getgtp1 if (gtp_pdp_getgtp1(gsn, &secondary_pdp,
(&secondary_pdp, pdp->secondary_tei[n])) {
pdp->secondary_tei[n])) {
LOGP(DLGTP, LOGL_ERROR, LOGP(DLGTP, LOGL_ERROR,
"Unknown secondary PDP context\n"); "Unknown secondary PDP context\n");
continue; continue;
@ -1150,7 +1149,7 @@ int gtp_create_context_req(struct gsn_t *gsn, struct pdp_t *pdp,
Protocol Configuration Options */ Protocol Configuration Options */
if (pdp->secondary) { if (pdp->secondary) {
if (pdp_getgtp1(&linked_pdp, pdp->teic_own)) { if (gtp_pdp_getgtp1(gsn, &linked_pdp, pdp->teic_own)) {
LOGP(DLGTP, LOGL_ERROR, LOGP(DLGTP, LOGL_ERROR,
"Unknown linked PDP context: %u\n", pdp->teic_own); "Unknown linked PDP context: %u\n", pdp->teic_own);
return EOF; return EOF;
@ -1430,7 +1429,7 @@ int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
if (!gtpie_gettv1(ie, GTPIE_NSAPI, 1, &linked_nsapi)) { if (!gtpie_gettv1(ie, GTPIE_NSAPI, 1, &linked_nsapi)) {
/* Find the primary PDP context */ /* Find the primary PDP context */
if (pdp_getgtp1(&linked_pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &linked_pdp, get_tei(pack))) {
gsn->incorrect++; gsn->incorrect++;
GTP_LOGPKG(LOGL_ERROR, peer, GTP_LOGPKG(LOGL_ERROR, peer,
pack, len, pack, len,
@ -1613,9 +1612,9 @@ int gtp_create_pdp_ind(struct gsn_t *gsn, int version,
in_addr2gsna(&pdp->gsnlc, &gsn->gsnc); in_addr2gsna(&pdp->gsnlc, &gsn->gsnc);
in_addr2gsna(&pdp->gsnlu, &gsn->gsnu); in_addr2gsna(&pdp->gsnlu, &gsn->gsnu);
DEBUGP(DLGTP, "gtp_create_pdp_ind: Before pdp_tidget\n"); DEBUGP(DLGTP, "gtp_create_pdp_ind: Before gtp_pdp_tidget\n");
if (!pdp_getimsi(&pdp_old, pdp->imsi, pdp->nsapi)) { if (!gtp_pdp_getimsi(gsn, &pdp_old, pdp->imsi, pdp->nsapi)) {
/* Found old pdp with same tid. Now the voodoo begins! */ /* Found old pdp with same tid. Now the voodoo begins! */
/* 09.60 / 29.060 allows create on existing context to "steal" */ /* 09.60 / 29.060 allows create on existing context to "steal" */
/* the context which was allready established */ /* the context which was allready established */
@ -1709,7 +1708,7 @@ int gtp_create_pdp_conf(struct gsn_t *gsn, int version,
return EOF; return EOF;
/* Find the context in question */ /* Find the context in question */
if (pdp_getgtp1(&pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &pdp, get_tei(pack))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, len, GTP_LOGPKG(LOGL_ERROR, peer, pack, len,
"Unknown PDP context: %u\n", get_tei(pack)); "Unknown PDP context: %u\n", get_tei(pack));
@ -2091,7 +2090,7 @@ static int gtp_update_pdp_ind(struct gsn_t *gsn, uint8_t version,
pdp_set_imsi_nsapi(pdp, tid); pdp_set_imsi_nsapi(pdp, tid);
/* Find the context in question */ /* Find the context in question */
if (pdp_getimsi(&pdp, imsi, nsapi)) { if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi)) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, GTP_LOGPKG(LOGL_ERROR, peer, pack,
len, "Unknown PDP context\n"); len, "Unknown PDP context\n");
@ -2113,7 +2112,7 @@ static int gtp_update_pdp_ind(struct gsn_t *gsn, uint8_t version,
/* IMSI (conditional) */ /* IMSI (conditional) */
if (gtpie_gettv0(ie, GTPIE_IMSI, 0, &imsi, sizeof(imsi))) { if (gtpie_gettv0(ie, GTPIE_IMSI, 0, &imsi, sizeof(imsi))) {
/* Find the context in question */ /* Find the context in question */
if (pdp_getgtp1(&pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &pdp, get_tei(pack))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, GTP_LOGPKG(LOGL_ERROR, peer,
pack, len, "Unknown PDP context: %u\n", pack, len, "Unknown PDP context: %u\n",
@ -2124,7 +2123,7 @@ static int gtp_update_pdp_ind(struct gsn_t *gsn, uint8_t version,
} }
} else { } else {
/* Find the context in question */ /* Find the context in question */
if (pdp_getimsi(&pdp, imsi, nsapi)) { if (gtp_pdp_getimsi(gsn, &pdp, imsi, nsapi)) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, GTP_LOGPKG(LOGL_ERROR, peer,
pack, len, "Unknown PDP context\n"); pack, len, "Unknown PDP context\n");
@ -2290,7 +2289,7 @@ static int gtp_update_pdp_conf(struct gsn_t *gsn, uint8_t version,
return EOF; return EOF;
/* Find the context in question */ /* Find the context in question */
if (pdp_getgtp1(&pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &pdp, get_tei(pack))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, len, GTP_LOGPKG(LOGL_ERROR, peer, pack, len,
"Unknown PDP context: %u\n", get_tei(pack)); "Unknown PDP context: %u\n", get_tei(pack));
@ -2391,7 +2390,7 @@ int gtp_delete_context_req(struct gsn_t *gsn, struct pdp_t *pdp, void *cbp,
{ {
struct pdp_t *linked_pdp; struct pdp_t *linked_pdp;
if (pdp_getgtp1(&linked_pdp, pdp->teic_own)) { if (gtp_pdp_getgtp1(gsn, &linked_pdp, pdp->teic_own)) {
LOGP(DLGTP, LOGL_ERROR, LOGP(DLGTP, LOGL_ERROR,
"Unknown linked PDP context: %u\n", pdp->teic_own); "Unknown linked PDP context: %u\n", pdp->teic_own);
return EOF; return EOF;
@ -2447,7 +2446,7 @@ int gtp_delete_context_req2(struct gsn_t *gsn, struct pdp_t *pdp, void *cbp,
return EOF; return EOF;
} }
if (pdp_getgtp1(&linked_pdp, pdp->teic_own)) { if (gtp_pdp_getgtp1(gsn, &linked_pdp, pdp->teic_own)) {
LOGP(DLGTP, LOGL_ERROR, LOGP(DLGTP, LOGL_ERROR,
"Unknown linked PDP context: %u\n", pdp->teic_own); "Unknown linked PDP context: %u\n", pdp->teic_own);
return EOF; return EOF;
@ -2543,7 +2542,7 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
} }
/* Find the linked context in question */ /* Find the linked context in question */
if (pdp_getgtp1(&linked_pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &linked_pdp, get_tei(pack))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, len, GTP_LOGPKG(LOGL_ERROR, peer, pack, len,
"Unknown PDP context: %u\n", get_tei(pack)); "Unknown PDP context: %u\n", get_tei(pack));
@ -2583,7 +2582,7 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
} }
/* Find the context in question */ /* Find the context in question */
if (pdp_getgtp1(&pdp, linked_pdp->secondary_tei[nsapi & 0x0f])) { if (gtp_pdp_getgtp1(gsn, &pdp, linked_pdp->secondary_tei[nsapi & 0x0f])) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, GTP_LOGPKG(LOGL_ERROR, peer, pack,
len, "Unknown PDP context\n"); len, "Unknown PDP context\n");
@ -2636,7 +2635,7 @@ int gtp_delete_pdp_conf(struct gsn_t *gsn, int version,
/* Find the context in question. It may not be available if gtp_delete_context_req /* Find the context in question. It may not be available if gtp_delete_context_req
* was used and as a result the PDP ctx was already freed */ * was used and as a result the PDP ctx was already freed */
if (pdp_getgtp1(&pdp, get_tei(pack))) { if (gtp_pdp_getgtp1(gsn, &pdp, get_tei(pack))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_NOTICE, peer, pack, len, GTP_LOGPKG(LOGL_NOTICE, peer, pack, len,
"Unknown PDP context: %u (expected if gtp_delete_context_req is used or pdp ctx was freed manually before response)\n", "Unknown PDP context: %u (expected if gtp_delete_context_req is used or pdp ctx was freed manually before response)\n",
@ -2714,7 +2713,7 @@ static int gtp_error_ind_conf(struct gsn_t *gsn, uint8_t version,
/* Find the context in question */ /* Find the context in question */
if (version == 0) { if (version == 0) {
if (pdp_tidget(&pdp, be64toh(((union gtp_packet *)pack)->gtp0.h.tid))) { if (gtp_pdp_tidget(gsn, &pdp, be64toh(((union gtp_packet *)pack)->gtp0.h.tid))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, len, GTP_LOGPKG(LOGL_ERROR, peer, pack, len,
"Unknown PDP context\n"); "Unknown PDP context\n");
@ -2740,7 +2739,7 @@ static int gtp_error_ind_conf(struct gsn_t *gsn, uint8_t version,
return EOF; return EOF;
} }
if (pdp_getgtp1_peer_d(&pdp, peer, teid_gn)) { if (gtp_pdp_getgtp1_peer_d(gsn, &pdp, peer, teid_gn)) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, len, "Unknown PDP context\n"); GTP_LOGPKG(LOGL_ERROR, peer, pack, len, "Unknown PDP context\n");
return EOF; return EOF;
@ -2770,8 +2769,8 @@ static int gtp_gpdu_ind(struct gsn_t *gsn, uint8_t version,
switch (version) { switch (version) {
case 0: case 0:
if (pdp_getgtp0 if (gtp_pdp_getgtp0(gsn, &pdp,
(&pdp, ntoh16(((union gtp_packet *)pack)->gtp0.h.flow))) { ntoh16(((union gtp_packet *)pack)->gtp0.h.flow))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, GTP_LOGPKG(LOGL_ERROR, peer, pack,
len, "Unknown PDP context, GTPv0\n"); len, "Unknown PDP context, GTPv0\n");
@ -2781,8 +2780,8 @@ static int gtp_gpdu_ind(struct gsn_t *gsn, uint8_t version,
hlen = GTP0_HEADER_SIZE; hlen = GTP0_HEADER_SIZE;
break; break;
case 1: case 1:
if (pdp_getgtp1 if (gtp_pdp_getgtp1(gsn, &pdp,
(&pdp, ntoh32(((union gtp_packet *)pack)->gtp1l.h.tei))) { ntoh32(((union gtp_packet *)pack)->gtp1l.h.tei))) {
gsn->err_unknownpdp++; gsn->err_unknownpdp++;
GTP_LOGPKG(LOGL_ERROR, peer, pack, GTP_LOGPKG(LOGL_ERROR, peer, pack,
len, "Unknown PDP context, GTPv1\n"); len, "Unknown PDP context, GTPv1\n");