From 3d557b18d099249b0d60ea91c72695a678c9465f Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Mon, 28 Oct 2013 13:29:11 +0100 Subject: gprs: Ignore NS RESET_ACK and ALIVE_ACK without RESET Currently those messages are answered by a NS_STATUS message when received on an uninitialised (no NS_RESET hat been seen yet) NS_VC which violates GPP TS 08.16 7.3.1 and 7.4.1. This patch adds checks to gprs_ns_vc_create() and eventually returns before the error NS_STATUS message is generated. Sponsored-by: On-Waves ehf --- src/gb/gprs_ns.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/gb/gprs_ns.c') diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c index 0e9156a3..55535ad7 100644 --- a/src/gb/gprs_ns.c +++ b/src/gb/gprs_ns.c @@ -1127,12 +1127,29 @@ int gprs_ns_vc_create(struct gprs_ns_inst *nsi, struct msgb *msg, int rc; if (nsh->pdu_type == NS_PDUT_STATUS) { + /* Do not respond, see 3GPP TS 08.16, 7.5.1 */ LOGP(DNS, LOGL_INFO, "Ignoring NS STATUS from %s " "for non-existing NS-VC\n", gprs_ns_ll_str(fallback_nsvc)); return GPRS_NS_CS_SKIPPED; } + if (nsh->pdu_type == NS_PDUT_ALIVE_ACK) { + /* Ignore this, see 3GPP TS 08.16, 7.4.1 */ + LOGP(DNS, LOGL_INFO, "Ignoring NS ALIVE ACK from %s " + "for non-existing NS-VC\n", + gprs_ns_ll_str(fallback_nsvc)); + return GPRS_NS_CS_SKIPPED; + } + + if (nsh->pdu_type == NS_PDUT_RESET_ACK) { + /* Ignore this, see 3GPP TS 08.16, 7.3.1 */ + LOGP(DNS, LOGL_INFO, "Ignoring NS RESET ACK from %s " + "for non-existing NS-VC\n", + gprs_ns_ll_str(fallback_nsvc)); + return GPRS_NS_CS_SKIPPED; + } + /* Only the RESET procedure creates a new NSVC */ if (nsh->pdu_type != NS_PDUT_RESET) { /* Since we have no NSVC, we have to use a fake */ -- cgit v1.2.3