pdp: Introduce new API pdp_count_secondary

Change-Id: Id2d84ad1cdb0f3b500efeda4cc0fbccb24ae0c61
This commit is contained in:
Pau Espin 2019-05-30 14:11:22 +02:00
parent de72d26f49
commit 9ee8d3264b
3 changed files with 20 additions and 10 deletions

View File

@ -2454,8 +2454,7 @@ int gtp_delete_context_req2(struct gsn_t *gsn, struct pdp_t *pdp, void *cbp,
get_default_gtp(pdp->version, GTP_DELETE_PDP_REQ, &packet);
struct in_addr addr;
struct pdp_t *linked_pdp;
int n;
int count = 0;
int count;
if (gsna2in_addr(&addr, &pdp->gsnrc)) {
gsn->err_address++;
@ -2470,9 +2469,7 @@ int gtp_delete_context_req2(struct gsn_t *gsn, struct pdp_t *pdp, void *cbp,
}
if (!teardown) {
for (n = 0; n < PDP_MAXNSAPI; n++)
if (linked_pdp->secondary_tei[n])
count++;
count = pdp_count_secondary(linked_pdp);
if (count <= 1) {
LOGP(DLGTP, LOGL_ERROR,
"Must use teardown for last context: %d\n", count);
@ -2562,8 +2559,7 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
uint8_t nsapi;
uint8_t teardown = 0;
int n;
int count = 0;
int count;
/* Is this a duplicate ? */
if (!gtp_duplicate(gsn, version, peer, seq)) {
@ -2633,9 +2629,7 @@ int gtp_delete_pdp_ind(struct gsn_t *gsn, int version,
* signalling messages will eventually lead to a consistent
* situation, allowing the teardown of the PDP context.)
*/
for (n = 0; n < PDP_MAXNSAPI; n++)
if (linked_pdp->secondary_tei[n])
count++;
count = pdp_count_secondary(linked_pdp);
if (count <= 1) {
GTP_LOGPKG(LOGL_NOTICE, peer, pack, len,
"Ignoring CTX DEL without teardown and count=%d\n",

View File

@ -374,3 +374,17 @@ void pdp_set_imsi_nsapi(struct pdp_t *pdp, uint64_t teid)
pdp->imsi = teid & 0x0fffffffffffffffull;
pdp->nsapi = (teid & 0xf000000000000000ull) >> 60;
}
/* Count amount of secondary PDP contexts linked to this primary PDP context
* (itself included). Must be called on a primary PDP context. */
unsigned int pdp_count_secondary(struct pdp_t *pdp)
{
unsigned int n;
unsigned int count = 0;
OSMO_ASSERT(!pdp->secondary);
for (n = 0; n < PDP_MAXNSAPI; n++)
if (pdp->secondary_tei[n])
count++;
return count;
}

View File

@ -260,6 +260,8 @@ int pdp_tidget(struct pdp_t **pdp, uint64_t tid);
void pdp_set_imsi_nsapi(struct pdp_t *pdp, uint64_t teid);
unsigned int pdp_count_secondary(struct pdp_t *pdp);
/*
int pdp_iphash(void* ipif, struct ul66_t *eua);
int pdp_ipset(struct pdp_t *pdp, void* ipif, struct ul66_t *eua);