blob: e951e10de46384f11d1c8605ac17271d6dcb3f55 [file] [log] [blame]
Harald Welte00566f52017-11-21 16:43:49 +01001/* (C) 2017 by Harald Welte <laforge@gnumonks.org> */
2
3module IPA_Types {
4
5import from Osmocom_Types all;
6
Harald Welted86cdc62017-11-22 00:45:07 +01007type enumerated IpaStreamId {
8 IPAC_PROTO_RSL (0),
9 IPAC_PROTO_OSMO (238),
10 IPAC_PROTO_MGCP_OLD (252),
11 IPAC_PROTO_SCCP (253),
12 IPAC_PROTO_CCM (254),
13 IPAC_PROTO_OML (255)
14} with { variant "FIELDLENGTH(8)" }
15
16type enumerated IpaExtStreamId {
17 IPAC_PROTO_EXT_CTRL ('00'H),
18 IPAC_PROTO_EXT_MGCP ('01'H),
19 IPAC_PROTO_EXT_LAC ('02'H),
20 IPAC_PROTO_EXT_SMSC ('03'H),
21 IPAC_PROTO_EXT_ORC ('04'H),
22 IPAC_PROTO_EXT_GSUP ('05'H),
23 IPAC_PROTO_EXT_OAP ('06'H)
24} with { variant "FIELDLENGTH(8)" }
Harald Welte00566f52017-11-21 16:43:49 +010025
26external function enc_PDU_IPA(in PDU_IPA pdu) return octetstring
27with { extension "prototype(convert)"
28 extension "encode(RAW)"
29 }
30
31external function dec_PDU_IPA(in octetstring stream) return PDU_IPA
32with { extension "prototype(convert)"
33 extension "decode(RAW)"
34 }
35
36type record PDU_IPA
37{
38 uint16_t lengthInd,
39 IpaStreamId streamId,
Harald Welte2a8f8472017-11-23 21:11:34 +010040 IpaExtStreamId streamIdExt optional,
Harald Welte00566f52017-11-21 16:43:49 +010041 octetstring payloadData
42} with {
Harald Welte19ad52b2017-11-24 19:54:55 +010043 variant (lengthInd) "LENGTHTO(streamIdExt,payloadData)";
Harald Welte00566f52017-11-21 16:43:49 +010044 variant (lengthInd) "FIELDLENGTH(16)";
45 variant (lengthInd) "BYTEORDER(last)";
Harald Welte2a8f8472017-11-23 21:11:34 +010046 variant (streamIdExt) "PRESENCE(streamId=IPAC_PROTO_OSMO)";
Harald Welte00566f52017-11-21 16:43:49 +010047}
48
Harald Welted86cdc62017-11-22 00:45:07 +010049
50type enumerated IpaCcmMsgtype {
51 IPAC_MSGT_PING ('00'H),
52 IPAC_MSGT_PONG ('01'H),
53 IPAC_MSGT_ID_GET ('04'H),
54 IPAC_MSGT_ID_RESP ('05'H),
55 IPAC_MSGT_ID_ACK ('06'H)
56} with { variant "FIELDLENGTH(8)" }
57
58type enumerated IpaCcmIdTag {
59 IPAC_IDTAG_SERNR ('00'H),
60 IPAC_IDTAG_UNITNAME ('01'H),
61 IPAC_IDTAG_LOCATION1 ('02'H),
62 IPAC_IDTAG_LOCATION2 ('03'H),
63 IPAC_IDTAG_EQUIPVERS ('04'H),
64 IPAC_IDTAG_SWVERSION ('05'H),
65 IPAC_IDTAG_IPADDR ('06'H),
66 IPAC_IDTAG_MACADDR ('07'H),
67 IPAC_IDTAG_UNIT ('08'H)
68} with { variant "FIELDLENGTH(8)" }
69
70
71type record IpaCcmGetPart {
72 uint8_t one,
73 IpaCcmIdTag tag
Harald Welte00566f52017-11-21 16:43:49 +010074}
Harald Welted86cdc62017-11-22 00:45:07 +010075type set of IpaCcmGetPart IpaCcmIdGet;
76
77type record IpaCcmRespPart {
78 uint16_t len,
79 IpaCcmIdTag tag,
80 charstring data
81} with { variant (len) "LENGTHTO(data,tag)" }
82type set of IpaCcmRespPart IpaCcmIdResp;
83
84type union IpaCcmUnion {
85 IpaCcmIdGet get,
86 IpaCcmIdResp resp,
87 octetstring other
88}
89
90type record PDU_IPA_CCM {
91 IpaCcmMsgtype msg_type,
92 IpaCcmUnion u optional
93} with { variant "" };
94
95
96external function enc_PDU_IPA_CCM(in PDU_IPA_CCM pdu) return octetstring
97with { extension "prototype(convert)"
98 extension "encode(RAW)"
99 }
100
101external function dec_PDU_IPA_CCM(in octetstring stream) return PDU_IPA_CCM
102with { extension "prototype(convert)"
103 extension "decode(RAW)"
104 }
105
106
107} with { encode "RAW" }