pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-hnbgw/+/34964?usp=email )
Change subject: tests/ranap_rab_ass: Test RAB-Ass.req with X.213 IPv4 address len=7 ......................................................................
tests/ranap_rab_ass: Test RAB-Ass.req with X.213 IPv4 address len=7
It was found in the field that some peers sends an X.213 IP address consisting of 7 bytes (1byte IDP/AFI, 2byte ICP, 4 byte IPv4 address) insetad of 20 bytes. This was until recently failing in osmo-hnbgw due to missing decoding functionalitit in osmo-iuh.git. Cover it here.
Related: SYS#6623 Depends: osmo-iuh.git I507fb1605d976bd8573162e4fa81721245330184 Change-Id: I71323018d79a4f5778dc6e49488d75ae7c2c4cdc --- M TODO-RELEASE M tests/ranap_rab_ass/ranap_rab_ass_test.c M tests/ranap_rab_ass/ranap_rab_ass_test.ok 3 files changed, 60 insertions(+), 9 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/64/34964/1
diff --git a/TODO-RELEASE b/TODO-RELEASE index d0852fc..b5a838d 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -7,3 +7,4 @@ # If any interfaces have been added since the last public release: c:r:a + 1. # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line +osmo-iuh >1.5.0 proper decoding of X.213 IPv4 address len=7 \ No newline at end of file diff --git a/tests/ranap_rab_ass/ranap_rab_ass_test.c b/tests/ranap_rab_ass/ranap_rab_ass_test.c index fbdfa77..76a3430 100644 --- a/tests/ranap_rab_ass/ranap_rab_ass_test.c +++ b/tests/ranap_rab_ass/ranap_rab_ass_test.c @@ -98,14 +98,27 @@ ranap_cn_rx_co_free(&message); }
-void test_ranap_rab_ass_req_ies_extract_inet_addr(void) +static void test_ranap_rab_ass_req_ies_extract_inet_addr_one(uint8_t *testvec, size_t testvec_len) { int rc; struct osmo_sockaddr addr; struct osmo_sockaddr_str addr_str; uint8_t rab_id; ranap_message message; - uint8_t testvec[] = { + + rc = ranap_ran_rx_co_decode(talloc_asn1_ctx, &message, testvec, testvec_len); + OSMO_ASSERT(rc == 0); + rc = ranap_rab_ass_req_ies_extract_inet_addr(&addr, &rab_id, &message.msg.raB_AssignmentRequestIEs, 0); + osmo_sockaddr_str_from_sockaddr(&addr_str, &addr.u.sas); + printf("ranap_rab_ass_req_extract_inet_addr rc=%d\n", rc); + printf("RESULT: addr=%s, port=%u, rab-id=%02x\n", addr_str.ip, addr_str.port, rab_id); + ranap_ran_rx_co_free(&message); +} + +void test_ranap_rab_ass_req_ies_extract_inet_addr(void) +{ + + uint8_t testvec0[] = { 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x01, 0x00, 0x36, 0x40, 0x52, 0x00, 0x00, 0x01, 0x00, 0x35, 0x00, 0x48, 0x78, 0x22, 0xcd, 0x80, 0x10, 0x2f, @@ -119,14 +132,33 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x76, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00 }; + test_ranap_rab_ass_req_ies_extract_inet_addr_one(testvec0, sizeof(testvec0));
- rc = ranap_ran_rx_co_decode(talloc_asn1_ctx, &message, testvec, sizeof(testvec)); - OSMO_ASSERT(rc == 0); - rc = ranap_rab_ass_req_ies_extract_inet_addr(&addr, &rab_id, &message.msg.raB_AssignmentRequestIEs, 0); - osmo_sockaddr_str_from_sockaddr(&addr_str, &addr.u.sas); - printf("ranap_rab_ass_req_extract_inet_addr rc=%d\n", rc); - printf("RESULT: addr=%s, port=%u, rab-id=%02x\n", addr_str.ip, addr_str.port, rab_id); - ranap_ran_rx_co_free(&message); + /* "35 00 01 ac 19 0c 0d" => X.213 IPv4 address len=7: + * transportLayerInformation + * transportLayerAddress: 350001ac190c0d [bit length 56, 0011 0101 0000 0000 0000 0001 1010 1100 0001 1001 0000 1100 0000 1101 decimal value 14918180947954701] + * transportLayerAddress NSAP: 350001ac190c0d + * IDP: 350001 + * X.213 Address Format Information (AFI): IANA ICP, binary (0x35) + * IANA ICP: IP Version 4 Address (0x0001) + * DSP: ac190c0d00000000000000000000000000 + * IWFA IPv4 Address: 172.25.12.13 + * iuTransportAssociation: bindingID (1) + * bindingID: 444c0000 (17484) + */ + uint8_t testvec1[] = { + 0x00, 0x00, 0x00, 0x80, 0x8c, 0x00, 0x00, 0x01, 0x00, 0x36, 0x40, 0x80, 0x84, 0x00, 0x00, 0x01, + 0x00, 0x35, 0x00, 0x7a, 0x78, 0x02, 0xcd, 0x80, 0x10, 0x2f, 0xa7, 0x20, 0x12, 0x8e, 0x00, 0x00, + 0xf4, 0x4c, 0x64, 0x0a, 0x10, 0x80, 0x00, 0x51, 0x40, 0x00, 0x41, 0x40, 0x00, 0x4b, 0x40, 0x00, + 0x3d, 0x40, 0x00, 0x3a, 0x40, 0x00, 0x37, 0x40, 0x00, 0x31, 0x40, 0x00, 0x2a, 0x40, 0x00, 0x27, + 0x20, 0x28, 0x84, 0x00, 0x67, 0x40, 0x00, 0x63, 0x40, 0x00, 0x54, 0x40, 0x00, 0x57, 0x40, 0x00, + 0x4c, 0x40, 0x00, 0x3f, 0x40, 0x00, 0x36, 0x40, 0x00, 0x35, 0x40, 0x00, 0x00, 0x22, 0x28, 0x84, + 0x00, 0x3c, 0x40, 0x00, 0x28, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x50, 0x30, 0x82, 0x00, 0x06, + 0x0d, 0xc0, 0x35, 0x00, 0x01, 0xac, 0x19, 0x0c, 0x0d, 0x40, 0x44, 0x4c, 0x00, 0x00, 0x40, 0x01, + 0x00 + }; + test_ranap_rab_ass_req_ies_extract_inet_addr_one(testvec1, sizeof(testvec1)); }
void test_ranap_rab_ass_resp_ies_extract_inet_addr(void) diff --git a/tests/ranap_rab_ass/ranap_rab_ass_test.ok b/tests/ranap_rab_ass/ranap_rab_ass_test.ok index 73565af..6bf2521 100644 --- a/tests/ranap_rab_ass/ranap_rab_ass_test.ok +++ b/tests/ranap_rab_ass/ranap_rab_ass_test.ok @@ -5,6 +5,8 @@ RESULT: 6000002a000001003440230000010033401c603a7c3500010a0901a40000000000000000000000000040040a0000 ranap_rab_ass_req_extract_inet_addr rc=0 RESULT: addr=10.9.1.162, port=8054, rab-id=11 +ranap_rab_ass_req_extract_inet_addr rc=0 +RESULT: addr=172.25.12.13, port=17484, rab-id=01 ranap_rab_ass_resp_extract_inet_addr rc=0 RESULT: addr=10.9.1.164, port=1034 before: addr=10.9.1.162, port=8122, rab_id=39