jolly has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmocore/+/32934 )
Change subject: Add support for receiving Bter UI frames at lapdm.c
......................................................................
Add support for receiving Bter UI frames at lapdm.c
Similar to support of sending Bter frame, the same rules apply when
receiving them.
Change-Id: If04115884743455c7bf2b2bc5f7e49e74b6ffb60
---
M src/gsm/lapdm.c
1 file changed, 31 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/34/32934/1
diff --git a/src/gsm/lapdm.c b/src/gsm/lapdm.c
index aade046..ec2e661 100644
--- a/src/gsm/lapdm.c
+++ b/src/gsm/lapdm.c
@@ -57,6 +57,7 @@
#define LAPDm_ADDR_SAPI(addr) (((addr) >> 2) & 0x7)
#define LAPDm_ADDR_CR(addr) (((addr) >> 1) & 0x1)
#define LAPDm_ADDR_EA(addr) ((addr) & 0x1)
+#define LAPDm_ADDR_SHORT_L2(addr) ((addr) & 0x3)
/* TS 04.06 Table 3 / Section 3.4.3 */
#define LAPDm_CTRL_I(nr, ns, p) ((((nr) & 0x7) << 5) | (((p) & 0x1)
<< 4) | (((ns) & 0x7) << 1))
@@ -725,15 +726,23 @@
if (mctx.link_id & 0x40) {
/* It was received from network on SACCH */
+ /* A Short L3 header has both bits == 0. */
+ if (LAPDm_ADDR_SHORT_L2(msg->l2h[2]) == 0x0) {
+ mctx.lapdm_fmt = LAPDm_FMT_Bter;
+ n201 = N201_Bter_SACCH;
+ sapi = 0;
+ } else
/* If UI on SACCH sent by BTS, lapdm_fmt must be B4 */
if (le->mode == LAPDM_MODE_MS
&& LAPDm_CTRL_is_U(msg->l2h[3])
&& LAPDm_CTRL_U_BITS(msg->l2h[3]) == 0) {
mctx.lapdm_fmt = LAPDm_FMT_B4;
n201 = N201_B4;
+ sapi = (msg->l2h[0] >> 2) & 7;
} else {
mctx.lapdm_fmt = LAPDm_FMT_B;
n201 = N201_AB_SACCH;
+ sapi = (msg->l2h[0] >> 2) & 7;
}
/* SACCH frames have a two-byte L1 header that
* OsmocomBB L1 doesn't strip */
@@ -741,11 +750,17 @@
mctx.ta_ind = msg->l2h[1];
msgb_pull(msg, 2);
msg->l2h += 2;
- sapi = (msg->l2h[0] >> 2) & 7;
} else {
- mctx.lapdm_fmt = LAPDm_FMT_B;
- n201 = N201_AB_SDCCH;
- sapi = (msg->l2h[0] >> 2) & 7;
+ /* A Short L3 header has both bits == 0. */
+ if (LAPDm_ADDR_SHORT_L2(msg->l2h[2]) == 0x0) {
+ mctx.lapdm_fmt = LAPDm_FMT_Bter;
+ n201 = N201_Bter_SDCCH;
+ sapi = 0;
+ } else {
+ mctx.lapdm_fmt = LAPDm_FMT_B;
+ n201 = N201_AB_SDCCH;
+ sapi = (msg->l2h[0] >> 2) & 7;
+ }
}
}
@@ -838,9 +853,6 @@
rc = lapd_ph_data_ind(msg, &lctx);
break;
case LAPDm_FMT_Bter:
- /* FIXME */
- msgb_free(msg);
- break;
case LAPDm_FMT_Bbis:
/* directly pass up to layer3 */
msg->l3h = msg->l2h;
--
To view, visit
https://gerrit.osmocom.org/c/libosmocore/+/32934
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: If04115884743455c7bf2b2bc5f7e49e74b6ffb60
Gerrit-Change-Number: 32934
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-MessageType: newchange