diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-11-08 14:08:24 +0900 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-11-13 23:57:58 +0900 |
commit | e3c5918aeea8639c8c9a36047fd078ddc4eab4ef (patch) | |
tree | 652a5077a5bfa5e08716c7baa1b204e347b5f0db /ggsn | |
parent | e2a1de5ca5ca1f7c03955fc36d7c62dc9e91d8cb (diff) |
gtp_kernel: Change gtp_kernel_init() function signature
Rather than taking an explicit in_addr, prefix_length and a
string-formatted prefix, let's pass in an in46_prefix and derive
the other representations from it.
Also, don't refer to a no-longer-existing global 'ipup' variable but
add it as a function argument.
Change-Id: Ife87142c86589b4fa4062d62afe3670467548589
Diffstat (limited to 'ggsn')
-rw-r--r-- | ggsn/gtp-kernel.c | 17 | ||||
-rw-r--r-- | ggsn/gtp-kernel.h | 6 |
2 files changed, 16 insertions, 7 deletions
diff --git a/ggsn/gtp-kernel.c b/ggsn/gtp-kernel.c index 916b92f..a5708fc 100644 --- a/ggsn/gtp-kernel.c +++ b/ggsn/gtp-kernel.c @@ -57,9 +57,18 @@ static struct { /* Always forces the kernel to allocate gtp0. If it exists it hits EEXIST */ #define GTP_DEVNAME "gtp0" -int gtp_kernel_init(struct gsn_t *gsn, struct in_addr *net, - size_t prefixlen, const char *net_arg) +int gtp_kernel_init(struct gsn_t *gsn, struct in46_prefix *prefix, const char *ipup) { + struct in_addr net; + const char *net_arg; + + if (prefix->addr.len != 4) { + SYS_ERR(DGGSN, LOGL_ERROR, 0, + "we only support IPv4 in this path :/"); + return -1; + } + net = prefix->addr.v4; + if (gtp_dev_create(-1, GTP_DEVNAME, gsn->fd0, gsn->fd1u) < 0) { SYS_ERR(DGGSN, LOGL_ERROR, 0, "cannot create GTP tunnel device: %s\n", @@ -83,10 +92,12 @@ int gtp_kernel_init(struct gsn_t *gsn, struct in_addr *net, SYS_ERR(DGGSN, LOGL_DEBUG, 0, "Using the GTP kernel mode (genl ID is %d)\n", gtp_nl.genl_id); + net_arg = in46p_ntoa(prefix); + DEBUGP(DGGSN, "Setting route to reach %s via %s\n", net_arg, GTP_DEVNAME); - if (gtp_dev_config(GTP_DEVNAME, net, prefixlen) < 0) { + if (gtp_dev_config(GTP_DEVNAME, &net, prefix->prefixlen) < 0) { SYS_ERR(DGGSN, LOGL_ERROR, 0, "Cannot add route to reach network %s\n", net_arg); diff --git a/ggsn/gtp-kernel.h b/ggsn/gtp-kernel.h index 34fd7bf..ce57994 100644 --- a/ggsn/gtp-kernel.h +++ b/ggsn/gtp-kernel.h @@ -7,8 +7,7 @@ extern int debug; extern char *ipup; #ifdef GTP_KERNEL -int gtp_kernel_init(struct gsn_t *gsn, struct in_addr *net, - size_t prefixlen, const char *net_arg); +int gtp_kernel_init(struct gsn_t *gsn, struct in46_prefix *prefix, const char *ipup); void gtp_kernel_stop(void); int gtp_kernel_tunnel_add(struct pdp_t *pdp); @@ -17,8 +16,7 @@ int gtp_kernel_tunnel_del(struct pdp_t *pdp); int gtp_kernel_enabled(void); #else -static inline int gtp_kernel_init(struct gsn_t *gsn, struct in_addr *net, - size_t prefixlen, const char *net_arg) +static inline int gtp_kernel_init(struct gsn_t *gsn, struct in46_prefix *prefix, const char *ipup) { SYS_ERR(DGGSN, LOGL_ERROR, 0, "ggsn compiled without GTP kernel support!\n"); return -1; |