aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-05-19 16:48:12 +0200
committerHarald Welte <laforge@gnumonks.org>2010-05-19 16:48:12 +0200
commit94ac58e04efd22afe2a7332eaa6c0005880d8532 (patch)
tree9e9fc8ccbf2d275a279a92d9b0de81c19db779ee
parente72c61cc6f0f1928af66e14f65a6f6658dee93d1 (diff)
[GPRS] NS: properly parse FR DLCI on Rx
-rw-r--r--openbsc/src/gprs/gprs_ns_frgre.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/openbsc/src/gprs/gprs_ns_frgre.c b/openbsc/src/gprs/gprs_ns_frgre.c
index baa7e5217..94f937455 100644
--- a/openbsc/src/gprs/gprs_ns_frgre.c
+++ b/openbsc/src/gprs/gprs_ns_frgre.c
@@ -56,7 +56,7 @@ static struct msgb *read_nsfrgre_msg(struct bsc_fd *bfd, int *error,
struct iphdr *iph;
struct gre_hdr *greh;
uint8_t *frh;
- uint32_t dlci;
+ uint16_t dlci;
if (!msg) {
*error = -ENOMEM;
@@ -114,25 +114,19 @@ static struct msgb *read_nsfrgre_msg(struct bsc_fd *bfd, int *error,
*error = -EIO;
goto out_err;
}
- dlci = (frh[0] & 0xfc << 2);
+ dlci = ((frh[0] & 0xfc) << 2);
if ((frh[1] & 0x0f) != 0x01) {
LOGP(DNS, LOGL_NOTICE, "Unknown second FR octet 0x%02x\n",
frh[1]);
*error = -EIO;
goto out_err;
}
- dlci |= frh[1] >> 4;
- if (dlci > 0xffff) {
- LOGP(DNS, LOGL_ERROR, "We don't support DLCI > 65535 (%u)\n",
- dlci);
- *error = -EINVAL;
- goto out_err;
- }
+ dlci |= (frh[1] >> 4);
msg->l2h = frh+2;
/* Store DLCI in NETWORK BYTEORDER in sockaddr port member */
- saddr->sin_port = htons(dlci & 0xffff);
+ saddr->sin_port = htons(dlci);
return msg;