Neels Hofmeyr | 17518fe | 2017-06-20 04:35:06 +0200 | [diff] [blame] | 1 | /*! \file gsm_08_16.h |
| 2 | * GPRS Networks Service (NS) messages on the Gb interface. |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 3 | * 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05) |
| 4 | * 3GPP TS 48.016 version 6.5.0 Release 6 / ETSI TS 148 016 V6.5.0 (2005-11) */ |
| 5 | |
Neels Hofmeyr | 17518fe | 2017-06-20 04:35:06 +0200 | [diff] [blame] | 6 | #pragma once |
| 7 | |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 8 | #include <stdint.h> |
Alexander Couzens | 6a16149 | 2020-07-12 13:45:50 +0200 | [diff] [blame] | 9 | #include <arpa/inet.h> |
Daniel Willmann | 4692a1c | 2020-09-10 16:42:00 +0200 | [diff] [blame] | 10 | #include <osmocom/core/utils.h> |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 11 | |
| 12 | /*! \addtogroup libgb |
| 13 | * @{ |
Neels Hofmeyr | 17518fe | 2017-06-20 04:35:06 +0200 | [diff] [blame] | 14 | * \file gprs_ns.h */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 15 | |
Neels Hofmeyr | 87e4550 | 2017-06-20 00:17:59 +0200 | [diff] [blame] | 16 | /*! Common header of GPRS NS */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 17 | struct gprs_ns_hdr { |
| 18 | uint8_t pdu_type; /*!< NS PDU type */ |
| 19 | uint8_t data[0]; /*!< variable-length payload */ |
| 20 | } __attribute__((packed)); |
| 21 | |
Harald Welte | 17a642d | 2018-07-01 19:09:52 +0200 | [diff] [blame] | 22 | |
| 23 | /*! Section 10.3.2c List of IP4 Elements */ |
| 24 | struct gprs_ns_ie_ip4_elem { |
| 25 | uint32_t ip_addr; |
| 26 | uint16_t udp_port; |
| 27 | uint8_t sig_weight; |
| 28 | uint8_t data_weight; |
| 29 | } __attribute__ ((packed)); |
| 30 | |
Alexander Couzens | 6a16149 | 2020-07-12 13:45:50 +0200 | [diff] [blame] | 31 | /*! Section 10.3.2d List of IP6 Elements */ |
| 32 | struct gprs_ns_ie_ip6_elem { |
| 33 | struct in6_addr ip_addr; |
| 34 | uint16_t udp_port; |
| 35 | uint8_t sig_weight; |
| 36 | uint8_t data_weight; |
| 37 | } __attribute__ ((packed)); |
| 38 | |
Max | 584f4b6 | 2017-05-04 11:59:52 +0200 | [diff] [blame] | 39 | extern const struct value_string gprs_ns_pdu_strings[]; |
| 40 | |
Neels Hofmeyr | 87e4550 | 2017-06-20 00:17:59 +0200 | [diff] [blame] | 41 | /*! NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 42 | enum ns_pdu_type { |
| 43 | NS_PDUT_UNITDATA = 0x00, |
| 44 | NS_PDUT_RESET = 0x02, |
| 45 | NS_PDUT_RESET_ACK = 0x03, |
| 46 | NS_PDUT_BLOCK = 0x04, |
| 47 | NS_PDUT_BLOCK_ACK = 0x05, |
| 48 | NS_PDUT_UNBLOCK = 0x06, |
| 49 | NS_PDUT_UNBLOCK_ACK = 0x07, |
| 50 | NS_PDUT_STATUS = 0x08, |
| 51 | NS_PDUT_ALIVE = 0x0a, |
| 52 | NS_PDUT_ALIVE_ACK = 0x0b, |
| 53 | /* TS 48.016 Section 10.3.7, Table 10.3.7.1 */ |
| 54 | SNS_PDUT_ACK = 0x0c, |
| 55 | SNS_PDUT_ADD = 0x0d, |
| 56 | SNS_PDUT_CHANGE_WEIGHT = 0x0e, |
| 57 | SNS_PDUT_CONFIG = 0x0f, |
| 58 | SNS_PDUT_CONFIG_ACK = 0x10, |
| 59 | SNS_PDUT_DELETE = 0x11, |
| 60 | SNS_PDUT_SIZE = 0x12, |
| 61 | SNS_PDUT_SIZE_ACK = 0x13, |
| 62 | }; |
| 63 | |
Neels Hofmeyr | 87e4550 | 2017-06-20 00:17:59 +0200 | [diff] [blame] | 64 | /*! NS Control IE (TS 08.16, Section 10.3, Table 12) */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 65 | enum ns_ctrl_ie { |
| 66 | NS_IE_CAUSE = 0x00, |
| 67 | NS_IE_VCI = 0x01, |
| 68 | NS_IE_PDU = 0x02, |
| 69 | NS_IE_BVCI = 0x03, |
| 70 | NS_IE_NSEI = 0x04, |
| 71 | /* TS 48.016 Section 10.3, Table 10.3.1 */ |
| 72 | NS_IE_IPv4_LIST = 0x05, |
| 73 | NS_IE_IPv6_LIST = 0x06, |
| 74 | NS_IE_MAX_NR_NSVC = 0x07, |
| 75 | NS_IE_IPv4_EP_NR = 0x08, |
| 76 | NS_IE_IPv6_EP_NR = 0x09, |
| 77 | NS_IE_RESET_FLAG = 0x0a, |
| 78 | NS_IE_IP_ADDR = 0x0b, |
Harald Welte | 047f387 | 2018-07-01 21:04:45 +0200 | [diff] [blame] | 79 | NS_IE_TRANS_ID = 0xff, /* osmocom. Spec has this IE but without IEI! */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 80 | }; |
| 81 | |
Neels Hofmeyr | 87e4550 | 2017-06-20 00:17:59 +0200 | [diff] [blame] | 82 | /*! NS Cause (TS 08.16, Section 10.3.2, Table 13) */ |
Harald Welte | 8648e49 | 2012-06-17 13:12:51 +0800 | [diff] [blame] | 83 | enum ns_cause { |
| 84 | NS_CAUSE_TRANSIT_FAIL = 0x00, |
| 85 | NS_CAUSE_OM_INTERVENTION = 0x01, |
| 86 | NS_CAUSE_EQUIP_FAIL = 0x02, |
| 87 | NS_CAUSE_NSVC_BLOCKED = 0x03, |
| 88 | NS_CAUSE_NSVC_UNKNOWN = 0x04, |
| 89 | NS_CAUSE_BVCI_UNKNOWN = 0x05, |
| 90 | NS_CAUSE_SEM_INCORR_PDU = 0x08, |
| 91 | NS_CAUSE_PDU_INCOMP_PSTATE = 0x0a, |
| 92 | NS_CAUSE_PROTO_ERR_UNSPEC = 0x0b, |
| 93 | NS_CAUSE_INVAL_ESSENT_IE = 0x0c, |
| 94 | NS_CAUSE_MISSING_ESSENT_IE = 0x0d, |
| 95 | /* TS 48.016 Section 10.3.2, Table 10.3.2.1 */ |
| 96 | NS_CAUSE_INVAL_NR_IPv4_EP = 0x0e, |
| 97 | NS_CAUSE_INVAL_NR_IPv6_EP = 0x0f, |
| 98 | NS_CAUSE_INVAL_NR_NS_VC = 0x10, |
| 99 | NS_CAUSE_INVAL_WEIGH = 0x11, |
| 100 | NS_CAUSE_UNKN_IP_EP = 0x12, |
| 101 | NS_CAUSE_UNKN_IP_ADDR = 0x13, |
| 102 | NS_CAUSE_UNKN_IP_TEST_FAILED = 0x14, |
| 103 | }; |