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
diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c
index d628d92..cab4d01 100644
--- a/src/gsm/gsm0480.c
+++ b/src/gsm/gsm0480.c
@@ -486,7 +486,6 @@
 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 @@
 	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;
+}