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
This commit is contained in:
Pau Espin 2023-11-03 16:13:57 +01:00 committed by pespin
parent 3abd523faa
commit cd09569bc8
3 changed files with 44 additions and 9 deletions

View File

@ -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

View File

@ -98,14 +98,27 @@ void test_ranap_rab_ass_resp_decode_encode(void)
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 @@ void test_ranap_rab_ass_req_ies_extract_inet_addr(void)
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)

View File

@ -5,6 +5,8 @@ INPUT: 6000002a000001003440230000010033401c603a7c3500010a0901a40000000000000000
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