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
This commit is contained in:
Neels Hofmeyr 2016-11-26 15:21:05 +01:00 committed by Harald Welte
parent c3c28528de
commit 25774b9839
3 changed files with 19 additions and 13 deletions

View File

@ -35,3 +35,6 @@ struct msgb *gsm0480_create_notifySS(const char *text);
int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id);
int gsm0480_wrap_facility(struct msgb *msg);
struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,
uint8_t msg_type);

View File

@ -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;
}

View File

@ -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;
}