[PATCH] libosmocore[master]: Add EGPRS RLC/MAC headers from 3GPP TS 04.60

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Tom Tsou gerrit-no-reply at lists.osmocom.org
Fri Jul 8 00:10:09 UTC 2016


Review at  https://gerrit.osmocom.org/489

Add EGPRS RLC/MAC headers from 3GPP TS 04.60

For shared use by osmo-pcu and osmo-bts-trx.

Change-Id: I500cdc87cd30faf36c8cd92d234642f809c8f2aa
---
M include/Makefile.am
A include/osmocom/gprs/protocol/gsm_04_60.h
2 files changed, 209 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/89/489/1

diff --git a/include/Makefile.am b/include/Makefile.am
index 7aa9c27..d4e5ca0 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -51,6 +51,7 @@
                        osmocom/gprs/gprs_msgb.h \
                        osmocom/gprs/gprs_ns.h \
                        osmocom/gprs/gprs_ns_frgre.h \
+                       osmocom/gprs/protocol/gsm_04_60.h \
                        osmocom/gprs/protocol/gsm_08_16.h \
                        osmocom/gprs/protocol/gsm_08_18.h \
                        osmocom/gsm/a5.h \
diff --git a/include/osmocom/gprs/protocol/gsm_04_60.h b/include/osmocom/gprs/protocol/gsm_04_60.h
new file mode 100644
index 0000000..42028bd
--- /dev/null
+++ b/include/osmocom/gprs/protocol/gsm_04_60.h
@@ -0,0 +1,208 @@
+#pragma once
+
+/* General Packet Radio Service (GPRS)
+ * Radio Link Control / Medium Access Control (RLC/MAC) protocol
+ * 3GPP TS 04.60 version 8.27.0 Release 1999
+ */
+
+#include <stdint.h>
+
+#if OSMO_IS_LITTLE_ENDIAN == 1
+/* TS 04.60  10.3a.4.1.1 */
+struct gprs_rlc_ul_header_egprs_1 {
+	uint8_t r:1,
+		 si:1,
+		 cv:4,
+		 tfi_hi:2;
+	uint8_t tfi_lo:3,
+		 bsn1_hi:5;
+	uint8_t bsn1_lo:6,
+		 bsn2_hi:2;
+	uint8_t bsn2_lo:8;
+	uint8_t cps:5,
+		 rsb:1,
+		 pi:1,
+		 spare_hi:1;
+	uint8_t spare_lo:6,
+		 dummy:2;
+} __attribute__ ((packed));
+
+/* TS 04.60  10.3a.4.2.1 */
+struct gprs_rlc_ul_header_egprs_2 {
+	uint8_t r:1,
+		 si:1,
+		 cv:4,
+		 tfi_hi:2;
+	uint8_t tfi_lo:3,
+		 bsn1_hi:5;
+	uint8_t bsn1_lo:6,
+		 cps_hi:2;
+	uint8_t cps_lo:1,
+		 rsb:1,
+		 pi:1,
+		 spare_hi:5;
+	uint8_t spare_lo:5,
+		 dummy:3;
+} __attribute__ ((packed));
+
+/* TS 04.60  10.3a.4.3.1 */
+struct gprs_rlc_ul_header_egprs_3 {
+	uint8_t r:1,
+		 si:1,
+		 cv:4,
+		 tfi_hi:2;
+	uint8_t tfi_lo:3,
+		 bsn1_hi:5;
+	uint8_t bsn1_lo:6,
+		 cps_hi:2;
+	uint8_t cps_lo:2,
+		 spb:2,
+		 rsb:1,
+		 pi:1,
+		 spare:1,
+		 dummy:1;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_1 {
+	uint8_t usf:3,
+		 es_p:2,
+		 rrbp:2,
+		 tfi_hi:1;
+	uint8_t tfi_lo:4,
+		 pr:2,
+		 bsn1_hi:2;
+	uint8_t bsn1_mid:8;
+	uint8_t bsn1_lo:1,
+		 bsn2_hi:7;
+	uint8_t bsn2_lo:3,
+		 cps:5;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_2 {
+	uint8_t usf:3,
+		 es_p:2,
+		 rrbp:2,
+		 tfi_hi:1;
+	uint8_t tfi_lo:4,
+		 pr:2,
+		 bsn1_hi:2;
+	uint8_t bsn1_mid:8;
+	uint8_t bsn1_lo:1,
+		 cps:3,
+		 dummy:4;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_3 {
+	uint8_t usf:3,
+		 es_p:2,
+		 rrbp:2,
+		 tfi_hi:1;
+	uint8_t tfi_lo:4,
+		 pr:2,
+		 bsn1_hi:2;
+	uint8_t bsn1_mid:8;
+	uint8_t bsn1_lo:1,
+		 cps:4,
+		 spb:2,
+		 dummy:1;
+} __attribute__ ((packed));
+#else
+/* TS 04.60  10.3a.4.1.1 */
+struct gprs_rlc_ul_header_egprs_1 {
+	uint8_t tfi_hi:2,
+		 cv:4,
+		 si:1,
+		 r:1;
+	uint8_t bsn1_hi:5,
+		tfi_lo:3;
+	uint8_t bsn2_hi:2,
+		bsn1_lo:6;
+	uint8_t bsn2_lo:8;
+	uint8_t spare_hi:1,
+		pi:1,
+		rsb:1,
+		cps:5;
+	uint8_t dummy:2,
+		spare_lo:6;
+} __attribute__ ((packed));
+
+/* TS 04.60  10.3a.4.2.1 */
+struct gprs_rlc_ul_header_egprs_2 {
+	uint8_t tfi_hi:2,
+		 cv:4,
+		 si:1,
+		 r:1;
+	uint8_t bsn1_hi:5,
+		 tfi_lo:3;
+	uint8_t cps_hi:2,
+		 bsn1_lo:6;
+	uint8_t spare_hi:5,
+		 pi:1,
+		 rsb:1,
+		 cps_lo:1;
+	uint8_t dummy:3,
+		 spare_lo:5;
+} __attribute__ ((packed));
+
+/* TS 04.60  10.3a.4.3.1 */
+struct gprs_rlc_ul_header_egprs_3 {
+	uint8_t tfi_hi:2,
+		 cv:4,
+		 si:1,
+		 r:1;
+	uint8_t bsn1_hi:5,
+		 tfi_lo:3;
+	uint8_t cps_hi:2,
+		 bsn1_lo:6;
+	uint8_t dummy:1,
+		 spare:1,
+		 pi:1,
+		 rsb:1,
+		 spb:2,
+		 cps_lo:2;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_1 {
+	uint8_t tfi_hi:1,
+		 rrbp:2,
+		 es_p:2,
+		 usf:3;
+	uint8_t bsn1_hi:2,
+		 pr:2,
+		 tfi_lo:4;
+	uint8_t bsn1_mid:8;
+	uint8_t bsn2_hi:7,
+		 bsn1_lo:1;
+	uint8_t cps:5,
+		 bsn2_lo:3;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_2 {
+	uint8_t tfi_hi:1,
+		 rrbp:2,
+		 es_p:2,
+		 usf:3;
+	uint8_t bsn1_hi:2,
+		 pr:2,
+		 tfi_lo:4;
+	uint8_t bsn1_mid:8;
+	uint8_t dummy:4,
+		 cps:3,
+		 bsn1_lo:1;
+} __attribute__ ((packed));
+
+struct gprs_rlc_dl_header_egprs_3 {
+	uint8_t tfi_hi:1,
+		 rrbp:2,
+		 es_p:2,
+		 usf:3;
+	uint8_t bsn1_hi:2,
+		 pr:2,
+		 tfi_lo:4;
+	uint8_t bsn1_mid:8;
+	uint8_t dummy:1,
+		 spb:2,
+		 cps:4,
+		 bsn1_lo:1;
+} __attribute__ ((packed));
+#endif

-- 
To view, visit https://gerrit.osmocom.org/489
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I500cdc87cd30faf36c8cd92d234642f809c8f2aa
Gerrit-PatchSet: 1
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Tom Tsou <tom at tsou.cc>



More information about the gerrit-log mailing list