aboutsummaryrefslogtreecommitdiffstats
path: root/ggsn
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-10-14 13:38:05 +0200
committerHarald Welte <laforge@gnumonks.org>2016-11-02 09:32:31 +0000
commitdbd7024919ca9aff470e295dcffb1769bf725ac2 (patch)
tree5e9d019d2f5392b13c205f77217f22051749b102 /ggsn
parentf41f5866cebbf88b6ae09ec8bd00c308f4d9f315 (diff)
Only send TRAP for defined PDP peer
Do not attempt to send TRAP message on PDP context deletion if peer is unknown. Change-Id: I5e02c1d42bb7aaf1ef81a9824aab7b12047cdd3e Fixes: Coverity CID 150135
Diffstat (limited to 'ggsn')
-rw-r--r--ggsn/ggsn.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 9609d52..181ba2d 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -138,10 +138,15 @@ int delete_context(struct pdp_t *pdp)
DEBUGP(DGGSN, "Deleting PDP context\n");
struct ippoolm_t *member = pdp->peer;
char v[NAMESIZE];
- snprintf(v, sizeof(v), "%" PRIu64 ",%s", pdp->imsi, inet_ntoa(member->addr));
- if (pdp->peer)
+
+ if (pdp->peer) {
+ snprintf(v, sizeof(v), "%" PRIu64 ",%s", pdp->imsi,
+ inet_ntoa(member->addr));
+ if (ctrl_cmd_send_trap(gsn->ctrl, "imsi-rem-ip", v) < 0)
+ LOGP(DGGSN, LOGL_ERROR, "Failed to create and send TRAP"
+ " for IMSI %" PRIu64 " PDP deletion.\n", pdp->imsi);
ippool_freeip(ippool, (struct ippoolm_t *)pdp->peer);
- else
+ } else
SYS_ERR(DGGSN, LOGL_ERROR, 0, "Peer not defined!");
if (gtp_kernel_tunnel_del(pdp)) {
@@ -149,9 +154,6 @@ int delete_context(struct pdp_t *pdp)
"Cannot delete tunnel from kernel: %s\n",
strerror(errno));
}
-/* FIXME: naming? */
- if (ctrl_cmd_send_trap(gsn->ctrl, "imsi-rem-ip", v) < 0)
- LOGP(DGGSN, LOGL_ERROR, "Trap creation failed.\n");
return 0;
}