summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/osmocom/core/prim.h27
1 files changed, 23 insertions, 4 deletions
diff --git a/include/osmocom/core/prim.h b/include/osmocom/core/prim.h
index 88ae08b5..99eabff0 100644
--- a/include/osmocom/core/prim.h
+++ b/include/osmocom/core/prim.h
@@ -2,6 +2,18 @@
/*! \defgroup prim Osmocom primitives
* @{
+ *
+ * Osmocom Primitives are a method to express inter-layer primitives as
+ * used often in ITU/ETSI/3GPP specifications in a generic way. They
+ * are based on \ref msgb and encapsulate any (optional) user payload
+ * data with a primitive header. The header contains information on
+ * - which SAP this primitive is used on
+ * - what is the name of the primitive
+ * - is it REQUEST, RESPONSE, INDICATION or CONFIRMATION
+ *
+ * For more information on the inter-layer primitives concept, see
+ * ITU-T X.21@ as found at https://www.itu.int/rec/T-REC-X.212-199511-I/en
+ *
* \file prim.h */
#include <stdint.h>
@@ -20,21 +32,28 @@ enum osmo_prim_operation {
extern const struct value_string osmo_prim_op_names[5];
+/*!< The upper 8 byte of the technology, the lower 24 bits for the SAP */
#define _SAP_GSM_SHIFT 24
#define _SAP_GSM_BASE (0x01 << _SAP_GSM_SHIFT)
#define _SAP_TETRA_BASE (0x02 << _SAP_GSM_SHIFT)
#define _SAP_SS7_BASE (0x03 << _SAP_GSM_SHIFT)
-/*! primitive header */
+/*! Osmocom primitive header */
struct osmo_prim_hdr {
- unsigned int sap; /*!< Service Access Point */
+ unsigned int sap; /*!< Service Access Point Identifier */
unsigned int primitive; /*!< Primitive number */
enum osmo_prim_operation operation; /*! Primitive Operation */
- struct msgb *msg; /*!< \ref msgb containing associated data */
+ struct msgb *msg; /*!< \ref msgb containing associated data.
+ * Note this can be slightly confusing, as the \ref osmo_prim_hdr
+ * is stored inside a \ref msgb, but then it contains a pointer
+ * back to the msgb. This is to simplify development: You can
+ * pass around a \ref osmo_prim_hdr by itself, and any function
+ * can autonomously resolve the underlying msgb, if needed (e.g.
+ * for \ref msgb_free. */
};
-/*! initialize a primitive header
+/*! Convenience function to initialize a primitive header
* \param[in,out] oph primitive header
* \param[in] sap Service Access Point
* \param[in] primitive Primitive Number