diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-06-02 23:17:33 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-06-02 23:17:33 +0200 |
commit | 61ca7ce0069739f9da3b58967988a745a7b65bc5 (patch) | |
tree | 243172722eb41e1d58cabe3857fedf307be0cadc /openbsc/src/gprs/sgsn_libgtp.c | |
parent | 5cc2bc37a7d5822c70e3a4654c22330ed789cc0c (diff) |
[GPRS] SGSN: use correct length+data for GSN_ADDRESS
We have to copy the sin_addr.s_addr, rather than the entire sin_addr. The
latter results in the destination interpreting it as an IPv6 address, as
the only differentiator between IPv4 and IPv6 is the size of the payload
of this IE.
Diffstat (limited to 'openbsc/src/gprs/sgsn_libgtp.c')
-rw-r--r-- | openbsc/src/gprs/sgsn_libgtp.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/openbsc/src/gprs/sgsn_libgtp.c b/openbsc/src/gprs/sgsn_libgtp.c index f42ea8c7a..37ffd8985 100644 --- a/openbsc/src/gprs/sgsn_libgtp.c +++ b/openbsc/src/gprs/sgsn_libgtp.c @@ -163,14 +163,14 @@ struct sgsn_pdp_ctx *sgsn_create_pdp_ctx(struct sgsn_ggsn_ctx *ggsn, pdp->qos_req.l); /* SGSN address for control plane */ - pdp->gsnlc.l = sizeof(sgsn->cfg.gtp_listenaddr); - memcpy(pdp->gsnlc.v, &sgsn->cfg.gtp_listenaddr, - sizeof(sgsn->cfg.gtp_listenaddr)); + pdp->gsnlc.l = sizeof(sgsn->cfg.gtp_listenaddr.sin_addr); + memcpy(pdp->gsnlc.v, &sgsn->cfg.gtp_listenaddr.sin_addr, + sizeof(sgsn->cfg.gtp_listenaddr.sin_addr)); /* SGSN address for user plane */ - pdp->gsnlu.l = sizeof(sgsn->cfg.gtp_listenaddr); - memcpy(pdp->gsnlu.v, &sgsn->cfg.gtp_listenaddr, - sizeof(sgsn->cfg.gtp_listenaddr)); + pdp->gsnlu.l = sizeof(sgsn->cfg.gtp_listenaddr.sin_addr); + memcpy(pdp->gsnlu.v, &sgsn->cfg.gtp_listenaddr.sin_addr, + sizeof(sgsn->cfg.gtp_listenaddr.sin_addr)); /* change pdp state to 'requested' */ pctx->state = PDP_STATE_CR_REQ; |