pdp: Introduce new API pdp_count_secondary
Change-Id: Id2d84ad1cdb0f3b500efeda4cc0fbccb24ae0c61
This commit is contained in:
parent
de72d26f49
commit
9ee8d3264b
14
gtp/gtp.c
14
gtp/gtp.c
|
@ -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",
|
||||
|
|
14
gtp/pdp.c
14
gtp/pdp.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue