summaryrefslogtreecommitdiffstats
path: root/src/gb/gprs_ns.c
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2013-10-28 13:29:11 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-30 15:23:18 +0100
commit3d557b18d099249b0d60ea91c72695a678c9465f (patch)
treeb8e20a2cd54a345dedbcdb05905ce73c479db9f0 /src/gb/gprs_ns.c
parente7c427165f696d844be6761a27b3d7a66f5aa49c (diff)
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
Diffstat (limited to 'src/gb/gprs_ns.c')
-rw-r--r--src/gb/gprs_ns.c17
1 files changed, 17 insertions, 0 deletions
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 */