summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-05-19 15:37:34 +0200
committerHarald Welte <laforge@gnumonks.org>2010-05-19 15:37:34 +0200
commitac914b87780f1d0090b1d49733b271bb4bd7ef06 (patch)
tree30d28891e4bf27521df369c48bb4edf36148f8b6
parent7fb05234a7bd8c16eba2cad3074411f86b104c20 (diff)
[GPRS] NS: FR/GRE: Use AF_INET, correctly encode FR DLCI and GRE payload type
-rw-r--r--openbsc/src/gprs/gprs_ns_frgre.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/openbsc/src/gprs/gprs_ns_frgre.c b/openbsc/src/gprs/gprs_ns_frgre.c
index 979442b8..7367b6a6 100644
--- a/openbsc/src/gprs/gprs_ns_frgre.c
+++ b/openbsc/src/gprs/gprs_ns_frgre.c
@@ -169,18 +169,19 @@ int gprs_ns_frgre_sendmsg(struct gprs_nsvc *nsvc, struct msgb *msg)
struct gre_hdr *greh;
/* Build socket address for the packet destionation */
+ daddr.sin_family = AF_INET;
daddr.sin_addr = nsvc->frgre.bts_addr.sin_addr;
daddr.sin_port = IPPROTO_GRE;
/* Prepend the FR header */
- frh = msgb_push(msg, sizeof(frh));
+ frh = msgb_push(msg, 2);
frh[0] = (dlci >> 2) & 0xfc;
- frh[1] = (dlci & 0xf0) | 0x01;
+ frh[1] = ((dlci & 0xf)<<4) | 0x01;
/* Prepend the GRE header */
greh = (struct gre_hdr *) msgb_push(msg, sizeof(*greh));
greh->flags = 0;
- greh->ptype = GRE_PTYPE_FR;
+ greh->ptype = htons(GRE_PTYPE_FR);
rc = sendto(nsi->frgre.fd.fd, msg->data, msg->len, 0,
(struct sockaddr *)&daddr, sizeof(daddr));