gsm0808: Add a method to create a new DTAP message with a msgb

This commit is contained in:
Holger Hans Peter Freyther 2010-11-04 12:26:06 +01:00
parent 9d92f0e12c
commit c25c668106
2 changed files with 24 additions and 0 deletions

View File

@ -37,6 +37,7 @@ struct msgb *gsm0808_create_assignment_completed(uint8_t rr_cause,
uint8_t speech_mode);
struct msgb *gsm0808_create_assignment_failure(uint8_t cause, uint8_t *rr_cause);
struct msgb *gsm0808_create_dtap(struct msgb *msg, uint8_t link_id);
void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id);
const struct tlv_definition *gsm0808_att_tlvdef();

View File

@ -292,6 +292,29 @@ void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id)
hh[2] = msg->len - 3;
}
struct msgb *gsm0808_create_dtap(struct msgb *msg_l3, uint8_t link_id)
{
struct dtap_header *header;
uint8_t *data;
struct msgb *msg = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM,
"dtap");
if (!msg)
return NULL;
/* DTAP header */
msg->l3h = msgb_put(msg, sizeof(*header));
header = (struct dtap_header *) &msg->l3h[0];
header->type = BSSAP_MSG_DTAP;
header->link_id = link_id;
header->length = msgb_l3len(msg_l3);
/* Payload */
data = msgb_put(msg, header->length);
memcpy(data, msg_l3->l3h, header->length);
return msg;
}
static const struct tlv_definition bss_att_tlvdef = {
.def = {
[GSM0808_IE_IMSI] = { TLV_TYPE_TLV },