summaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-05-19 15:38:10 +0200
committerHarald Welte <laforge@gnumonks.org>2010-05-19 15:38:10 +0200
commitba4c666a9f50efeaabb546629de320bdeb134500 (patch)
treef2666c367b06e3fff573f35816ab98b33f08acce /openbsc
parentac914b87780f1d0090b1d49733b271bb4bd7ef06 (diff)
[GPRS] NS: Make sure we allocate NS packet with headroom for FR/GRE
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/gprs_ns.h6
-rw-r--r--openbsc/src/gprs/gprs_ns.c12
2 files changed, 11 insertions, 7 deletions
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);