From 25ebd9678114b0e1024d67e4934b4ab7b98f531f Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 12 Aug 2017 14:55:09 +0200 Subject: libgtp: Add back-reference to gsn from pdp context This is required once one wants to support multiple GSNs in a single application. WARNING: This breaks ABI compatibility, LIBVERSION must be adjusted Change-Id: I68ae49a765828fa681054c68bf7f5e74dbe48ad2 --- gtp/gtp.c | 8 +++++++- gtp/pdp.h | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gtp/gtp.c b/gtp/gtp.c index a4e8e2b..3bc6521 100644 --- a/gtp/gtp.c +++ b/gtp/gtp.c @@ -90,7 +90,11 @@ const char *gtp_version() int gtp_newpdp(struct gsn_t *gsn, struct pdp_t **pdp, uint64_t imsi, uint8_t nsapi) { - return pdp_newpdp(pdp, imsi, nsapi, NULL); + int rc; + rc = pdp_newpdp(pdp, imsi, nsapi, NULL); + if (!rc && *pdp) + (*pdp)->gsn = gsn; + return rc; } int gtp_freepdp(struct gsn_t *gsn, struct pdp_t *pdp) @@ -1571,6 +1575,8 @@ int gtp_create_pdp_ind(struct gsn_t *gsn, int version, } pdp_newpdp(&pdp, pdp->imsi, pdp->nsapi, pdp); + if (pdp) + pdp->gsn = gsn; /* Callback function to validata login */ if (gsn->cb_create_context_ind != 0) diff --git a/gtp/pdp.h b/gtp/pdp.h index 217b1d6..7191ffd 100644 --- a/gtp/pdp.h +++ b/gtp/pdp.h @@ -12,6 +12,8 @@ #ifndef _PDP_H #define _PDP_H +struct gsn_t; + #define PDP_MAX 1024 /* Max number of PDP contexts */ #define PDP_MAXNSAPI 16 /* Max number of NSAPI */ @@ -221,6 +223,8 @@ struct pdp_t { /* to be used by libgtp callers/users (to attach their own private state) */ void *priv; + + struct gsn_t *gsn; }; /* functions related to pdp_t management */ -- cgit v1.2.3