[gprs] Ensure msgb->l3h points to Layer3 (04.08)
In the old code
l3h = BSSGP, l4h = LLC, cb[gmmh] = 04.08
Now, this has been changed to
cb[bssgph] = BSSGP, cb[llch] = LLC, l3h = 04.08
This way, GSM general 04.08 and GPRS 04.08 code can expect a
GSM 04.08 header at msgb->l3h
diff --git a/openbsc/src/gprs_bssgp.c b/openbsc/src/gprs_bssgp.c
index 4b58213..330d8c8 100644
--- a/openbsc/src/gprs_bssgp.c
+++ b/openbsc/src/gprs_bssgp.c
@@ -200,7 +200,7 @@
}
if (orig_msg)
msgb_tvlv_put(msg, BSSGP_IE_PDU_IN_ERROR,
- msgb_l3len(orig_msg), orig_msg->l3h);
+ msgb_l3len(orig_msg), msgb_bssgph(orig_msg));
return gprs_ns_sendmsg(bssgp_nsi, msg);
}
@@ -257,7 +257,7 @@
/* Uplink unit-data */
static int bssgp_rx_ul_ud(struct msgb *msg, u_int16_t bvci)
{
- struct bssgp_ud_hdr *budh = (struct bssgp_ud_hdr *) msg->l3h;
+ struct bssgp_ud_hdr *budh = (struct bssgp_ud_hdr *) msgb_bssgph(msg);
int data_len = msgb_l3len(msg) - sizeof(*budh);
struct tlv_parsed tp;
int rc;
@@ -280,7 +280,8 @@
static int bssgp_rx_suspend(struct msgb *msg, u_int16_t bvci)
{
- struct bssgp_normal_hdr *bgph = (struct bssgp_normal_hdr *) msg->l3h;
+ struct bssgp_normal_hdr *bgph =
+ (struct bssgp_normal_hdr *) msgb_bssgph(msg);
int data_len = msgb_l3len(msg) - sizeof(*bgph);
struct tlv_parsed tp;
int rc;
@@ -301,7 +302,8 @@
static int bssgp_rx_resume(struct msgb *msg, u_int16_t bvci)
{
- struct bssgp_normal_hdr *bgph = (struct bssgp_normal_hdr *) msg->l3h;
+ struct bssgp_normal_hdr *bgph =
+ (struct bssgp_normal_hdr *) msgb_bssgph(msg);
int data_len = msgb_l3len(msg) - sizeof(*bgph);
struct tlv_parsed tp;
int rc;
@@ -339,10 +341,11 @@
ns_bvci);
}
-/* We expect msg->l3h to point to the BSSGP header */
+/* We expect msgb_bssgph() to point to the BSSGP header */
int gprs_bssgp_rcvmsg(struct msgb *msg, u_int16_t ns_bvci)
{
- struct bssgp_normal_hdr *bgph = (struct bssgp_normal_hdr *) msg->l3h;
+ struct bssgp_normal_hdr *bgph =
+ (struct bssgp_normal_hdr *) msgb_bssgph(msg);
struct tlv_parsed tp;
u_int8_t pdu_type = bgph->pdu_type;
int data_len = msgb_l3len(msg) - sizeof(*bgph);