summaryrefslogtreecommitdiffstats
path: root/src/gsm
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-11-26 15:21:05 +0100
committerHarald Welte <laforge@gnumonks.org>2016-12-01 15:54:34 +0000
commit25774b9839a9842affc6fef925166b3b9481b466 (patch)
treefa6db0b297a1aa26b7626d8c441af232c1a1c3fa /src/gsm
parentc3c28528de78fd5d50c3a141c2176c0da5dd7075 (diff)
gsm0480: code dup: introduce and use gsm0480_l3hdr_push()
Add function gsm0480_l3hdr_push() to push a struct gsm48_hdr to the start of a msgb. Use in gsm0480.c and gsm0411_utils.c. Further callers of the new function will follow in openbsc as well as another libosmocore patch for ussd. Change-Id: I54fce6053ab8362015686fe22dbcd38bf1366700
Diffstat (limited to 'src/gsm')
-rw-r--r--src/gsm/gsm0411_utils.c9
-rw-r--r--src/gsm/gsm0480.c20
2 files changed, 16 insertions, 13 deletions
diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c
index af57963c..5d18b120 100644
--- a/src/gsm/gsm0411_utils.c
+++ b/src/gsm/gsm0411_utils.c
@@ -315,12 +315,7 @@ int gsm411_push_rp_header(struct msgb *msg, uint8_t rp_msg_type,
int gsm411_push_cp_header(struct msgb *msg, uint8_t proto, uint8_t trans,
uint8_t msg_type)
{
- struct gsm48_hdr *gh;
-
- gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
- /* Outgoing needs the highest bit set */
- gh->proto_discr = proto | (trans << 4);
- gh->msg_type = msg_type;
-
+ /* Outgoing proto_discr needs the highest bit set */
+ gsm0480_l3hdr_push(msg, proto | (trans << 4), msg_type);
return 0;
}
diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c
index d628d922..cab4d01b 100644
--- a/src/gsm/gsm0480.c
+++ b/src/gsm/gsm0480.c
@@ -486,7 +486,6 @@ static int parse_ss_for_bs_req(const uint8_t *ss_req_data,
struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text)
{
struct msgb *msg;
- struct gsm48_hdr *gh;
uint8_t *ptr8;
int response_len;
@@ -525,10 +524,19 @@ struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const
msgb_wrap_with_TL(msg, GSM0480_IE_FACILITY);
/* And finally pre-pend the L3 header */
- gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
- gh->proto_discr = GSM48_PDISC_NC_SS | trans_id
- | (1<<7); /* TI direction = 1 */
- gh->msg_type = GSM0480_MTYPE_RELEASE_COMPLETE;
-
+ gsm0480_l3hdr_push(msg,
+ GSM48_PDISC_NC_SS | trans_id
+ | (1<<7) /* TI direction = 1 */,
+ GSM0480_MTYPE_RELEASE_COMPLETE);
return msg;
}
+
+struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,
+ uint8_t msg_type)
+{
+ struct gsm48_hdr *gh;
+ gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));
+ gh->proto_discr = proto_discr;
+ gh->msg_type = msg_type;
+ return gh;
+}