jolly has uploaded this change for review.

View Change

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 change 32934. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: If04115884743455c7bf2b2bc5f7e49e74b6ffb60
Gerrit-Change-Number: 32934
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>
Gerrit-MessageType: newchange