From 48f63867170ed1294b31afaeeb6145b94597e573 Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Sat, 12 Sep 2020 02:19:19 +0200 Subject: libgb/ns: allow to create NS_ALIVE NSVC Change-Id: I562c3ac4a8baaa2c97852bbd6a5a10ba1f144004 --- src/gb/gprs_ns2.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c index bae94386..0fa71975 100644 --- a/src/gb/gprs_ns2.c +++ b/src/gb/gprs_ns2.c @@ -625,15 +625,28 @@ enum gprs_ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind, return GPRS_NS2_CS_SKIPPED; } - /* Only the RESET procedure creates a new NSVC */ - if (nsh->pdu_type != NS_PDUT_RESET) { - rc = reject_status_msg(msg, &tp, reject, NS_CAUSE_PDU_INCOMP_PSTATE); - - if (rc < 0) { - LOGP(DLNS, LOGL_ERROR, "Failed to generate reject message (%d)\n", rc); - return rc; + if (bind->vc_mode == NS2_VC_MODE_BLOCKRESET) { + /* Only the RESET procedure creates a new NSVC */ + if (nsh->pdu_type != NS_PDUT_RESET) { + rc = reject_status_msg(msg, &tp, reject, NS_CAUSE_PDU_INCOMP_PSTATE); + + if (rc < 0) { + LOGP(DLNS, LOGL_ERROR, "Failed to generate reject message (%d)\n", rc); + return rc; + } + return GPRS_NS2_CS_REJECTED; + } + } else { /* NS2_VC_MODE_ALIVE */ + /* Only the ALIVE procedure creates a new NSVC */ + if (nsh->pdu_type != NS_PDUT_ALIVE) { + rc = reject_status_msg(msg, &tp, reject, NS_CAUSE_PDU_INCOMP_PSTATE); + + if (rc < 0) { + LOGP(DLNS, LOGL_ERROR, "Failed to generate reject message (%d)\n", rc); + return rc; + } + return GPRS_NS2_CS_REJECTED; } - return GPRS_NS2_CS_REJECTED; } rc = ns2_tlv_parse(&tp, nsh->data, @@ -645,11 +658,13 @@ enum gprs_ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind, return GPRS_NS2_CS_REJECTED; } - if (!TLVP_PRESENT(&tp, NS_IE_CAUSE) || - !TLVP_PRESENT(&tp, NS_IE_VCI) || !TLVP_PRESENT(&tp, NS_IE_NSEI)) { - LOGP(DLNS, LOGL_ERROR, "NS RESET Missing mandatory IE\n"); - rc = reject_status_msg(msg, &tp, reject, NS_CAUSE_MISSING_ESSENT_IE); - return GPRS_NS2_CS_REJECTED; + if (bind->vc_mode == NS2_VC_MODE_BLOCKRESET) { + if (!TLVP_PRESENT(&tp, NS_IE_CAUSE) || + !TLVP_PRESENT(&tp, NS_IE_VCI) || !TLVP_PRESENT(&tp, NS_IE_NSEI)) { + LOGP(DLNS, LOGL_ERROR, "NS RESET Missing mandatory IE\n"); + rc = reject_status_msg(msg, &tp, reject, NS_CAUSE_MISSING_ESSENT_IE); + return GPRS_NS2_CS_REJECTED; + } } /* find or create NSE */ -- cgit v1.2.3