aboutsummaryrefslogtreecommitdiffstats
path: root/ggsn
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-08-03 00:47:03 +0200
committerHarald Welte <laforge@gnumonks.org>2017-08-11 13:12:04 +0200
commit2e48a44952fdc68eb3e5d3680f944507a4a129c1 (patch)
tree70ea7d0783c3a5ade0083442a08b7cafea087d04 /ggsn
parent72a38b55e38407aa6c6b1cd32f848198ceee1287 (diff)
Support setting TUN device IPv6 address + prefix
As we can now have PDP contexts with IPv6 user IP payload, it is useful to extend the TUN related code to be able to configure the tun device IPv6 address + prefix length Change-Id: I899d21e52d02e0b8384af29ddd489ff19c8f2cf6
Diffstat (limited to 'ggsn')
-rw-r--r--ggsn/ggsn.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 991b54c..05a56ae 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -70,7 +70,7 @@ int end = 0;
int maxfd = 0; /* For select() */
struct in_addr listen_;
-struct in_addr netaddr, destaddr, net; /* Network interface */
+struct in46_addr netaddr, destaddr, net; /* Network interface */
size_t prefixlen;
struct in46_addr dns1, dns2; /* PCO DNS address */
char *ipup, *ipdown; /* Filename of scripts */
@@ -547,16 +547,16 @@ int main(int argc, char **argv)
/* net */
/* Store net as in_addr net and mask */
if (args_info.net_arg) {
- struct in46_addr in46;
- if (ippool_aton(&in46, &prefixlen, args_info.net_arg, 0)) {
+ if (ippool_aton(&net, &prefixlen, args_info.net_arg, 0)) {
SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Invalid network address: %s!",
args_info.net_arg);
exit(1);
}
- net.s_addr = in46.v4.s_addr;
- netaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
- destaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
+ /* default for network + destination address = net + 1 */
+ netaddr = net;
+ in46a_inc(&netaddr);
+ destaddr = netaddr;
} else {
SYS_ERR(DGGSN, LOGL_ERROR, 0,
"Network address must be specified: %s!",
@@ -710,7 +710,7 @@ int main(int argc, char **argv)
maxfd = gsn->fd1u;
/* use GTP kernel module for data packet encapsulation */
- if (gtp_kernel_init(gsn, &net, prefixlen, &args_info) < 0)
+ if (gtp_kernel_init(gsn, &net.v4, prefixlen, &args_info) < 0)
goto err;
gtp_set_cb_data_ind(gsn, encaps_tun);
@@ -735,7 +735,7 @@ int main(int argc, char **argv)
}
DEBUGP(DGGSN, "Setting tun IP address\n");
- if (tun_setaddr(tun, &netaddr, &destaddr, &prefixlen)) {
+ if (tun_setaddr(tun, &netaddr, &destaddr, prefixlen)) {
SYS_ERR(DGGSN, LOGL_ERROR, 0, "Failed to set tun IP address");
exit(1);
}