use new external libosmogb (part of libosmocore.git)

This removes the libgb (GPRS NS/BSSGP) code from the openbsc.git
repository and uses the new version from libosmocore.git instead.
diff --git a/openbsc/include/Makefile.am b/openbsc/include/Makefile.am
index 2cc8bee..4596b6e 100644
--- a/openbsc/include/Makefile.am
+++ b/openbsc/include/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS = openbsc osmocom
+SUBDIRS = openbsc
 
 noinst_HEADERS = mISDNif.h compat_af_isdn.h
diff --git a/openbsc/include/osmocom/Makefile.am b/openbsc/include/osmocom/Makefile.am
deleted file mode 100644
index 596ce23..0000000
--- a/openbsc/include/osmocom/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = gprs
diff --git a/openbsc/include/osmocom/gprs/Makefile.am b/openbsc/include/osmocom/gprs/Makefile.am
deleted file mode 100644
index d39592c..0000000
--- a/openbsc/include/osmocom/gprs/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-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
deleted file mode 100644
index 949dbdc..0000000
--- a/openbsc/include/osmocom/gprs/gprs_bssgp.h
+++ /dev/null
@@ -1,166 +0,0 @@
-#ifndef _GPRS_BSSGP_H
-#define _GPRS_BSSGP_H
-
-#include <stdint.h>
-
-#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);
-const char *bssgp_cause_str(enum gprs_bssgp_cause cause);
-/* Transmit a simple response such as BLOCK/UNBLOCK/RESET ACK/NACK */
-int bssgp_tx_simple_bvci(uint8_t pdu_type, uint16_t nsei,
-			 uint16_t bvci, uint16_t ns_bvci);
-/* Chapter 10.4.14: Status */
-int bssgp_tx_status(uint8_t cause, uint16_t *bvci, struct msgb *orig_msg);
-
-enum bssgp_prim {
-	PRIM_BSSGP_DL_UD,
-	PRIM_BSSGP_UL_UD,
-	PRIM_BSSGP_PTM_UD,
-
-	PRIM_BSSGP_GMM_SUSPEND,
-	PRIM_BSSGP_GMM_RESUME,
-	PRIM_BSSGP_GMM_PAGING,
-
-	PRIM_NM_FLUSH_LL,
-	PRIM_NM_LLC_DISCARDED,
-	PRIM_NM_BVC_RESET,
-	PRIM_NM_BVC_BLOCK,
-	PRIM_NM_BVC_UNBLOCK,
-};
-
-struct osmo_bssgp_prim {
-	struct osmo_prim_hdr oph;
-
-	/* common fields */
-	uint16_t nsei;
-	uint16_t bvci;
-	uint32_t tlli;
-	struct tlv_parsed *tp;
-	struct gprs_ra_id *ra_id;
-
-	/* specific fields */
-	union {
-		struct {
-			uint8_t *suspend_ref;
-		} resume;
-	} u;
-};
-
-/* gprs_bssgp.c */
-
-#define BVC_S_BLOCKED	0x0001
-
-/* The per-BTS context that we keep on the SGSN side of the BSSGP link */
-struct bssgp_bvc_ctx {
-	struct llist_head list;
-
-	struct gprs_ra_id ra_id; /*!< parsed RA ID of the remote BTS */
-	uint16_t cell_id; /*!< Cell ID of the remote BTS */
-
-	/* NSEI and BVCI of underlying Gb link.  Together they
-	 * uniquely identify a link to a BTS (5.4.4) */
-	uint16_t bvci;
-	uint16_t nsei;
-
-	uint32_t state;
-
-	struct rate_ctr_group *ctrg;
-
-	/* we might want to add this as a shortcut later, avoiding the NSVC
-	 * lookup for every packet, similar to a routing cache */
-	//struct gprs_nsvc *nsvc;
-};
-extern struct llist_head bssgp_bvc_ctxts;
-/* Find a BTS Context based on parsed RA ID and Cell ID */
-struct bssgp_bvc_ctx *btsctx_by_raid_cid(const struct gprs_ra_id *raid, uint16_t cid);
-/* Find a BTS context based on BVCI+NSEI tuple */
-struct bssgp_bvc_ctx *btsctx_by_bvci_nsei(uint16_t bvci, uint16_t nsei);
-
-#define BVC_F_BLOCKED	0x0001
-
-enum bssgp_ctr {
-	BSSGP_CTR_PKTS_IN,
-	BSSGP_CTR_PKTS_OUT,
-	BSSGP_CTR_BYTES_IN,
-	BSSGP_CTR_BYTES_OUT,
-	BSSGP_CTR_BLOCKED,
-	BSSGP_CTR_DISCARDED,
-};
-
-
-#include <osmocom/gsm/tlv.h>
-#include <osmocom/gprs/gprs_msgb.h>
-
-/* BSSGP-UL-UNITDATA.ind */
-int bssgp_rcvmsg(struct msgb *msg);
-
-/* BSSGP-DL-UNITDATA.req */
-struct bssgp_lv {
-	uint16_t len;
-	uint8_t *v;
-};
-/* parameters for BSSGP downlink userdata transmission */
-struct bssgp_dl_ud_par {
-	uint32_t *tlli;
-	char *imsi;
-	uint16_t drx_parms;
-	/* FIXME: priority */
-	struct bssgp_lv ms_ra_cap;
-	uint8_t qos_profile[3];
-};
-int bssgp_tx_dl_ud(struct msgb *msg, uint16_t pdu_lifetime,
-		   struct bssgp_dl_ud_par *dup);
-
-uint16_t bssgp_parse_cell_id(struct gprs_ra_id *raid, const uint8_t *buf);
-int bssgp_create_cell_id(uint8_t *buf, const struct gprs_ra_id *raid,
-			 uint16_t cid);
-
-/* Wrapper around TLV parser to parse BSSGP IEs */
-static inline int bssgp_tlv_parse(struct tlv_parsed *tp, uint8_t *buf, int len)
-{
-	return tlv_parse(tp, &tvlv_att_def, buf, len, 0, 0);
-}
-
-/*! \brief BSSGP Paging mode */
-enum bssgp_paging_mode {
-	BSSGP_PAGING_PS,
-	BSSGP_PAGING_CS,
-};
-
-/*! \brief BSSGP Paging scope */
-enum bssgp_paging_scope {
-	BSSGP_PAGING_BSS_AREA,		/*!< all cells in BSS */
-	BSSGP_PAGING_LOCATION_AREA,	/*!< all cells in LA */
-	BSSGP_PAGING_ROUTEING_AREA,	/*!< all cells in RA */
-	BSSGP_PAGING_BVCI,		/*!< one cell */
-};
-
-/*! \brief BSSGP paging information */
-struct bssgp_paging_info {
-	enum bssgp_paging_mode mode;	/*!< CS or PS paging */
-	enum bssgp_paging_scope scope;	/*!< bssgp_paging_scope */
-	struct gprs_ra_id raid;		/*!< RA Identifier */
-	uint16_t bvci;			/*!< BVCI */
-	char *imsi;			/*!< IMSI, if any */
-	uint32_t *ptmsi;		/*!< P-TMSI, if any */
-	uint16_t drx_params;		/*!< DRX parameters */
-	uint8_t qos[3];			/*!< QoS parameters */
-};
-
-/* Send a single GMM-PAGING.req to a given NSEI/NS-BVCI */
-int bssgp_tx_paging(uint16_t nsei, uint16_t ns_bvci,
-		    struct bssgp_paging_info *pinfo);
-
-/* gprs_bssgp_vty.c */
-int bssgp_vty_init(void);
-void bssgp_set_log_ss(int ss);
-
-int bssgp_prim_cb(struct osmo_prim_hdr *oph, void *ctx);
-
-#endif /* _GPRS_BSSGP_H */
diff --git a/openbsc/include/osmocom/gprs/gprs_msgb.h b/openbsc/include/osmocom/gprs/gprs_msgb.h
deleted file mode 100644
index f4c8554..0000000
--- a/openbsc/include/osmocom/gprs/gprs_msgb.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _LIBGB_MSGB_H
-#define _LIBGB_MSGB_H
-
-#include <stdint.h>
-/* the data structure stored in msgb->cb for libgb apps */
-struct libgb_msgb_cb {
-	unsigned char *bssgph;
-	unsigned char *llch;
-
-	/* Cell Identifier */
-	unsigned char *bssgp_cell_id;
-
-	/* Identifiers of a BTS, equal to 'struct bssgp_bts_ctx' */
-	uint16_t nsei;
-	uint16_t bvci;
-
-	/* Identifier of a MS (inside BTS), equal to 'struct sgsn_mm_ctx' */
-	uint32_t tlli;
-} __attribute__((packed));
-#define LIBGB_MSGB_CB(__msgb)	((struct libgb_msgb_cb *)&((__msgb)->cb[0]))
-#define msgb_tlli(__x)		LIBGB_MSGB_CB(__x)->tlli
-#define msgb_nsei(__x)		LIBGB_MSGB_CB(__x)->nsei
-#define msgb_bvci(__x)		LIBGB_MSGB_CB(__x)->bvci
-#define msgb_gmmh(__x)		(__x)->l3h
-#define msgb_bssgph(__x)	LIBGB_MSGB_CB(__x)->bssgph
-#define msgb_bssgp_len(__x)	((__x)->tail - (uint8_t *)msgb_bssgph(__x))
-#define msgb_bcid(__x)		LIBGB_MSGB_CB(__x)->bssgp_cell_id
-#define msgb_llch(__x)		LIBGB_MSGB_CB(__x)->llch
-
-/* logging contexts */
-#define GPRS_CTX_NSVC	0
-#define GPRS_CTX_BVC	1
-
-#include <osmocom/core/logging.h>
-int gprs_log_filter_fn(const struct log_context *ctx,
-			struct log_target *tar);
-#endif
diff --git a/openbsc/include/osmocom/gprs/gprs_ns.h b/openbsc/include/osmocom/gprs/gprs_ns.h
deleted file mode 100644
index a7f32b2..0000000
--- a/openbsc/include/osmocom/gprs/gprs_ns.h
+++ /dev/null
@@ -1,189 +0,0 @@
-#ifndef _GPRS_NS_H
-#define _GPRS_NS_H
-
-#include <stdint.h>
-
-/* Our Implementation */
-#include <netinet/in.h>
-#include <osmocom/core/linuxlist.h>
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/timer.h>
-#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	\
-	"(un)blocking Timer (Tns-block) timeout\n"		\
-	"(un)blocking Timer (Tns-block) number of retries\n"	\
-	"Reset Timer (Tns-reset) timeout\n"			\
-	"Reset Timer (Tns-reset) number of retries\n"		\
-	"Test Timer (Tns-test) timeout\n"			\
-	"Alive Timer (Tns-alive) timeout\n"			\
-	"Alive Timer (Tns-alive) number of retries\n"
-
-enum ns_timeout {
-	NS_TOUT_TNS_BLOCK,
-	NS_TOUT_TNS_BLOCK_RETRIES,
-	NS_TOUT_TNS_RESET,
-	NS_TOUT_TNS_RESET_RETRIES,
-	NS_TOUT_TNS_TEST,
-	NS_TOUT_TNS_ALIVE,
-	NS_TOUT_TNS_ALIVE_RETRIES,
-};
-
-#define NSE_S_BLOCKED	0x0001
-#define NSE_S_ALIVE	0x0002
-
-/*! \brief Osmocom NS link layer types */
-enum gprs_ns_ll {
-	GPRS_NS_LL_UDP,		/*!< NS/UDP/IP */
-	GPRS_NS_LL_E1,		/*!< NS/E1 */
-	GPRS_NS_LL_FR_GRE,	/*!< NS/FR/GRE/IP */
-};
-
-/*! \brief Osmoco NS events */
-enum gprs_ns_evt {
-	GPRS_NS_EVT_UNIT_DATA,
-};
-
-struct gprs_nsvc;
-/*! \brief Osmocom GPRS callback function type */
-typedef int gprs_ns_cb_t(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,
-			 struct msgb *msg, uint16_t bvci);
-
-/*! \brief An instance of the NS protocol stack */
-struct gprs_ns_inst {
-	/*! \brief callback to the user for incoming UNIT DATA IND */
-	gprs_ns_cb_t *cb;
-
-	/*! \brief linked lists of all NSVC in this instance */
-	struct llist_head gprs_nsvcs;
-
-	/*! \brief a NSVC object that's needed to deal with packets for
-	 * 	   unknown NSVC */
-	struct gprs_nsvc *unknown_nsvc;
-
-	uint16_t timeout[NS_TIMERS_COUNT];
-
-	/*! \brief NS-over-IP specific bits */
-	struct {
-		struct osmo_fd fd;
-		uint32_t local_ip;
-		uint16_t local_port;
-	} nsip;
-	/*! \brief NS-over-FR-over-GRE-over-IP specific bits */
-	struct {
-		struct osmo_fd fd;
-		uint32_t local_ip;
-		unsigned int enabled:1;
-	} frgre;
-};
-
-enum nsvc_timer_mode {
-	/* standard timers */
-	NSVC_TIMER_TNS_TEST,
-	NSVC_TIMER_TNS_ALIVE,
-	NSVC_TIMER_TNS_RESET,
-	_NSVC_TIMER_NR,
-};
-
-/*! \brief Structure representing a single NS-VC */
-struct gprs_nsvc {
-	/*! \brief list of NS-VCs within NS Instance */
-	struct llist_head list;
-	/*! \brief pointer to NS Instance */
-	struct gprs_ns_inst *nsi;
-
-	uint16_t nsei;	/*! \brief end-to-end significance */
-	uint16_t nsvci;	/*! \brief uniquely identifies NS-VC at SGSN */
-
-	uint32_t state;
-	uint32_t remote_state;
-
-	struct osmo_timer_list timer;
-	enum nsvc_timer_mode timer_mode;
-	int alive_retries;
-
-	unsigned int remote_end_is_sgsn:1;
-	unsigned int persistent:1;
-
-	struct rate_ctr_group *ctrg;
-
-	/*! \brief which link-layer are we based on? */
-	enum gprs_ns_ll ll;
-
-	union {
-		struct {
-			struct sockaddr_in bts_addr;
-		} ip;
-		struct {
-			struct sockaddr_in bts_addr;
-		} frgre;
-	};
-};
-
-/* Create a new NS protocol instance */
-struct gprs_ns_inst *gprs_ns_instantiate(gprs_ns_cb_t *cb, void *ctx);
-
-/* Destroy a NS protocol instance */
-void gprs_ns_destroy(struct gprs_ns_inst *nsi);
-
-/* Listen for incoming GPRS packets via NS/UDP */
-int gprs_ns_nsip_listen(struct gprs_ns_inst *nsi);
-
-/* Establish a connection (from the BSS) to the SGSN */
-struct gprs_nsvc *gprs_ns_nsip_connect(struct gprs_ns_inst *nsi,
-					struct sockaddr_in *dest,
-					uint16_t nsei, uint16_t nsvci);
-
-
-struct sockaddr_in;
-
-/* main function for higher layers (BSSGP) to send NS messages */
-int gprs_ns_sendmsg(struct gprs_ns_inst *nsi, struct msgb *msg);
-
-int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause);
-int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause);
-int gprs_ns_tx_unblock(struct gprs_nsvc *nsvc);
-
-/* Listen for incoming GPRS packets via NS/FR/GRE */
-int gprs_ns_frgre_listen(struct gprs_ns_inst *nsi);
-
-struct gprs_nsvc *gprs_nsvc_create(struct gprs_ns_inst *nsi, uint16_t nsvci);
-void gprs_nsvc_delete(struct gprs_nsvc *nsvc);
-struct gprs_nsvc *gprs_nsvc_by_nsei(struct gprs_ns_inst *nsi, uint16_t nsei);
-struct gprs_nsvc *gprs_nsvc_by_nsvci(struct gprs_ns_inst *nsi, uint16_t nsvci);
-
-/* Initiate a RESET procedure (including timer start, ...)*/
-void gprs_nsvc_reset(struct gprs_nsvc *nsvc, uint8_t cause);
-
-/* Add NS-specific VTY stuff */
-int gprs_ns_vty_init(struct gprs_ns_inst *nsi);
-
-#define NS_ALLOC_SIZE	2048
-#define NS_ALLOC_HEADROOM 20
-static inline struct msgb *gprs_ns_msgb_alloc(void)
-{
-	return msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM, "GPRS/NS");
-}
-
-enum signal_ns {
-	S_NS_RESET,
-	S_NS_BLOCK,
-	S_NS_UNBLOCK,
-	S_NS_ALIVE_EXP,	/* Tns-alive expired more than N times */
-};
-
-struct ns_signal_data {
-	struct gprs_nsvc *nsvc;
-	uint8_t cause;
-};
-
-void gprs_ns_set_log_ss(int ss);
-
-/*! }@ */
-
-#endif
diff --git a/openbsc/include/osmocom/gprs/gprs_ns_frgre.h b/openbsc/include/osmocom/gprs/gprs_ns_frgre.h
deleted file mode 100644
index abcd43f..0000000
--- a/openbsc/include/osmocom/gprs/gprs_ns_frgre.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _GPRS_NS_FRGRE_H
-#define _GPRS_NS_FRGRE_H
-
-int gprs_ns_frgre_sendmsg(struct gprs_nsvc *nsvc, struct msgb *msg);
-
-#endif
diff --git a/openbsc/include/osmocom/gprs/protocol/Makefile.am b/openbsc/include/osmocom/gprs/protocol/Makefile.am
deleted file mode 100644
index 8255a95..0000000
--- a/openbsc/include/osmocom/gprs/protocol/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-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
deleted file mode 100644
index 4c3eda3..0000000
--- a/openbsc/include/osmocom/gprs/protocol/gsm_08_16.h
+++ /dev/null
@@ -1,85 +0,0 @@
-#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
deleted file mode 100644
index 3a351ea..0000000
--- a/openbsc/include/osmocom/gprs/protocol/gsm_08_18.h
+++ /dev/null
@@ -1,144 +0,0 @@
-#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