From 54b8b2dfefae7d495aa17c3e187b317a0a6243cd Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Thu, 24 Oct 2013 01:33:25 +0200 Subject: gb: Create new NSVC object instead of patching the NSVCI When a RESET is received on the same link with a different NSVCI from a BSS on a dynamically created NS connection do not patch the nsvc object but create a new one instead. Thus the NSVCI is never modified at a nsvc object after the NS-VC has been established. Sponsored-by: On-Waves ehf --- tests/gb/gprs_ns_test.c | 5 +++-- tests/gb/gprs_ns_test.ok | 35 +++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 12 deletions(-) (limited to 'tests/gb') diff --git a/tests/gb/gprs_ns_test.c b/tests/gb/gprs_ns_test.c index 546c20a3..c88792c7 100644 --- a/tests/gb/gprs_ns_test.c +++ b/tests/gb/gprs_ns_test.c @@ -435,11 +435,12 @@ static void gprs_dump_nsi(struct gprs_ns_inst *nsi) printf("Current NS-VCIs:\n"); llist_for_each_entry(nsvc, &nsi->gprs_nsvcs, list) { struct sockaddr_in *peer = &(nsvc->ip.bts_addr); - printf(" VCI 0x%04x, NSEI 0x%04x, peer 0x%08x:%d%s%s\n", + printf(" VCI 0x%04x, NSEI 0x%04x, peer 0x%08x:%d%s%s%s\n", nsvc->nsvci, nsvc->nsei, ntohl(peer->sin_addr.s_addr), ntohs(peer->sin_port), nsvc->state & NSE_S_BLOCKED ? ", blocked" : "", - nsvc->state & NSE_S_ALIVE ? "" : ", dead" + nsvc->state & NSE_S_ALIVE ? "" : ", dead", + nsvc->nsvci_is_valid ? "" : ", invalid VCI" ); dump_rate_ctr_group(stdout, " ", nsvc->ctrg); } diff --git a/tests/gb/gprs_ns_test.ok b/tests/gb/gprs_ns_test.ok index 5f90d03f..8a614507 100644 --- a/tests/gb/gprs_ns_test.ok +++ b/tests/gb/gprs_ns_test.ok @@ -445,6 +445,7 @@ Current NS-VCIs: PROCESSING RESET from 0x01020304:2222 02 00 81 01 01 82 f0 01 04 82 10 00 +==> got signal NS_REPLACED: 0xf001/0.0.0.0:0 -> 0x1001/1.2.3.4:2222 ==> got signal NS_RESET, NS-VC 0xf001/1.2.3.4:2222 MESSAGE to BSS, msg length 9 03 01 82 f0 01 04 82 10 00 @@ -455,17 +456,20 @@ MESSAGE to BSS, msg length 1 result (RESET) = 9 Current NS-VCIs: - VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 VCI 0xf001, NSEI 0x1000, peer 0x01020304:2222, blocked + NS-VC replaced other count: 1 + VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 + VCI 0x1001, NSEI 0xf000, peer 0x00000000:0, blocked NS-VC Block count : 3 NS-VC replaced other count: 1 - NS-VC changed NSEI count : 2 + NS-VC changed NSEI count : 1 --- RESET with old NSEI, NSVCI, BSS -> SGSN --- PROCESSING RESET from 0x01020304:2222 02 00 81 01 01 82 10 01 04 82 10 00 +==> got signal NS_REPLACED: 0x1001/0.0.0.0:0 -> 0xf001/1.2.3.4:2222 ==> got signal NS_RESET, NS-VC 0x1001/1.2.3.4:2222 MESSAGE to BSS, msg length 9 03 01 82 10 01 04 82 10 00 @@ -476,10 +480,12 @@ MESSAGE to BSS, msg length 1 result (RESET) = 9 Current NS-VCIs: + VCI 0xf001, NSEI 0x1000, peer 0x00000000:0, blocked + NS-VC replaced other count: 1 VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked NS-VC Block count : 3 - NS-VC replaced other count: 1 + NS-VC replaced other count: 2 NS-VC changed NSEI count : 2 --- Unexpected RESET_ACK VC 1, BSS -> SGSN --- @@ -490,10 +496,12 @@ PROCESSING RESET_ACK from 0x01020304:2222 result (RESET_ACK) = 0 Current NS-VCIs: + VCI 0xf001, NSEI 0x1000, peer 0x00000000:0, blocked + NS-VC replaced other count: 1 VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked NS-VC Block count : 3 - NS-VC replaced other count: 1 + NS-VC replaced other count: 2 NS-VC changed NSEI count : 2 --- RESET_ACK with invalid NSEI, BSS -> SGSN --- @@ -510,10 +518,12 @@ MESSAGE to BSS, msg length 1 result (RESET_ACK) = 1 Current NS-VCIs: + VCI 0xf001, NSEI 0x1000, peer 0x00000000:0, blocked + NS-VC replaced other count: 1 VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 VCI 0x1001, NSEI 0xf000, peer 0x01020304:2222, blocked NS-VC Block count : 4 - NS-VC replaced other count: 1 + NS-VC replaced other count: 2 NS-VC changed NSEI count : 3 --- RESET_ACK with invalid NSVCI, BSS -> SGSN --- @@ -524,16 +534,21 @@ MESSAGE to BSS, msg length 12 PROCESSING RESET_ACK from 0x01020304:2222 03 01 82 f0 01 04 82 10 00 -==> got signal NS_MISMATCH: 0x1001/1.2.3.4:2222 pdu=3, ie=1 -result (RESET_ACK) = -22 +==> got signal NS_REPLACED: 0xf001/0.0.0.0:0 -> 0x1001/1.2.3.4:2222 +MESSAGE to BSS, msg length 1 +0a + +result (RESET_ACK) = 1 Current NS-VCIs: + VCI 0xf001, NSEI 0x1000, peer 0x01020304:2222, blocked + NS-VC Block count : 1 + NS-VC replaced other count: 2 VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111 - VCI 0x1001, NSEI 0xf000, peer 0x01020304:2222, blocked + VCI 0x1001, NSEI 0xf000, peer 0x00000000:0, blocked NS-VC Block count : 4 - NS-VC replaced other count: 1 + NS-VC replaced other count: 2 NS-VC changed NSEI count : 3 - NS-VCI was invalid count : 1 Current NS-VCIs: -- cgit v1.2.3