From f30d983c0803457a82f5716e79ee4a5baffadc10 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 5 May 2014 13:51:33 +0200 Subject: [PATCH 1/2] fixup! introduce ipip tunnel support --- include/netlink/route/link/ipip.h | 28 +-- lib/route/link/ipip.c | 432 +++++++++++++++++++------------------- tests/test-create-ipip.c | 101 +++++---- 3 files changed, 280 insertions(+), 281 deletions(-) diff --git a/include/netlink/route/link/ipip.h b/include/netlink/route/link/ipip.h index 00213a3..ccadb87 100644 --- a/include/netlink/route/link/ipip.h +++ b/include/netlink/route/link/ipip.h @@ -19,26 +19,26 @@ extern "C" { #endif - extern struct rtnl_link *rtnl_link_ipip_alloc(void); - extern int rtnl_link_ipip_add(struct nl_sock *sk, const char *name); + extern struct rtnl_link *rtnl_link_ipip_alloc(void); + extern int rtnl_link_ipip_add(struct nl_sock *sk, const char *name); - extern uint32_t rtnl_link_ipip_get_link(struct rtnl_link *link); - extern int rtnl_link_ipip_set_link(struct rtnl_link *link, uint32_t index); + extern uint32_t rtnl_link_ipip_get_link(struct rtnl_link *link); + extern int rtnl_link_ipip_set_link(struct rtnl_link *link, uint32_t index); - extern int rtnl_link_ipip_set_local(struct rtnl_link *link, uint32_t addr); - extern uint32_t rtnl_link_ipip_get_local(struct rtnl_link *link); + extern int rtnl_link_ipip_set_local(struct rtnl_link *link, uint32_t addr); + extern uint32_t rtnl_link_ipip_get_local(struct rtnl_link *link); - extern int rtnl_link_ipip_set_remote(struct rtnl_link *link, uint32_t addr); - extern uint32_t rtnl_link_ipip_get_remote(struct rtnl_link *link); + extern int rtnl_link_ipip_set_remote(struct rtnl_link *link, uint32_t addr); + extern uint32_t rtnl_link_ipip_get_remote(struct rtnl_link *link); - extern int rtnl_link_ipip_set_ttl(struct rtnl_link *link, uint8_t ttl); - extern uint8_t rtnl_link_ipip_get_ttl(struct rtnl_link *link); + extern int rtnl_link_ipip_set_ttl(struct rtnl_link *link, uint8_t ttl); + extern uint8_t rtnl_link_ipip_get_ttl(struct rtnl_link *link); - extern int rtnl_link_ipip_set_tos(struct rtnl_link *link, uint8_t tos); - extern uint8_t rtnl_link_ipip_get_tos(struct rtnl_link *link); + extern int rtnl_link_ipip_set_tos(struct rtnl_link *link, uint8_t tos); + extern uint8_t rtnl_link_ipip_get_tos(struct rtnl_link *link); - extern int rtnl_link_ipip_set_pmtudisc(struct rtnl_link *link, uint8_t pmtudisc); - extern uint8_t rtnl_link_ipip_get_pmtudisc(struct rtnl_link *link); + extern int rtnl_link_ipip_set_pmtudisc(struct rtnl_link *link, uint8_t pmtudisc); + extern uint8_t rtnl_link_ipip_get_pmtudisc(struct rtnl_link *link); #ifdef __cplusplus } diff --git a/lib/route/link/ipip.c b/lib/route/link/ipip.c index 95862b3..e25912b 100644 --- a/lib/route/link/ipip.c +++ b/lib/route/link/ipip.c @@ -40,217 +40,217 @@ struct ipip_info { - uint8_t ttl; - uint8_t tos; - uint8_t pmtudisc; - uint32_t link; - uint32_t local; - uint32_t remote; - uint32_t ipip_mask; + uint8_t ttl; + uint8_t tos; + uint8_t pmtudisc; + uint32_t link; + uint32_t local; + uint32_t remote; + uint32_t ipip_mask; }; static struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = { - [IFLA_IPTUN_LINK] = { .type = NLA_U32 }, - [IFLA_IPTUN_LOCAL] = { .type = NLA_U32 }, - [IFLA_IPTUN_REMOTE] = { .type = NLA_U32 }, - [IFLA_IPTUN_TTL] = { .type = NLA_U8 }, - [IFLA_IPTUN_TOS] = { .type = NLA_U8 }, - [IFLA_IPTUN_PMTUDISC] = { .type = NLA_U8 }, + [IFLA_IPTUN_LINK] = { .type = NLA_U32 }, + [IFLA_IPTUN_LOCAL] = { .type = NLA_U32 }, + [IFLA_IPTUN_REMOTE] = { .type = NLA_U32 }, + [IFLA_IPTUN_TTL] = { .type = NLA_U8 }, + [IFLA_IPTUN_TOS] = { .type = NLA_U8 }, + [IFLA_IPTUN_PMTUDISC] = { .type = NLA_U8 }, }; static int ipip_alloc(struct rtnl_link *link) { - struct ipip_info *ipip; + struct ipip_info *ipip; - ipip = calloc(1, sizeof(*ipip)); - if (!ipip) - return -NLE_NOMEM; + ipip = calloc(1, sizeof(*ipip)); + if (!ipip) + return -NLE_NOMEM; - link->l_info = ipip; + link->l_info = ipip; - return 0; + return 0; } static int ipip_parse(struct rtnl_link *link, struct nlattr *data, struct nlattr *xstats) { - struct nlattr *tb[IFLA_IPTUN_MAX + 1]; - struct ipip_info *ipip; - int err; + struct nlattr *tb[IFLA_IPTUN_MAX + 1]; + struct ipip_info *ipip; + int err; - NL_DBG(3, "Parsing IPIP link info"); + NL_DBG(3, "Parsing IPIP link info"); - err = nla_parse_nested(tb, IFLA_IPTUN_MAX, data, ipip_policy); - if (err < 0) - goto errout; + err = nla_parse_nested(tb, IFLA_IPTUN_MAX, data, ipip_policy); + if (err < 0) + goto errout; - err = ipip_alloc(link); - if (err < 0) - goto errout; + err = ipip_alloc(link); + if (err < 0) + goto errout; - ipip = link->l_info; + ipip = link->l_info; - if (tb[IFLA_IPTUN_LINK]) { - ipip->link = nla_get_u32(tb[IFLA_IPTUN_LINK]); - ipip->ipip_mask |= IPIP_ATTR_LINK; - } + if (tb[IFLA_IPTUN_LINK]) { + ipip->link = nla_get_u32(tb[IFLA_IPTUN_LINK]); + ipip->ipip_mask |= IPIP_ATTR_LINK; + } - if (tb[IFLA_IPTUN_LOCAL]) { - ipip->local = nla_get_u32(tb[IFLA_IPTUN_LOCAL]); - ipip->ipip_mask |= IPIP_ATTR_LOCAL; - } + if (tb[IFLA_IPTUN_LOCAL]) { + ipip->local = nla_get_u32(tb[IFLA_IPTUN_LOCAL]); + ipip->ipip_mask |= IPIP_ATTR_LOCAL; + } - if (tb[IFLA_IPTUN_REMOTE]) { - ipip->remote = nla_get_u32(tb[IFLA_IPTUN_REMOTE]); - ipip->ipip_mask |= IPIP_ATTR_REMOTE; - } + if (tb[IFLA_IPTUN_REMOTE]) { + ipip->remote = nla_get_u32(tb[IFLA_IPTUN_REMOTE]); + ipip->ipip_mask |= IPIP_ATTR_REMOTE; + } - if (tb[IFLA_IPTUN_TTL]) { - ipip->ttl = nla_get_u8(tb[IFLA_IPTUN_TTL]); - ipip->ipip_mask |= IPIP_ATTR_TTL; - } + if (tb[IFLA_IPTUN_TTL]) { + ipip->ttl = nla_get_u8(tb[IFLA_IPTUN_TTL]); + ipip->ipip_mask |= IPIP_ATTR_TTL; + } - if (tb[IFLA_IPTUN_TOS]) { - ipip->tos = nla_get_u8(tb[IFLA_IPTUN_TOS]); - ipip->ipip_mask |= IPIP_ATTR_TOS; - } + if (tb[IFLA_IPTUN_TOS]) { + ipip->tos = nla_get_u8(tb[IFLA_IPTUN_TOS]); + ipip->ipip_mask |= IPIP_ATTR_TOS; + } - if (tb[IFLA_IPTUN_PMTUDISC]) { - ipip->pmtudisc = nla_get_u8(tb[IFLA_IPTUN_PMTUDISC]); - ipip->ipip_mask |= IPIP_ATTR_PMTUDISC; - } + if (tb[IFLA_IPTUN_PMTUDISC]) { + ipip->pmtudisc = nla_get_u8(tb[IFLA_IPTUN_PMTUDISC]); + ipip->ipip_mask |= IPIP_ATTR_PMTUDISC; + } - err = 0; + err = 0; - errout: - return err; +errout: + return err; } static int ipip_put_attrs(struct nl_msg *msg, struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; - struct nlattr *data; + struct ipip_info *ipip = link->l_info; + struct nlattr *data; - data = nla_nest_start(msg, IFLA_INFO_DATA); - if (!data) - return -NLE_MSGSIZE; + data = nla_nest_start(msg, IFLA_INFO_DATA); + if (!data) + return -NLE_MSGSIZE; - if (ipip->ipip_mask & IPIP_ATTR_LINK) - NLA_PUT_U32(msg, IFLA_IPTUN_LINK, ipip->link); + if (ipip->ipip_mask & IPIP_ATTR_LINK) + NLA_PUT_U32(msg, IFLA_IPTUN_LINK, ipip->link); - if (ipip->ipip_mask & IPIP_ATTR_LOCAL) - NLA_PUT_U32(msg, IFLA_IPTUN_LOCAL, ipip->local); + if (ipip->ipip_mask & IPIP_ATTR_LOCAL) + NLA_PUT_U32(msg, IFLA_IPTUN_LOCAL, ipip->local); - if (ipip->ipip_mask & IPIP_ATTR_REMOTE) - NLA_PUT_U32(msg, IFLA_IPTUN_REMOTE, ipip->remote); + if (ipip->ipip_mask & IPIP_ATTR_REMOTE) + NLA_PUT_U32(msg, IFLA_IPTUN_REMOTE, ipip->remote); - if (ipip->ipip_mask & IPIP_ATTR_TTL) - NLA_PUT_U8(msg, IFLA_IPTUN_TTL, ipip->ttl); + if (ipip->ipip_mask & IPIP_ATTR_TTL) + NLA_PUT_U8(msg, IFLA_IPTUN_TTL, ipip->ttl); - if (ipip->ipip_mask & IPIP_ATTR_TOS) - NLA_PUT_U8(msg, IFLA_IPTUN_TOS, ipip->tos); + if (ipip->ipip_mask & IPIP_ATTR_TOS) + NLA_PUT_U8(msg, IFLA_IPTUN_TOS, ipip->tos); - if (ipip->ipip_mask |= IPIP_ATTR_PMTUDISC) - NLA_PUT_U8(msg, IFLA_IPTUN_PMTUDISC, ipip->pmtudisc); + if (ipip->ipip_mask |= IPIP_ATTR_PMTUDISC) + NLA_PUT_U8(msg, IFLA_IPTUN_PMTUDISC, ipip->pmtudisc); - nla_nest_end(msg, data); + nla_nest_end(msg, data); - nla_put_failure: +nla_put_failure: - return 0; + return 0; } static void ipip_free(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - free(ipip); - link->l_info = NULL; + free(ipip); + link->l_info = NULL; } static void ipip_dump_line(struct rtnl_link *link, struct nl_dump_params *p) { - nl_dump(p, "ipip : %s", link->l_name); + nl_dump(p, "ipip : %s", link->l_name); } static void ipip_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { - struct ipip_info *ipip = link->l_info; - char *name, addr[INET_ADDRSTRLEN]; - - if (ipip->ipip_mask & IPIP_ATTR_LINK) { - nl_dump(p, " link "); - name = rtnl_link_get_name(link); - if (name) - nl_dump_line(p, "%s\n", name); - else - nl_dump_line(p, "%u\n", ipip->link); - } - - if (ipip->ipip_mask & IPIP_ATTR_LOCAL) { - nl_dump(p, " local "); - if(inet_ntop(AF_INET, &ipip->local, addr, sizeof(addr))) - nl_dump_line(p, "%s\n", addr); - else - nl_dump_line(p, "%#x\n", ntohs(ipip->local)); - } - - if (ipip->ipip_mask & IPIP_ATTR_REMOTE) { - nl_dump(p, " remote "); - if(inet_ntop(AF_INET, &ipip->remote, addr, sizeof(addr))) - nl_dump_line(p, "%s\n", addr); - else - nl_dump_line(p, "%#x\n", ntohs(ipip->remote)); - } - - if (ipip->ipip_mask & IPIP_ATTR_TTL) { - nl_dump(p, " ttl "); - nl_dump_line(p, "%u\n", ipip->ttl); - } - - if (ipip->ipip_mask & IPIP_ATTR_TOS) { - nl_dump(p, " tos "); - nl_dump_line(p, "%u\n", ipip->tos); - } - - if (ipip->ipip_mask & IPIP_ATTR_PMTUDISC) { - nl_dump(p, " pmtudisc "); - nl_dump_line(p, "enabled (%#x)\n", ipip->pmtudisc); - } + struct ipip_info *ipip = link->l_info; + char *name, addr[INET_ADDRSTRLEN]; + + if (ipip->ipip_mask & IPIP_ATTR_LINK) { + nl_dump(p, " link "); + name = rtnl_link_get_name(link); + if (name) + nl_dump_line(p, "%s\n", name); + else + nl_dump_line(p, "%u\n", ipip->link); + } + + if (ipip->ipip_mask & IPIP_ATTR_LOCAL) { + nl_dump(p, " local "); + if(inet_ntop(AF_INET, &ipip->local, addr, sizeof(addr))) + nl_dump_line(p, "%s\n", addr); + else + nl_dump_line(p, "%#x\n", ntohs(ipip->local)); + } + + if (ipip->ipip_mask & IPIP_ATTR_REMOTE) { + nl_dump(p, " remote "); + if(inet_ntop(AF_INET, &ipip->remote, addr, sizeof(addr))) + nl_dump_line(p, "%s\n", addr); + else + nl_dump_line(p, "%#x\n", ntohs(ipip->remote)); + } + + if (ipip->ipip_mask & IPIP_ATTR_TTL) { + nl_dump(p, " ttl "); + nl_dump_line(p, "%u\n", ipip->ttl); + } + + if (ipip->ipip_mask & IPIP_ATTR_TOS) { + nl_dump(p, " tos "); + nl_dump_line(p, "%u\n", ipip->tos); + } + + if (ipip->ipip_mask & IPIP_ATTR_PMTUDISC) { + nl_dump(p, " pmtudisc "); + nl_dump_line(p, "enabled (%#x)\n", ipip->pmtudisc); + } } static int ipip_clone(struct rtnl_link *dst, struct rtnl_link *src) { - struct ipip_info *ipip_dst, *ipip_src = src->l_info; - int err; + struct ipip_info *ipip_dst, *ipip_src = src->l_info; + int err; - dst->l_info = NULL; + dst->l_info = NULL; - err = rtnl_link_set_type(dst, "ipip"); - if (err < 0) - return err; + err = rtnl_link_set_type(dst, "ipip"); + if (err < 0) + return err; - ipip_dst = dst->l_info; + ipip_dst = dst->l_info; - if (!ipip_dst || !ipip_src) - BUG(); + if (!ipip_dst || !ipip_src) + BUG(); - memcpy(ipip_dst, ipip_src, sizeof(struct ipip_info)); + memcpy(ipip_dst, ipip_src, sizeof(struct ipip_info)); - return 0; + return 0; } static struct rtnl_link_info_ops ipip_info_ops = { - .io_name = "ipip", - .io_alloc = ipip_alloc, - .io_parse = ipip_parse, - .io_dump = { - [NL_DUMP_LINE] = ipip_dump_line, - [NL_DUMP_DETAILS] = ipip_dump_details, - }, - .io_clone = ipip_clone, - .io_put_attrs = ipip_put_attrs, - .io_free = ipip_free, + .io_name = "ipip", + .io_alloc = ipip_alloc, + .io_parse = ipip_parse, + .io_dump = { + [NL_DUMP_LINE] = ipip_dump_line, + [NL_DUMP_DETAILS] = ipip_dump_details, + }, + .io_clone = ipip_clone, + .io_put_attrs = ipip_put_attrs, + .io_free = ipip_free, }; #define IS_IPIP_LINK_ASSERT(link) \ @@ -261,20 +261,20 @@ static struct rtnl_link_info_ops ipip_info_ops = { struct rtnl_link *rtnl_link_ipip_alloc(void) { - struct rtnl_link *link; - int err; + struct rtnl_link *link; + int err; - link = rtnl_link_alloc(); - if (!link) - return NULL; + link = rtnl_link_alloc(); + if (!link) + return NULL; - err = rtnl_link_set_type(link, "ipip"); - if (err < 0) { - rtnl_link_put(link); - return NULL; - } + err = rtnl_link_set_type(link, "ipip"); + if (err < 0) { + rtnl_link_put(link); + return NULL; + } - return link; + return link; } /** @@ -285,7 +285,7 @@ struct rtnl_link *rtnl_link_ipip_alloc(void) */ int rtnl_link_is_ipip(struct rtnl_link *link) { - return link->l_info_ops && !strcmp(link->l_info_ops->io_name, "ipip"); + return link->l_info_ops && !strcmp(link->l_info_ops->io_name, "ipip"); } /** @@ -298,20 +298,20 @@ int rtnl_link_is_ipip(struct rtnl_link *link) */ int rtnl_link_ipip_add(struct nl_sock *sk, const char *name) { - struct rtnl_link *link; - int err; + struct rtnl_link *link; + int err; - link = rtnl_link_ipip_alloc(); - if (!link) - return -NLE_NOMEM; + link = rtnl_link_ipip_alloc(); + if (!link) + return -NLE_NOMEM; - if(name) - rtnl_link_set_name(link, name); + if(name) + rtnl_link_set_name(link, name); - err = rtnl_link_add(sk, link, NLM_F_CREATE); - rtnl_link_put(link); + err = rtnl_link_add(sk, link, NLM_F_CREATE); + rtnl_link_put(link); - return err; + return err; } /** @@ -323,14 +323,14 @@ int rtnl_link_ipip_add(struct nl_sock *sk, const char *name) */ int rtnl_link_ipip_set_link(struct rtnl_link *link, uint32_t index) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->link = index; - ipip->ipip_mask |= IPIP_ATTR_LINK; + ipip->link = index; + ipip->ipip_mask |= IPIP_ATTR_LINK; - return 0; + return 0; } /** @@ -341,11 +341,11 @@ int rtnl_link_ipip_set_link(struct rtnl_link *link, uint32_t index) */ uint32_t rtnl_link_ipip_get_link(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->link; + return ipip->link; } /** @@ -357,14 +357,14 @@ uint32_t rtnl_link_ipip_get_link(struct rtnl_link *link) */ int rtnl_link_ipip_set_local(struct rtnl_link *link, uint32_t addr) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->local = addr; - ipip->ipip_mask |= IPIP_ATTR_LOCAL; + ipip->local = addr; + ipip->ipip_mask |= IPIP_ATTR_LOCAL; - return 0; + return 0; } /** @@ -375,11 +375,11 @@ int rtnl_link_ipip_set_local(struct rtnl_link *link, uint32_t addr) */ uint32_t rtnl_link_ipip_get_local(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->local; + return ipip->local; } /** @@ -391,14 +391,14 @@ uint32_t rtnl_link_ipip_get_local(struct rtnl_link *link) */ int rtnl_link_ipip_set_remote(struct rtnl_link *link, uint32_t addr) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->remote = addr; - ipip->ipip_mask |= IPIP_ATTR_REMOTE; + ipip->remote = addr; + ipip->ipip_mask |= IPIP_ATTR_REMOTE; - return 0; + return 0; } /** @@ -409,11 +409,11 @@ int rtnl_link_ipip_set_remote(struct rtnl_link *link, uint32_t addr) */ uint32_t rtnl_link_ipip_get_remote(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->remote; + return ipip->remote; } /** @@ -425,14 +425,14 @@ uint32_t rtnl_link_ipip_get_remote(struct rtnl_link *link) */ int rtnl_link_ipip_set_ttl(struct rtnl_link *link, uint8_t ttl) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->ttl = ttl; - ipip->ipip_mask |= IPIP_ATTR_TTL; + ipip->ttl = ttl; + ipip->ipip_mask |= IPIP_ATTR_TTL; - return 0; + return 0; } /** @@ -443,11 +443,11 @@ int rtnl_link_ipip_set_ttl(struct rtnl_link *link, uint8_t ttl) */ uint8_t rtnl_link_ipip_get_ttl(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->ttl; + return ipip->ttl; } /** @@ -459,14 +459,14 @@ uint8_t rtnl_link_ipip_get_ttl(struct rtnl_link *link) */ int rtnl_link_ipip_set_tos(struct rtnl_link *link, uint8_t tos) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->tos = tos; - ipip->ipip_mask |= IPIP_ATTR_TOS; + ipip->tos = tos; + ipip->ipip_mask |= IPIP_ATTR_TOS; - return 0; + return 0; } /** @@ -477,11 +477,11 @@ int rtnl_link_ipip_set_tos(struct rtnl_link *link, uint8_t tos) */ uint8_t rtnl_link_ipip_get_tos(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->tos; + return ipip->tos; } /** @@ -493,14 +493,14 @@ uint8_t rtnl_link_ipip_get_tos(struct rtnl_link *link) */ int rtnl_link_ipip_set_pmtudisc(struct rtnl_link *link, uint8_t pmtudisc) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - ipip->pmtudisc = pmtudisc; - ipip->ipip_mask |= IPIP_ATTR_PMTUDISC; + ipip->pmtudisc = pmtudisc; + ipip->ipip_mask |= IPIP_ATTR_PMTUDISC; - return 0; + return 0; } /** @@ -511,19 +511,19 @@ int rtnl_link_ipip_set_pmtudisc(struct rtnl_link *link, uint8_t pmtudisc) */ uint8_t rtnl_link_ipip_get_pmtudisc(struct rtnl_link *link) { - struct ipip_info *ipip = link->l_info; + struct ipip_info *ipip = link->l_info; - IS_IPIP_LINK_ASSERT(link); + IS_IPIP_LINK_ASSERT(link); - return ipip->pmtudisc; + return ipip->pmtudisc; } static void __init ipip_init(void) { - rtnl_link_register_info(&ipip_info_ops); + rtnl_link_register_info(&ipip_info_ops); } static void __exit ipip_exit(void) { - rtnl_link_unregister_info(&ipip_info_ops); + rtnl_link_unregister_info(&ipip_info_ops); } diff --git a/tests/test-create-ipip.c b/tests/test-create-ipip.c index 689e1f0..f064e79 100644 --- a/tests/test-create-ipip.c +++ b/tests/test-create-ipip.c @@ -5,55 +5,54 @@ int main(int argc, char *argv[]) { - struct nl_cache *link_cache; - struct rtnl_link *link; - struct in_addr addr; - struct nl_sock *sk; - int err, if_index; - - sk = nl_socket_alloc(); - if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) { - nl_perror(err, "Unable to connect socket"); - return err; - } - - err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache); - if ( err < 0) { - nl_perror(err, "Unable to allocate cache"); - return err; - } - - if_index = rtnl_link_name2i(link_cache, "eno16777736"); - if (!if_index) { - fprintf(stderr, "Unable to lookup eno16777736"); - return -1; - } - - link = rtnl_link_ipip_alloc(); - if(!link) { - nl_perror(err, "Unable to allocate link"); - return -1; - - } - - rtnl_link_set_name(link, "ipip-tun"); - rtnl_link_ipip_set_link(link, if_index); - - inet_pton(AF_INET, "192.168.254.12", &addr.s_addr); - rtnl_link_ipip_set_local(link, addr.s_addr); - - inet_pton(AF_INET, "192.168.254.13", &addr.s_addr); - rtnl_link_ipip_set_remote(link, addr.s_addr); - - rtnl_link_ipip_set_ttl(link, 64); - err = rtnl_link_add(sk, link, NLM_F_CREATE); - if (err < 0) { - nl_perror(err, "Unable to add link"); - return err; - } - - rtnl_link_put(link); - nl_close(sk); - - return 0; + struct nl_cache *link_cache; + struct rtnl_link *link; + struct in_addr addr; + struct nl_sock *sk; + int err, if_index; + + sk = nl_socket_alloc(); + if ((err = nl_connect(sk, NETLINK_ROUTE)) < 0) { + nl_perror(err, "Unable to connect socket"); + return err; + } + + err = rtnl_link_alloc_cache(sk, AF_UNSPEC, &link_cache); + if ( err < 0) { + nl_perror(err, "Unable to allocate cache"); + return err; + } + + if_index = rtnl_link_name2i(link_cache, "eno16777736"); + if (!if_index) { + fprintf(stderr, "Unable to lookup eno16777736"); + return -1; + } + + link = rtnl_link_ipip_alloc(); + if(!link) { + nl_perror(err, "Unable to allocate link"); + return -1; + } + + rtnl_link_set_name(link, "ipip-tun"); + rtnl_link_ipip_set_link(link, if_index); + + inet_pton(AF_INET, "192.168.254.12", &addr.s_addr); + rtnl_link_ipip_set_local(link, addr.s_addr); + + inet_pton(AF_INET, "192.168.254.13", &addr.s_addr); + rtnl_link_ipip_set_remote(link, addr.s_addr); + + rtnl_link_ipip_set_ttl(link, 64); + err = rtnl_link_add(sk, link, NLM_F_CREATE); + if (err < 0) { + nl_perror(err, "Unable to add link"); + return err; + } + + rtnl_link_put(link); + nl_close(sk); + + return 0; } -- 1.9.0