diff options
| -rw-r--r-- | openbsc/include/osmocom/gprs/Makefile.am | 2 | ||||
| -rw-r--r-- | openbsc/include/osmocom/gprs/gprs_bssgp.h | 142 | ||||
| -rw-r--r-- | openbsc/include/osmocom/gprs/gprs_ns.h | 81 | ||||
| -rw-r--r-- | openbsc/include/osmocom/gprs/protocol/Makefile.am | 3 | ||||
| -rw-r--r-- | openbsc/include/osmocom/gprs/protocol/gsm_08_16.h | 85 | ||||
| -rw-r--r-- | openbsc/include/osmocom/gprs/protocol/gsm_08_18.h | 144 | 
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  | 
