From ba4c666a9f50efeaabb546629de320bdeb134500 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 19 May 2010 15:38:10 +0200 Subject: [GPRS] NS: Make sure we allocate NS packet with headroom for FR/GRE --- openbsc/include/openbsc/gprs_ns.h | 6 +++++- openbsc/src/gprs/gprs_ns.c | 12 ++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'openbsc') diff --git a/openbsc/include/openbsc/gprs_ns.h b/openbsc/include/openbsc/gprs_ns.h index 1ec66316..03603bc8 100644 --- a/openbsc/include/openbsc/gprs_ns.h +++ b/openbsc/include/openbsc/gprs_ns.h @@ -223,6 +223,10 @@ int gprs_nsvc_reset(struct gprs_nsvc *nsvc, uint8_t cause); int gprs_ns_vty_init(struct gprs_ns_inst *nsi); #define NS_ALLOC_SIZE 1024 - +#define NS_ALLOC_HEADROOM 20 +static inline struct msgb *gprs_ns_msgb_alloc(void) +{ + return msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM, "GPRS/NS"); +} #endif diff --git a/openbsc/src/gprs/gprs_ns.c b/openbsc/src/gprs/gprs_ns.c index 8b226b89..9d0766c6 100644 --- a/openbsc/src/gprs/gprs_ns.c +++ b/openbsc/src/gprs/gprs_ns.c @@ -232,7 +232,7 @@ static int gprs_ns_tx(struct gprs_nsvc *nsvc, struct msgb *msg) static int gprs_ns_tx_simple(struct gprs_nsvc *nsvc, uint8_t pdu_type) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); struct gprs_ns_hdr *nsh; log_set_context(BSC_CTX_NSVC, nsvc); @@ -250,7 +250,7 @@ static int gprs_ns_tx_simple(struct gprs_nsvc *nsvc, uint8_t pdu_type) int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); struct gprs_ns_hdr *nsh; uint16_t nsvci = htons(nsvc->nsvci); uint16_t nsei = htons(nsvc->nsei); @@ -278,7 +278,7 @@ int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause) int gprs_ns_tx_status(struct gprs_nsvc *nsvc, uint8_t cause, uint16_t bvci, struct msgb *orig_msg) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); struct gprs_ns_hdr *nsh; uint16_t nsvci = htons(nsvc->nsvci); @@ -326,7 +326,7 @@ int gprs_ns_tx_status(struct gprs_nsvc *nsvc, uint8_t cause, int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); struct gprs_ns_hdr *nsh; uint16_t nsvci = htons(nsvc->nsvci); @@ -465,7 +465,7 @@ static void gprs_ns_timer_cb(void *data) /* Section 9.2.6 */ static int gprs_ns_tx_reset_ack(struct gprs_nsvc *nsvc) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "GPRS/NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); struct gprs_ns_hdr *nsh; uint16_t nsvci, nsei; @@ -823,7 +823,7 @@ void gprs_ns_destroy(struct gprs_ns_inst *nsi) static struct msgb *read_nsip_msg(struct bsc_fd *bfd, int *error, struct sockaddr_in *saddr) { - struct msgb *msg = msgb_alloc(NS_ALLOC_SIZE, "Abis/IP/GPRS-NS"); + struct msgb *msg = gprs_ns_msgb_alloc(); int ret = 0; socklen_t saddr_len = sizeof(*saddr); -- cgit v1.2.3