aboutsummaryrefslogtreecommitdiffstats
path: root/ggsn/ggsn.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-08-03 00:47:03 +0200
committerHarald Welte <laforge@gnumonks.org>2017-08-09 22:15:33 +0200
commit69ba8a611a6e4bf5e92cb84d56f147732e9b2d89 (patch)
tree37a74e40d4e131fb8111697cdc5691a65563b1a9 /ggsn/ggsn.c
parentc2897ac13f6b289e74c001a5cad6b068bf2ca1df (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/ggsn.c')
-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);
}