aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include/osmocom
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2012-06-17 13:12:51 +0800
committerHarald Welte <laforge@gnumonks.org>2012-06-17 13:12:51 +0800
commit8648e49a1c10ec2f6d1560aa3f6c70b059eb52c7 (patch)
treedea774270b5c415c1d4f6bb5dd460825893072c0 /openbsc/include/osmocom
parentde4599cc350747609f1b66d84885b34cf76ae253 (diff)
libgb: separate header files related to spec and implementation
like in libosmogsm, we separate between header files that are just reflecting information in the respective specs, and header files that related to our specific implementation.
Diffstat (limited to 'openbsc/include/osmocom')
-rw-r--r--openbsc/include/osmocom/gprs/Makefile.am2
-rw-r--r--openbsc/include/osmocom/gprs/gprs_bssgp.h142
-rw-r--r--openbsc/include/osmocom/gprs/gprs_ns.h81
-rw-r--r--openbsc/include/osmocom/gprs/protocol/Makefile.am3
-rw-r--r--openbsc/include/osmocom/gprs/protocol/gsm_08_16.h85
-rw-r--r--openbsc/include/osmocom/gprs/protocol/gsm_08_18.h144
6 files changed, 238 insertions, 219 deletions
diff --git a/openbsc/include/osmocom/gprs/Makefile.am b/openbsc/include/osmocom/gprs/Makefile.am
index 66b414f3..d39592c1 100644
--- a/openbsc/include/osmocom/gprs/Makefile.am
+++ b/openbsc/include/osmocom/gprs/Makefile.am
@@ -1,3 +1,5 @@
libgb_HEADERS = gprs_bssgp.h gprs_ns.h gprs_ns_frgre.h gprs_msgb.h
libgbdir = $(includedir)/osmocom/gprs
+
+SUBDIRS = protocol
diff --git a/openbsc/include/osmocom/gprs/gprs_bssgp.h b/openbsc/include/osmocom/gprs/gprs_bssgp.h
index 66c2290f..949dbdc8 100644
--- a/openbsc/include/osmocom/gprs/gprs_bssgp.h
+++ b/openbsc/include/osmocom/gprs/gprs_bssgp.h
@@ -3,149 +3,11 @@
#include <stdint.h>
-/*! \brief Fixed BVCI definitions (Section 5.4.1) */
-#define BVCI_SIGNALLING 0x0000
-#define BVCI_PTM 0x0001
-
-/*! \brief BSSGP PDU types (Section 11.3.26 / Table 11.27) */
-enum bssgp_pdu_type {
- /* PDUs between RL and BSSGP SAPs */
- BSSGP_PDUT_DL_UNITDATA = 0x00,
- BSSGP_PDUT_UL_UNITDATA = 0x01,
- BSSGP_PDUT_RA_CAPABILITY = 0x02,
- BSSGP_PDUT_PTM_UNITDATA = 0x03,
- /* PDUs between GMM SAPs */
- BSSGP_PDUT_PAGING_PS = 0x06,
- BSSGP_PDUT_PAGING_CS = 0x07,
- BSSGP_PDUT_RA_CAPA_UDPATE = 0x08,
- BSSGP_PDUT_RA_CAPA_UPDATE_ACK = 0x09,
- BSSGP_PDUT_RADIO_STATUS = 0x0a,
- BSSGP_PDUT_SUSPEND = 0x0b,
- BSSGP_PDUT_SUSPEND_ACK = 0x0c,
- BSSGP_PDUT_SUSPEND_NACK = 0x0d,
- BSSGP_PDUT_RESUME = 0x0e,
- BSSGP_PDUT_RESUME_ACK = 0x0f,
- BSSGP_PDUT_RESUME_NACK = 0x10,
- /* PDus between NM SAPs */
- BSSGP_PDUT_BVC_BLOCK = 0x20,
- BSSGP_PDUT_BVC_BLOCK_ACK = 0x21,
- BSSGP_PDUT_BVC_RESET = 0x22,
- BSSGP_PDUT_BVC_RESET_ACK = 0x23,
- BSSGP_PDUT_BVC_UNBLOCK = 0x24,
- BSSGP_PDUT_BVC_UNBLOCK_ACK = 0x25,
- BSSGP_PDUT_FLOW_CONTROL_BVC = 0x26,
- BSSGP_PDUT_FLOW_CONTROL_BVC_ACK = 0x27,
- BSSGP_PDUT_FLOW_CONTROL_MS = 0x28,
- BSSGP_PDUT_FLOW_CONTROL_MS_ACK = 0x29,
- BSSGP_PDUT_FLUSH_LL = 0x2a,
- BSSGP_PDUT_FLUSH_LL_ACK = 0x2b,
- BSSGP_PDUT_LLC_DISCARD = 0x2c,
- BSSGP_PDUT_SGSN_INVOKE_TRACE = 0x40,
- BSSGP_PDUT_STATUS = 0x41,
- /* PDUs between PFM SAP's */
- BSSGP_PDUT_DOWNLOAD_BSS_PFC = 0x50,
- BSSGP_PDUT_CREATE_BSS_PFC = 0x51,
- BSSGP_PDUT_CREATE_BSS_PFC_ACK = 0x52,
- BSSGP_PDUT_CREATE_BSS_PFC_NACK = 0x53,
- BSSGP_PDUT_MODIFY_BSS_PFC = 0x54,
- BSSGP_PDUT_MODIFY_BSS_PFC_ACK = 0x55,
- BSSGP_PDUT_DELETE_BSS_PFC = 0x56,
- BSSGP_PDUT_DELETE_BSS_PFC_ACK = 0x57,
-};
-
-/*! \brief BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
-struct bssgp_ud_hdr {
- uint8_t pdu_type; /*!< BSSGP PDU type */
- uint32_t tlli; /*!< Temporary Link-Local Identifier */
- uint8_t qos_profile[3]; /*!< QoS profile */
- uint8_t data[0]; /* optional/conditional IEs as TLVs */
-} __attribute__((packed));
-
-/*! \brief BSSGP normal header */
-struct bssgp_normal_hdr {
- uint8_t pdu_type; /*!< BSSGP PDU type */
- uint8_t data[0]; /*!< optional/conditional IEs as TLVs */
-};
-
-/*! \brief BSSGP Information Element Identifiers */
-enum bssgp_iei_type {
- BSSGP_IE_ALIGNMENT = 0x00,
- BSSGP_IE_BMAX_DEFAULT_MS = 0x01,
- BSSGP_IE_BSS_AREA_ID = 0x02,
- BSSGP_IE_BUCKET_LEAK_RATE = 0x03,
- BSSGP_IE_BVCI = 0x04,
- BSSGP_IE_BVC_BUCKET_SIZE = 0x05,
- BSSGP_IE_BVC_MEASUREMENT = 0x06,
- BSSGP_IE_CAUSE = 0x07,
- BSSGP_IE_CELL_ID = 0x08,
- BSSGP_IE_CHAN_NEEDED = 0x09,
- BSSGP_IE_DRX_PARAMS = 0x0a,
- BSSGP_IE_EMLPP_PRIO = 0x0b,
- BSSGP_IE_FLUSH_ACTION = 0x0c,
- BSSGP_IE_IMSI = 0x0d,
- BSSGP_IE_LLC_PDU = 0x0e,
- BSSGP_IE_LLC_FRAMES_DISCARDED = 0x0f,
- BSSGP_IE_LOCATION_AREA = 0x10,
- BSSGP_IE_MOBILE_ID = 0x11,
- BSSGP_IE_MS_BUCKET_SIZE = 0x12,
- BSSGP_IE_MS_RADIO_ACCESS_CAP = 0x13,
- BSSGP_IE_OMC_ID = 0x14,
- BSSGP_IE_PDU_IN_ERROR = 0x15,
- BSSGP_IE_PDU_LIFETIME = 0x16,
- BSSGP_IE_PRIORITY = 0x17,
- BSSGP_IE_QOS_PROFILE = 0x18,
- BSSGP_IE_RADIO_CAUSE = 0x19,
- BSSGP_IE_RA_CAP_UPD_CAUSE = 0x1a,
- BSSGP_IE_ROUTEING_AREA = 0x1b,
- BSSGP_IE_R_DEFAULT_MS = 0x1c,
- BSSGP_IE_SUSPEND_REF_NR = 0x1d,
- BSSGP_IE_TAG = 0x1e,
- BSSGP_IE_TLLI = 0x1f,
- BSSGP_IE_TMSI = 0x20,
- BSSGP_IE_TRACE_REFERENC = 0x21,
- BSSGP_IE_TRACE_TYPE = 0x22,
- BSSGP_IE_TRANSACTION_ID = 0x23,
- BSSGP_IE_TRIGGER_ID = 0x24,
- BSSGP_IE_NUM_OCT_AFF = 0x25,
- BSSGP_IE_LSA_ID_LIST = 0x26,
- BSSGP_IE_LSA_INFORMATION = 0x27,
- BSSGP_IE_PACKET_FLOW_ID = 0x28,
- BSSGP_IE_PACKET_FLOW_TIMER = 0x29,
- BSSGP_IE_AGG_BSS_QOS_PROFILE = 0x3a,
- BSSGP_IE_FEATURE_BITMAP = 0x3b,
- BSSGP_IE_BUCKET_FULL_RATIO = 0x3c,
- BSSGP_IE_SERVICE_UTRAN_CCO = 0x3d,
-};
-
-/*! \brief Cause coding (Section 11.3.8 / Table 11.10) */
-enum gprs_bssgp_cause {
- BSSGP_CAUSE_PROC_OVERLOAD = 0x00,
- BSSGP_CAUSE_EQUIP_FAIL = 0x01,
- BSSGP_CAUSE_TRASIT_NET_FAIL = 0x02,
- BSSGP_CAUSE_CAPA_GREATER_0KPBS = 0x03,
- BSSGP_CAUSE_UNKNOWN_MS = 0x04,
- BSSGP_CAUSE_UNKNOWN_BVCI = 0x05,
- BSSGP_CAUSE_CELL_TRAF_CONG = 0x06,
- BSSGP_CAUSE_SGSN_CONG = 0x07,
- BSSGP_CAUSE_OML_INTERV = 0x08,
- BSSGP_CAUSE_BVCI_BLOCKED = 0x09,
- BSSGP_CAUSE_PFC_CREATE_FAIL = 0x0a,
- BSSGP_CAUSE_SEM_INCORR_PDU = 0x20,
- BSSGP_CAUSE_INV_MAND_INF = 0x21,
- BSSGP_CAUSE_MISSING_MAND_IE = 0x22,
- BSSGP_CAUSE_MISSING_COND_IE = 0x23,
- BSSGP_CAUSE_UNEXP_COND_IE = 0x24,
- BSSGP_CAUSE_COND_IE_ERR = 0x25,
- BSSGP_CAUSE_PDU_INCOMP_STATE = 0x26,
- BSSGP_CAUSE_PROTO_ERR_UNSPEC = 0x27,
- BSSGP_CAUSE_PDU_INCOMP_FEAT = 0x28,
-};
-
-/* Our implementation */
-
#include <osmocom/gsm/gsm48.h>
#include <osmocom/gsm/prim.h>
+#include <osmocom/gprs/protocol/gsm_08_18.h>
+
/* gprs_bssgp_util.c */
extern struct gprs_ns_inst *bssgp_nsi;
struct msgb *bssgp_msgb_alloc(void);
diff --git a/openbsc/include/osmocom/gprs/gprs_ns.h b/openbsc/include/osmocom/gprs/gprs_ns.h
index 206873b6..a7f32b25 100644
--- a/openbsc/include/osmocom/gprs/gprs_ns.h
+++ b/openbsc/include/osmocom/gprs/gprs_ns.h
@@ -3,85 +3,6 @@
#include <stdint.h>
-/* GPRS Networks Service (NS) messages on the Gb interface
- * 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05)
- * 3GPP TS 48.016 version 6.5.0 Release 6 / ETSI TS 148 016 V6.5.0 (2005-11) */
-
-/*! \addtogroup libgb
- * @{
- */
-
-/*! \file gprs_ns.h */
-
-/*! \brief Common header of GPRS NS */
-struct gprs_ns_hdr {
- uint8_t pdu_type; /*!< NS PDU type */
- uint8_t data[0]; /*!< variable-length payload */
-} __attribute__((packed));
-
-/*! \brief NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
-enum ns_pdu_type {
- NS_PDUT_UNITDATA = 0x00,
- NS_PDUT_RESET = 0x02,
- NS_PDUT_RESET_ACK = 0x03,
- NS_PDUT_BLOCK = 0x04,
- NS_PDUT_BLOCK_ACK = 0x05,
- NS_PDUT_UNBLOCK = 0x06,
- NS_PDUT_UNBLOCK_ACK = 0x07,
- NS_PDUT_STATUS = 0x08,
- NS_PDUT_ALIVE = 0x0a,
- NS_PDUT_ALIVE_ACK = 0x0b,
- /* TS 48.016 Section 10.3.7, Table 10.3.7.1 */
- SNS_PDUT_ACK = 0x0c,
- SNS_PDUT_ADD = 0x0d,
- SNS_PDUT_CHANGE_WEIGHT = 0x0e,
- SNS_PDUT_CONFIG = 0x0f,
- SNS_PDUT_CONFIG_ACK = 0x10,
- SNS_PDUT_DELETE = 0x11,
- SNS_PDUT_SIZE = 0x12,
- SNS_PDUT_SIZE_ACK = 0x13,
-};
-
-/*! \brief NS Control IE (TS 08.16, Section 10.3, Table 12) */
-enum ns_ctrl_ie {
- NS_IE_CAUSE = 0x00,
- NS_IE_VCI = 0x01,
- NS_IE_PDU = 0x02,
- NS_IE_BVCI = 0x03,
- NS_IE_NSEI = 0x04,
- /* TS 48.016 Section 10.3, Table 10.3.1 */
- NS_IE_IPv4_LIST = 0x05,
- NS_IE_IPv6_LIST = 0x06,
- NS_IE_MAX_NR_NSVC = 0x07,
- NS_IE_IPv4_EP_NR = 0x08,
- NS_IE_IPv6_EP_NR = 0x09,
- NS_IE_RESET_FLAG = 0x0a,
- NS_IE_IP_ADDR = 0x0b,
-};
-
-/*! \brief NS Cause (TS 08.16, Section 10.3.2, Table 13) */
-enum ns_cause {
- NS_CAUSE_TRANSIT_FAIL = 0x00,
- NS_CAUSE_OM_INTERVENTION = 0x01,
- NS_CAUSE_EQUIP_FAIL = 0x02,
- NS_CAUSE_NSVC_BLOCKED = 0x03,
- NS_CAUSE_NSVC_UNKNOWN = 0x04,
- NS_CAUSE_BVCI_UNKNOWN = 0x05,
- NS_CAUSE_SEM_INCORR_PDU = 0x08,
- NS_CAUSE_PDU_INCOMP_PSTATE = 0x0a,
- NS_CAUSE_PROTO_ERR_UNSPEC = 0x0b,
- NS_CAUSE_INVAL_ESSENT_IE = 0x0c,
- NS_CAUSE_MISSING_ESSENT_IE = 0x0d,
- /* TS 48.016 Section 10.3.2, Table 10.3.2.1 */
- NS_CAUSE_INVAL_NR_IPv4_EP = 0x0e,
- NS_CAUSE_INVAL_NR_IPv6_EP = 0x0f,
- NS_CAUSE_INVAL_NR_NS_VC = 0x10,
- NS_CAUSE_INVAL_WEIGH = 0x11,
- NS_CAUSE_UNKN_IP_EP = 0x12,
- NS_CAUSE_UNKN_IP_ADDR = 0x13,
- NS_CAUSE_UNKN_IP_TEST_FAILED = 0x14,
-};
-
/* Our Implementation */
#include <netinet/in.h>
#include <osmocom/core/linuxlist.h>
@@ -90,6 +11,8 @@ enum ns_cause {
#include <osmocom/core/select.h>
#include <osmocom/gprs/gprs_msgb.h>
+#include <osmocom/gprs/protocol/gsm_08_16.h>
+
#define NS_TIMERS_COUNT 7
#define NS_TIMERS "(tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries)"
#define NS_TIMERS_HELP \
diff --git a/openbsc/include/osmocom/gprs/protocol/Makefile.am b/openbsc/include/osmocom/gprs/protocol/Makefile.am
new file mode 100644
index 00000000..8255a952
--- /dev/null
+++ b/openbsc/include/osmocom/gprs/protocol/Makefile.am
@@ -0,0 +1,3 @@
+libgbp_HEADERS = gsm_08_16.h gsm_08_18.h
+
+libgbpdir = $(includedir)/osmocom/gprs/protocol
diff --git a/openbsc/include/osmocom/gprs/protocol/gsm_08_16.h b/openbsc/include/osmocom/gprs/protocol/gsm_08_16.h
new file mode 100644
index 00000000..4c3eda32
--- /dev/null
+++ b/openbsc/include/osmocom/gprs/protocol/gsm_08_16.h
@@ -0,0 +1,85 @@
+#ifndef _OSMO_08_16_H
+#define _OSMO_08_16_H
+
+/* GPRS Networks Service (NS) messages on the Gb interface
+ * 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05)
+ * 3GPP TS 48.016 version 6.5.0 Release 6 / ETSI TS 148 016 V6.5.0 (2005-11) */
+
+#include <stdint.h>
+
+/*! \addtogroup libgb
+ * @{
+ */
+
+/*! \file gprs_ns.h */
+
+/*! \brief Common header of GPRS NS */
+struct gprs_ns_hdr {
+ uint8_t pdu_type; /*!< NS PDU type */
+ uint8_t data[0]; /*!< variable-length payload */
+} __attribute__((packed));
+
+/*! \brief NS PDU Type (TS 08.16, Section 10.3.7, Table 14) */
+enum ns_pdu_type {
+ NS_PDUT_UNITDATA = 0x00,
+ NS_PDUT_RESET = 0x02,
+ NS_PDUT_RESET_ACK = 0x03,
+ NS_PDUT_BLOCK = 0x04,
+ NS_PDUT_BLOCK_ACK = 0x05,
+ NS_PDUT_UNBLOCK = 0x06,
+ NS_PDUT_UNBLOCK_ACK = 0x07,
+ NS_PDUT_STATUS = 0x08,
+ NS_PDUT_ALIVE = 0x0a,
+ NS_PDUT_ALIVE_ACK = 0x0b,
+ /* TS 48.016 Section 10.3.7, Table 10.3.7.1 */
+ SNS_PDUT_ACK = 0x0c,
+ SNS_PDUT_ADD = 0x0d,
+ SNS_PDUT_CHANGE_WEIGHT = 0x0e,
+ SNS_PDUT_CONFIG = 0x0f,
+ SNS_PDUT_CONFIG_ACK = 0x10,
+ SNS_PDUT_DELETE = 0x11,
+ SNS_PDUT_SIZE = 0x12,
+ SNS_PDUT_SIZE_ACK = 0x13,
+};
+
+/*! \brief NS Control IE (TS 08.16, Section 10.3, Table 12) */
+enum ns_ctrl_ie {
+ NS_IE_CAUSE = 0x00,
+ NS_IE_VCI = 0x01,
+ NS_IE_PDU = 0x02,
+ NS_IE_BVCI = 0x03,
+ NS_IE_NSEI = 0x04,
+ /* TS 48.016 Section 10.3, Table 10.3.1 */
+ NS_IE_IPv4_LIST = 0x05,
+ NS_IE_IPv6_LIST = 0x06,
+ NS_IE_MAX_NR_NSVC = 0x07,
+ NS_IE_IPv4_EP_NR = 0x08,
+ NS_IE_IPv6_EP_NR = 0x09,
+ NS_IE_RESET_FLAG = 0x0a,
+ NS_IE_IP_ADDR = 0x0b,
+};
+
+/*! \brief NS Cause (TS 08.16, Section 10.3.2, Table 13) */
+enum ns_cause {
+ NS_CAUSE_TRANSIT_FAIL = 0x00,
+ NS_CAUSE_OM_INTERVENTION = 0x01,
+ NS_CAUSE_EQUIP_FAIL = 0x02,
+ NS_CAUSE_NSVC_BLOCKED = 0x03,
+ NS_CAUSE_NSVC_UNKNOWN = 0x04,
+ NS_CAUSE_BVCI_UNKNOWN = 0x05,
+ NS_CAUSE_SEM_INCORR_PDU = 0x08,
+ NS_CAUSE_PDU_INCOMP_PSTATE = 0x0a,
+ NS_CAUSE_PROTO_ERR_UNSPEC = 0x0b,
+ NS_CAUSE_INVAL_ESSENT_IE = 0x0c,
+ NS_CAUSE_MISSING_ESSENT_IE = 0x0d,
+ /* TS 48.016 Section 10.3.2, Table 10.3.2.1 */
+ NS_CAUSE_INVAL_NR_IPv4_EP = 0x0e,
+ NS_CAUSE_INVAL_NR_IPv6_EP = 0x0f,
+ NS_CAUSE_INVAL_NR_NS_VC = 0x10,
+ NS_CAUSE_INVAL_WEIGH = 0x11,
+ NS_CAUSE_UNKN_IP_EP = 0x12,
+ NS_CAUSE_UNKN_IP_ADDR = 0x13,
+ NS_CAUSE_UNKN_IP_TEST_FAILED = 0x14,
+};
+
+#endif
diff --git a/openbsc/include/osmocom/gprs/protocol/gsm_08_18.h b/openbsc/include/osmocom/gprs/protocol/gsm_08_18.h
new file mode 100644
index 00000000..3a351eaa
--- /dev/null
+++ b/openbsc/include/osmocom/gprs/protocol/gsm_08_18.h
@@ -0,0 +1,144 @@
+#ifndef _OSMO_08_18_H
+#define _OSMO_08_18_H
+
+#include <stdint.h>
+
+/*! \brief Fixed BVCI definitions (Section 5.4.1) */
+#define BVCI_SIGNALLING 0x0000
+#define BVCI_PTM 0x0001
+
+/*! \brief BSSGP PDU types (Section 11.3.26 / Table 11.27) */
+enum bssgp_pdu_type {
+ /* PDUs between RL and BSSGP SAPs */
+ BSSGP_PDUT_DL_UNITDATA = 0x00,
+ BSSGP_PDUT_UL_UNITDATA = 0x01,
+ BSSGP_PDUT_RA_CAPABILITY = 0x02,
+ BSSGP_PDUT_PTM_UNITDATA = 0x03,
+ /* PDUs between GMM SAPs */
+ BSSGP_PDUT_PAGING_PS = 0x06,
+ BSSGP_PDUT_PAGING_CS = 0x07,
+ BSSGP_PDUT_RA_CAPA_UDPATE = 0x08,
+ BSSGP_PDUT_RA_CAPA_UPDATE_ACK = 0x09,
+ BSSGP_PDUT_RADIO_STATUS = 0x0a,
+ BSSGP_PDUT_SUSPEND = 0x0b,
+ BSSGP_PDUT_SUSPEND_ACK = 0x0c,
+ BSSGP_PDUT_SUSPEND_NACK = 0x0d,
+ BSSGP_PDUT_RESUME = 0x0e,
+ BSSGP_PDUT_RESUME_ACK = 0x0f,
+ BSSGP_PDUT_RESUME_NACK = 0x10,
+ /* PDus between NM SAPs */
+ BSSGP_PDUT_BVC_BLOCK = 0x20,
+ BSSGP_PDUT_BVC_BLOCK_ACK = 0x21,
+ BSSGP_PDUT_BVC_RESET = 0x22,
+ BSSGP_PDUT_BVC_RESET_ACK = 0x23,
+ BSSGP_PDUT_BVC_UNBLOCK = 0x24,
+ BSSGP_PDUT_BVC_UNBLOCK_ACK = 0x25,
+ BSSGP_PDUT_FLOW_CONTROL_BVC = 0x26,
+ BSSGP_PDUT_FLOW_CONTROL_BVC_ACK = 0x27,
+ BSSGP_PDUT_FLOW_CONTROL_MS = 0x28,
+ BSSGP_PDUT_FLOW_CONTROL_MS_ACK = 0x29,
+ BSSGP_PDUT_FLUSH_LL = 0x2a,
+ BSSGP_PDUT_FLUSH_LL_ACK = 0x2b,
+ BSSGP_PDUT_LLC_DISCARD = 0x2c,
+ BSSGP_PDUT_SGSN_INVOKE_TRACE = 0x40,
+ BSSGP_PDUT_STATUS = 0x41,
+ /* PDUs between PFM SAP's */
+ BSSGP_PDUT_DOWNLOAD_BSS_PFC = 0x50,
+ BSSGP_PDUT_CREATE_BSS_PFC = 0x51,
+ BSSGP_PDUT_CREATE_BSS_PFC_ACK = 0x52,
+ BSSGP_PDUT_CREATE_BSS_PFC_NACK = 0x53,
+ BSSGP_PDUT_MODIFY_BSS_PFC = 0x54,
+ BSSGP_PDUT_MODIFY_BSS_PFC_ACK = 0x55,
+ BSSGP_PDUT_DELETE_BSS_PFC = 0x56,
+ BSSGP_PDUT_DELETE_BSS_PFC_ACK = 0x57,
+};
+
+/*! \brief BSSGP User-Data header (Section 10.2.1 and 10.2.2) */
+struct bssgp_ud_hdr {
+ uint8_t pdu_type; /*!< BSSGP PDU type */
+ uint32_t tlli; /*!< Temporary Link-Local Identifier */
+ uint8_t qos_profile[3]; /*!< QoS profile */
+ uint8_t data[0]; /* optional/conditional IEs as TLVs */
+} __attribute__((packed));
+
+/*! \brief BSSGP normal header */
+struct bssgp_normal_hdr {
+ uint8_t pdu_type; /*!< BSSGP PDU type */
+ uint8_t data[0]; /*!< optional/conditional IEs as TLVs */
+};
+
+/*! \brief BSSGP Information Element Identifiers */
+enum bssgp_iei_type {
+ BSSGP_IE_ALIGNMENT = 0x00,
+ BSSGP_IE_BMAX_DEFAULT_MS = 0x01,
+ BSSGP_IE_BSS_AREA_ID = 0x02,
+ BSSGP_IE_BUCKET_LEAK_RATE = 0x03,
+ BSSGP_IE_BVCI = 0x04,
+ BSSGP_IE_BVC_BUCKET_SIZE = 0x05,
+ BSSGP_IE_BVC_MEASUREMENT = 0x06,
+ BSSGP_IE_CAUSE = 0x07,
+ BSSGP_IE_CELL_ID = 0x08,
+ BSSGP_IE_CHAN_NEEDED = 0x09,
+ BSSGP_IE_DRX_PARAMS = 0x0a,
+ BSSGP_IE_EMLPP_PRIO = 0x0b,
+ BSSGP_IE_FLUSH_ACTION = 0x0c,
+ BSSGP_IE_IMSI = 0x0d,
+ BSSGP_IE_LLC_PDU = 0x0e,
+ BSSGP_IE_LLC_FRAMES_DISCARDED = 0x0f,
+ BSSGP_IE_LOCATION_AREA = 0x10,
+ BSSGP_IE_MOBILE_ID = 0x11,
+ BSSGP_IE_MS_BUCKET_SIZE = 0x12,
+ BSSGP_IE_MS_RADIO_ACCESS_CAP = 0x13,
+ BSSGP_IE_OMC_ID = 0x14,
+ BSSGP_IE_PDU_IN_ERROR = 0x15,
+ BSSGP_IE_PDU_LIFETIME = 0x16,
+ BSSGP_IE_PRIORITY = 0x17,
+ BSSGP_IE_QOS_PROFILE = 0x18,
+ BSSGP_IE_RADIO_CAUSE = 0x19,
+ BSSGP_IE_RA_CAP_UPD_CAUSE = 0x1a,
+ BSSGP_IE_ROUTEING_AREA = 0x1b,
+ BSSGP_IE_R_DEFAULT_MS = 0x1c,
+ BSSGP_IE_SUSPEND_REF_NR = 0x1d,
+ BSSGP_IE_TAG = 0x1e,
+ BSSGP_IE_TLLI = 0x1f,
+ BSSGP_IE_TMSI = 0x20,
+ BSSGP_IE_TRACE_REFERENC = 0x21,
+ BSSGP_IE_TRACE_TYPE = 0x22,
+ BSSGP_IE_TRANSACTION_ID = 0x23,
+ BSSGP_IE_TRIGGER_ID = 0x24,
+ BSSGP_IE_NUM_OCT_AFF = 0x25,
+ BSSGP_IE_LSA_ID_LIST = 0x26,
+ BSSGP_IE_LSA_INFORMATION = 0x27,
+ BSSGP_IE_PACKET_FLOW_ID = 0x28,
+ BSSGP_IE_PACKET_FLOW_TIMER = 0x29,
+ BSSGP_IE_AGG_BSS_QOS_PROFILE = 0x3a,
+ BSSGP_IE_FEATURE_BITMAP = 0x3b,
+ BSSGP_IE_BUCKET_FULL_RATIO = 0x3c,
+ BSSGP_IE_SERVICE_UTRAN_CCO = 0x3d,
+};
+
+/*! \brief Cause coding (Section 11.3.8 / Table 11.10) */
+enum gprs_bssgp_cause {
+ BSSGP_CAUSE_PROC_OVERLOAD = 0x00,
+ BSSGP_CAUSE_EQUIP_FAIL = 0x01,
+ BSSGP_CAUSE_TRASIT_NET_FAIL = 0x02,
+ BSSGP_CAUSE_CAPA_GREATER_0KPBS = 0x03,
+ BSSGP_CAUSE_UNKNOWN_MS = 0x04,
+ BSSGP_CAUSE_UNKNOWN_BVCI = 0x05,
+ BSSGP_CAUSE_CELL_TRAF_CONG = 0x06,
+ BSSGP_CAUSE_SGSN_CONG = 0x07,
+ BSSGP_CAUSE_OML_INTERV = 0x08,
+ BSSGP_CAUSE_BVCI_BLOCKED = 0x09,
+ BSSGP_CAUSE_PFC_CREATE_FAIL = 0x0a,
+ BSSGP_CAUSE_SEM_INCORR_PDU = 0x20,
+ BSSGP_CAUSE_INV_MAND_INF = 0x21,
+ BSSGP_CAUSE_MISSING_MAND_IE = 0x22,
+ BSSGP_CAUSE_MISSING_COND_IE = 0x23,
+ BSSGP_CAUSE_UNEXP_COND_IE = 0x24,
+ BSSGP_CAUSE_COND_IE_ERR = 0x25,
+ BSSGP_CAUSE_PDU_INCOMP_STATE = 0x26,
+ BSSGP_CAUSE_PROTO_ERR_UNSPEC = 0x27,
+ BSSGP_CAUSE_PDU_INCOMP_FEAT = 0x28,
+};
+
+#endif