blob: bd04a6632c21ae592f1f16677f22be189ee96b87 [file] [log] [blame]
Harald Weltef1fd0162017-07-22 20:34:05 +02001module NS_Types {
2 import from General_Types all;
3 import from Osmocom_Types all;
4 import from GSM_Types all;
5 import from BSSGP_Types all;
6
7 /* TS 48.016 10.3.7 */
8 type enumerated NsPduType {
9 NS_PDUT_NS_UNITDATA ('00000000'B),
10 NS_PDUT_NS_RESET ('00000010'B),
11 NS_PDUT_NS_RESET_ACK ('00000011'B),
12 NS_PDUT_NS_BLOCK ('00000100'B),
13 NS_PDUT_NS_BLOCK_ACK ('00000101'B),
14 NS_PDUT_NS_UNBLOCK ('00000110'B),
15 NS_PDUT_NS_UNBLOCK_ACK ('00000111'B),
16 NS_PDUT_NS_STATUS ('00001000'B),
17 NS_PDUT_NS_ALIVE ('00001010'B),
18 NS_PDUT_NS_ALIVE_ACK ('00001011'B)
19 /* FIXME: SNS */
20 } with { variant "FIELDLENGTH(8)" };
21
22 /* TS 48.016 10.3 */
23 type enumerated NsIEI {
24 NS_IEI_CAUSE ('00000000'B),
25 NS_IEI_NSVCI ('00000001'B),
26 NS_IEI_NS_PDU ('00000010'B),
27 NS_IEI_BVCI ('00000011'B),
28 NS_IEI_NSEI ('00000100'B),
29 NS_IEI_LIST_IPv4 ('00000101'B),
30 NS_IEI_LIST_IPv6 ('00000110'B),
31 NS_IEI_MAX_NUM_NSVC ('00000111'B),
32 NS_IEI_NUM_IPv4_EP ('00001000'B),
33 NS_IEI_NUM_IPv6_EP ('00001001'B),
34 NS_IEI_RESET_FLAG ('00001010'B),
35 NS_IEI_IP_ADDRESS ('00001011'B)
36 } with { variant "FIELDLENGTH(8)" };
37
38 /* TS 48.016 10.3.2 */
39 type enumerated NsCause {
40 NS_CAUSE_TRANSIT_NETWORK_FAILURE ('00000000'B),
41 NS_CAUSE_OM_INTERVENTION ('00000001'B),
42 NS_CAUSE_EQUIPMENT_FAILURE ('00000010'B),
43 NS_CAUSE_NSVC_BLOCKED ('00000011'B),
44 NS_CAUSE_NSVC_UNKNOWN ('00000100'B),
45 NS_CAUSE_BVCI_UNKNOWN_AT_NSE ('00000101'B),
46 NS_CAUSE_SEMANTICALLY_INCORRECT_PDU ('00001000'B),
47 NS_CAUSE_PDU_NOT_COMPATIBLE_WITH_PROTOCOL_STATE ('00001010'B),
48 NS_CAUSE_PROTOCOL_ERROR_UNSPEIFIED ('00001011'B),
49 NS_CAUSE_INVALID_ESSENTIAL_IE ('00001100'B),
50 NS_CAUSE_MISSING_ESSENTIAL_IE ('00001101'B),
51 NS_CAUSE_INVALID_NR_OF_IPv4_ENDPOINTS ('00001110'B),
52 NS_CAUSE_INVALID_NR_OF_IPv6_ENDPOINTS ('00001111'B),
53 NS_CAUSE_INVALID_NR_OF_NSVCS ('00010000'B),
54 NS_CAUSE_INVALID_WEIGHTS ('00010001'B),
55 NS_CAUSE_UNKNOWN_IP_ENDPOINT ('00010010'B),
56 NS_CAUSE_UNKNOWN_IP_ADDRESS ('00010011'B),
57 NS_CAUSE_IP_TEST_FAILEDA ('00010100'B)
58 } with { variant "FIELDLENGTH(8)" };
59
Harald Welte6fff3642017-07-22 21:36:13 +020060 /* TS 48.016 10.3.9 */
61 type record NsSduControlBits {
62 BIT6 spare,
63 boolean c,
64 boolean r
65 } with { variant (c) "FIELDLENGTH(1)"
66 variant (r) "FIELDLENGTH(1)"
67 };
68
Harald Weltef1fd0162017-07-22 20:34:05 +020069 type uint16_t Nsvci;
70 type uint16_t Nsei;
71
72 type union NsIeUnion {
73 BssgpBvci bvci, /* 10.3.1 */
74 NsCause cause, /* 10.3.2 */
75 uint16_t max_num_nsvc, /* 10.3.2e */
76 uint16_t num_ipv4_ep, /* 10.3.2f */
77 uint16_t num_ipv6_ep, /* 10.3.2g */
78 Nsvci nsvci, /* 10.3.5 */
79 Nsei nsei, /* 10.3.6 */
80 octetstring other
81 };
82
83 type record NsTLV {
84 NsIEI iei,
85 uint16_t len,
86 NsIeUnion u
87 } with {
88 variant (u) "CROSSTAG(
89 bvci, iei = NS_IEI_BVCI;
90 cause, iei = NS_IEI_CAUSE;
91 max_num_nsvc, iei = NS_IEI_MAX_NUM_NSVC;
92 num_ipv4_ep, iei = NS_IEI_NUM_IPv4_EP;
93 num_ipv6_ep, iei = NS_IEI_NUM_IPv6_EP;
94 nsvci, iei = NS_IEI_NSVCI;
95 nsei, iei = NS_IEI_NSEI;
96 other, OTHERWISE)"
97 variant (len) "LENGTHTO(u)"
98 };
99
100 type record of NsTLV NsTLVs;
101
Harald Welte6fff3642017-07-22 21:36:13 +0200102 type record NsPduUnitdata {
103 NsSduControlBits control_bits,
104 BssgpBvci bvci,
105 octetstring sdu
106 } with { variant "" };
107
108 type record NsPduOther {
Harald Weltef1fd0162017-07-22 20:34:05 +0200109 NsTLVs tlvs optional
110 } with { variant "" };
111
Harald Welte6fff3642017-07-22 21:36:13 +0200112 type union NsPduUnion {
113 NsPduUnitdata unitdata,
114 NsPduOther other
115 } with { variant "" };
116
117 type record NsPdu {
118 NsPduType pdu_type,
119 NsPduUnion u
120 } with { variant (u) "CROSSTAG(
121 unitdata, pdu_type = NS_PDUT_NS_UNITDATA;
122 other, OTHERWISE)"
123 };
124
Harald Weltef1fd0162017-07-22 20:34:05 +0200125 external function enc_NsPdu(in NsPdu pdu) return octetstring
126 with { extension "prototype(convert) encode(RAW)" };
127 external function dec_NsPdu(in octetstring stream) return NsPdu
128 with { extension "prototype(convert) decode(RAW)" };
129
130} with { encode "RAW" };