aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-05-04 17:45:10 +0200
committerMax <msuraev@sysmocom.de>2017-05-16 17:10:25 +0200
commit3142d8d30ba0056f405d1d9aed83d7b62e9464d4 (patch)
tree8562dc641b472a04cb538813573a218b32154882
parenta2861a7428ef62dbef02a502a6bfd6c6e9623263 (diff)
ctrl: cleanup trap creation
Move common trap create/send code into separate function. Change-Id: Iaadc921b951aeb9b3ad5ab796e13d52017139468
-rw-r--r--ggsn/ggsn.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 181ba2d..4d07f11 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -133,18 +133,26 @@ int daemon(int nochdir, int noclose)
}
#endif
+static bool send_trap(const struct gsn_t *gsn, const struct pdp_t *pdp, const struct ippoolm_t *member, const char *var)
+{
+ char val[NAMESIZE];
+
+ snprintf(val, sizeof(val), "%" PRIu64 ",%s", pdp->imsi, inet_ntoa(member->addr));
+
+ if (ctrl_cmd_send_trap(gsn->ctrl, var, val) < 0) {
+ LOGP(DGGSN, LOGL_ERROR, "Failed to create and send TRAP for IMSI %" PRIu64 " [%s].\n", pdp->imsi, var);
+ return false;
+ }
+ return true;
+}
+
int delete_context(struct pdp_t *pdp)
{
DEBUGP(DGGSN, "Deleting PDP context\n");
struct ippoolm_t *member = pdp->peer;
- char v[NAMESIZE];
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);
+ send_trap(gsn, pdp, member, "imsi-rem-ip"); /* TRAP with IP removal */
ippool_freeip(ippool, (struct ippoolm_t *)pdp->peer);
} else
SYS_ERR(DGGSN, LOGL_ERROR, 0, "Peer not defined!");
@@ -162,7 +170,6 @@ int create_context_ind(struct pdp_t *pdp)
{
struct in_addr addr;
struct ippoolm_t *member;
- char v[NAMESIZE];
DEBUGP(DGGSN, "Received create PDP context request\n");
@@ -192,10 +199,8 @@ int create_context_ind(struct pdp_t *pdp)
SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Cannot add tunnel to kernel: %s\n", strerror(errno));
}
-/* FIXME: naming? */
- snprintf(v, sizeof(v), "%" PRIu64 ",%s", pdp->imsi, inet_ntoa(member->addr));
- if (ctrl_cmd_send_trap(gsn->ctrl, "imsi-ass-ip", v) < 0) {
- LOGP(DGGSN, LOGL_ERROR, "Trap creation failed.\n");
+
+ if (!send_trap(gsn, pdp, member, "imsi-ass-ip")) { /* TRAP with IP assignment */
gtp_create_context_resp(gsn, pdp, GTPCAUSE_NO_RESOURCES);
return 0;
}