diff --git a/lib/route/link/geneve.c b/lib/route/link/geneve.c index 61dd1f1fe..cfd9e77f0 100644 --- a/lib/route/link/geneve.c +++ b/lib/route/link/geneve.c @@ -294,7 +294,7 @@ static int geneve_put_attrs(struct nl_msg *msg, struct rtnl_link *link) NLA_PUT_U32(msg, IFLA_GENEVE_LABEL, geneve->label); if (geneve->mask & GENEVE_ATTR_PORT) - NLA_PUT_U32(msg, IFLA_GENEVE_PORT, geneve->port); + NLA_PUT_U16(msg, IFLA_GENEVE_PORT, geneve->port); if (geneve->mask & GENEVE_ATTR_UDP_CSUM) NLA_PUT_U8(msg, IFLA_GENEVE_UDP_CSUM, geneve->udp_csum); diff --git a/lib/route/link/ip6gre.c b/lib/route/link/ip6gre.c index 51d4609cd..530a48a51 100644 --- a/lib/route/link/ip6gre.c +++ b/lib/route/link/ip6gre.c @@ -26,6 +26,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IP6GRE_ATTR_LINK (1 << 0) #define IP6GRE_ATTR_IFLAGS (1 << 1) @@ -242,12 +243,19 @@ static void ip6gre_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void ip6gre_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct ip6gre_info *ip6gre = link->l_info; - char *name; char addr[INET6_ADDRSTRLEN]; if (ip6gre->ip6gre_mask & IP6GRE_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); - name = rtnl_link_get_name(link); + + name = NULL; + parent = link_lookup(link->ce_cache, ip6gre->link); + if (parent) + name = rtnl_link_get_name(parent); + if (name) nl_dump_line(p, "%s\n", name); else diff --git a/lib/route/link/ip6tnl.c b/lib/route/link/ip6tnl.c index 13bd67546..56d54f6fb 100644 --- a/lib/route/link/ip6tnl.c +++ b/lib/route/link/ip6tnl.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IP6_TNL_ATTR_LINK (1 << 0) #define IP6_TNL_ATTR_LOCAL (1 << 1) @@ -237,10 +238,12 @@ static void ip6_tnl_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct ip6_tnl_info *ip6_tnl = link->l_info; - char *name, addr[INET6_ADDRSTRLEN]; - struct rtnl_link *parent; + char addr[INET6_ADDRSTRLEN]; if (ip6_tnl->ip6_tnl_mask & IP6_TNL_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; diff --git a/lib/route/link/ip6vti.c b/lib/route/link/ip6vti.c index b6c7a1b2f..e27e15fab 100644 --- a/lib/route/link/ip6vti.c +++ b/lib/route/link/ip6vti.c @@ -26,6 +26,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IP6VTI_ATTR_LINK (1 << 0) #define IP6VTI_ATTR_IKEY (1 << 1) @@ -176,12 +177,19 @@ static void ip6vti_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void ip6vti_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct ip6vti_info *ip6vti = link->l_info; - char *name; char addr[INET6_ADDRSTRLEN]; if (ip6vti->ip6vti_mask & IP6VTI_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); - name = rtnl_link_get_name(link); + + name = NULL; + parent = link_lookup(link->ce_cache, ip6vti->link); + if (parent) + name = rtnl_link_get_name(parent); + if (name) nl_dump_line(p, "%s\n", name); else diff --git a/lib/route/link/ipgre.c b/lib/route/link/ipgre.c index bd3cc40f5..e6fa678cc 100644 --- a/lib/route/link/ipgre.c +++ b/lib/route/link/ipgre.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IPGRE_ATTR_LINK (1 << 0) #define IPGRE_ATTR_IFLAGS (1 << 1) @@ -181,10 +182,10 @@ static int ipgre_put_attrs(struct nl_msg *msg, struct rtnl_link *link) if (ipgre->ipgre_mask & IPGRE_ATTR_LINK) NLA_PUT_U32(msg, IFLA_GRE_LINK, ipgre->link); - if (ipgre->ipgre_mask & IFLA_GRE_IFLAGS) + if (ipgre->ipgre_mask & IPGRE_ATTR_IFLAGS) NLA_PUT_U16(msg, IFLA_GRE_IFLAGS, ipgre->iflags); - if (ipgre->ipgre_mask & IFLA_GRE_OFLAGS) + if (ipgre->ipgre_mask & IPGRE_ATTR_OFLAGS) NLA_PUT_U16(msg, IFLA_GRE_OFLAGS, ipgre->oflags); if (ipgre->ipgre_mask & IPGRE_ATTR_IKEY) @@ -234,10 +235,12 @@ static void ipgre_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void ipgre_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct ipgre_info *ipgre = link->l_info; - char *name, addr[INET_ADDRSTRLEN]; - struct rtnl_link *parent; + char addr[INET_ADDRSTRLEN]; if (ipgre->ipgre_mask & IPGRE_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; @@ -263,7 +266,7 @@ static void ipgre_dump_details(struct rtnl_link *link, struct nl_dump_params *p) if (ipgre->ipgre_mask & IPGRE_ATTR_IKEY) { nl_dump(p, " ikey "); - nl_dump_line(p, "%x\n",ipgre->ikey); + nl_dump_line(p, "%x\n", ipgre->ikey); } if (ipgre->ipgre_mask & IPGRE_ATTR_OKEY) { @@ -273,18 +276,18 @@ static void ipgre_dump_details(struct rtnl_link *link, struct nl_dump_params *p) if (ipgre->ipgre_mask & IPGRE_ATTR_LOCAL) { nl_dump(p, " local "); - if(inet_ntop(AF_INET, &ipgre->local, addr, sizeof(addr))) + if (inet_ntop(AF_INET, &ipgre->local, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(ipgre->local)); + nl_dump_line(p, "%#x\n", ntohl(ipgre->local)); } if (ipgre->ipgre_mask & IPGRE_ATTR_REMOTE) { nl_dump(p, " remote "); - if(inet_ntop(AF_INET, &ipgre->remote, addr, sizeof(addr))) + if (inet_ntop(AF_INET, &ipgre->remote, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(ipgre->remote)); + nl_dump_line(p, "%#x\n", ntohl(ipgre->remote)); } if (ipgre->ipgre_mask & IPGRE_ATTR_TTL) { diff --git a/lib/route/link/ipip.c b/lib/route/link/ipip.c index 74db8901b..1237055fd 100644 --- a/lib/route/link/ipip.c +++ b/lib/route/link/ipip.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IPIP_ATTR_LINK (1 << 0) #define IPIP_ATTR_LOCAL (1 << 1) @@ -189,10 +190,12 @@ static void ipip_dump_line(struct rtnl_link *link, struct nl_dump_params *p) 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]; - struct rtnl_link *parent; + char addr[INET_ADDRSTRLEN]; if (ipip->ipip_mask & IPIP_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; @@ -208,18 +211,20 @@ static void ipip_dump_details(struct rtnl_link *link, struct nl_dump_params *p) if (ipip->ipip_mask & IPIP_ATTR_LOCAL) { nl_dump(p, " local "); - if(inet_ntop(AF_INET, &ipip->local, addr, sizeof(addr))) + + 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)); + nl_dump_line(p, "%#x\n", ntohl(ipip->local)); } if (ipip->ipip_mask & IPIP_ATTR_REMOTE) { nl_dump(p, " remote "); - if(inet_ntop(AF_INET, &ipip->remote, addr, sizeof(addr))) + + 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)); + nl_dump_line(p, "%#x\n", ntohl(ipip->remote)); } if (ipip->ipip_mask & IPIP_ATTR_TTL) { diff --git a/lib/route/link/ipvti.c b/lib/route/link/ipvti.c index fd578959f..0a07fe1e5 100644 --- a/lib/route/link/ipvti.c +++ b/lib/route/link/ipvti.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define IPVTI_ATTR_LINK (1 << 0) #define IPVTI_ATTR_IKEY (1 << 1) @@ -144,7 +145,7 @@ static int ipvti_put_attrs(struct nl_msg *msg, struct rtnl_link *link) if (ipvti->ipvti_mask & IPVTI_ATTR_IKEY) NLA_PUT_U32(msg, IFLA_VTI_IKEY, ipvti->ikey); - if (ipvti->ipvti_mask & IFLA_VTI_IKEY) + if (ipvti->ipvti_mask & IPVTI_ATTR_OKEY) NLA_PUT_U32(msg, IFLA_VTI_OKEY, ipvti->okey); if (ipvti->ipvti_mask & IPVTI_ATTR_LOCAL) @@ -179,10 +180,12 @@ static void ipvti_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void ipvti_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct ipvti_info *ipvti = link->l_info; - char *name, addr[INET_ADDRSTRLEN]; - struct rtnl_link *parent; + char addr[INET_ADDRSTRLEN]; if (ipvti->ipvti_mask & IPVTI_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; @@ -208,18 +211,20 @@ static void ipvti_dump_details(struct rtnl_link *link, struct nl_dump_params *p) if (ipvti->ipvti_mask & IPVTI_ATTR_LOCAL) { nl_dump(p, " local "); - if(inet_ntop(AF_INET, &ipvti->local, addr, sizeof(addr))) + + if (inet_ntop(AF_INET, &ipvti->local, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(ipvti->local)); + nl_dump_line(p, "%#x\n", ntohl(ipvti->local)); } if (ipvti->ipvti_mask & IPVTI_ATTR_REMOTE) { nl_dump(p, " remote "); - if(inet_ntop(AF_INET, &ipvti->remote, addr, sizeof(addr))) + + if (inet_ntop(AF_INET, &ipvti->remote, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(ipvti->remote)); + nl_dump_line(p, "%#x\n", ntohl(ipvti->remote)); } if (ipvti->ipvti_mask & IPVTI_ATTR_FWMARK) { @@ -264,7 +269,7 @@ static struct rtnl_link_info_ops ipvti_info_ops = { #define IS_IPVTI_LINK_ASSERT(link) \ if ((link)->l_info_ops != &ipvti_info_ops) { \ - APPBUG("Link is not a ipvti link. set type \vti\" first."); \ + APPBUG("Link is not a ipvti link. set type \"vti\" first.");\ return -NLE_OPNOTSUPP; \ } diff --git a/lib/route/link/sit.c b/lib/route/link/sit.c index 69dd3163d..ae2ca4ed8 100644 --- a/lib/route/link/sit.c +++ b/lib/route/link/sit.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define SIT_ATTR_LINK (1 << 0) #define SIT_ATTR_LOCAL (1 << 1) @@ -257,10 +258,12 @@ static void sit_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void sit_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct sit_info *sit = link->l_info; - char *name, addr[INET_ADDRSTRLEN], addr6[INET6_ADDRSTRLEN]; - struct rtnl_link *parent; + char addr[INET_ADDRSTRLEN], addr6[INET6_ADDRSTRLEN]; if (sit->sit_mask & SIT_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; @@ -276,18 +279,20 @@ static void sit_dump_details(struct rtnl_link *link, struct nl_dump_params *p) if (sit->sit_mask & SIT_ATTR_LOCAL) { nl_dump(p, " local "); - if(inet_ntop(AF_INET, &sit->local, addr, sizeof(addr))) + + if (inet_ntop(AF_INET, &sit->local, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(sit->local)); + nl_dump_line(p, "%#x\n", ntohl(sit->local)); } if (sit->sit_mask & SIT_ATTR_REMOTE) { nl_dump(p, " remote "); - if(inet_ntop(AF_INET, &sit->remote, addr, sizeof(addr))) + + if (inet_ntop(AF_INET, &sit->remote, addr, sizeof(addr))) nl_dump_line(p, "%s\n", addr); else - nl_dump_line(p, "%#x\n", ntohs(sit->remote)); + nl_dump_line(p, "%#x\n", ntohl(sit->remote)); } if (sit->sit_mask & SIT_ATTR_TTL) { diff --git a/lib/route/link/vxlan.c b/lib/route/link/vxlan.c index 0603bf590..ed86cabb8 100644 --- a/lib/route/link/vxlan.c +++ b/lib/route/link/vxlan.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" /** @cond SKIP */ #define VXLAN_ATTR_ID (1<<0) @@ -312,8 +313,7 @@ static void vxlan_dump_line(struct rtnl_link *link, struct nl_dump_params *p) static void vxlan_dump_details(struct rtnl_link *link, struct nl_dump_params *p) { struct vxlan_info *vxi = link->l_info; - char *name, addr[INET6_ADDRSTRLEN]; - struct rtnl_link *parent; + char addr[INET6_ADDRSTRLEN]; nl_dump_line(p, " vxlan-id %u\n", vxi->vxi_id); @@ -328,6 +328,9 @@ static void vxlan_dump_details(struct rtnl_link *link, struct nl_dump_params *p) } if (vxi->ce_mask & VXLAN_ATTR_LINK) { + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; + char *name; + nl_dump(p, " link "); name = NULL; @@ -572,7 +575,7 @@ static int vxlan_put_attrs(struct nl_msg *msg, struct rtnl_link *link) NLA_PUT_U8(msg, IFLA_VXLAN_L3MISS, vxi->vxi_l3miss); if (vxi->ce_mask & VXLAN_ATTR_PORT) - NLA_PUT_U32(msg, IFLA_VXLAN_PORT, vxi->vxi_port); + NLA_PUT_U16(msg, IFLA_VXLAN_PORT, vxi->vxi_port); if (vxi->ce_mask & VXLAN_ATTR_UDP_CSUM) NLA_PUT_U8(msg, IFLA_VXLAN_UDP_CSUM, vxi->vxi_udp_csum); @@ -643,13 +646,15 @@ static int vxlan_compare(struct rtnl_link *link_a, struct rtnl_link *link_b, sizeof(a->vxi_group6)) != 0); diff |= _DIFF(VXLAN_ATTR_LOCAL6, memcmp(&a->vxi_local6, &b->vxi_local6, sizeof(a->vxi_local6)) != 0); - diff |= _DIFF(VXLAN_ATTR_UDP_CSUM, a->vxi_proxy != b->vxi_proxy); + diff |= _DIFF(VXLAN_ATTR_UDP_CSUM, a->vxi_udp_csum != b->vxi_udp_csum); diff |= _DIFF(VXLAN_ATTR_UDP_ZERO_CSUM6_TX, - a->vxi_proxy != b->vxi_proxy); + a->vxi_udp_zero_csum6_tx != b->vxi_udp_zero_csum6_tx); diff |= _DIFF(VXLAN_ATTR_UDP_ZERO_CSUM6_RX, - a->vxi_proxy != b->vxi_proxy); - diff |= _DIFF(VXLAN_ATTR_REMCSUM_TX, a->vxi_proxy != b->vxi_proxy); - diff |= _DIFF(VXLAN_ATTR_REMCSUM_RX, a->vxi_proxy != b->vxi_proxy); + a->vxi_udp_zero_csum6_rx != b->vxi_udp_zero_csum6_rx); + diff |= _DIFF(VXLAN_ATTR_REMCSUM_TX, + a->vxi_remcsum_tx != b->vxi_remcsum_tx); + diff |= _DIFF(VXLAN_ATTR_REMCSUM_RX, + a->vxi_remcsum_rx != b->vxi_remcsum_rx); diff |= _DIFF(VXLAN_ATTR_COLLECT_METADATA, a->vxi_collect_metadata != b->vxi_collect_metadata); diff |= _DIFF(VXLAN_ATTR_LABEL, a->vxi_label != b->vxi_label); diff --git a/lib/route/link/xfrmi.c b/lib/route/link/xfrmi.c index 09ceb809f..5b80037b0 100644 --- a/lib/route/link/xfrmi.c +++ b/lib/route/link/xfrmi.c @@ -29,6 +29,7 @@ #include "nl-route.h" #include "link-api.h" +#include "nl-aux-route/nl-route.h" #define XFRMI_ATTR_LINK (1 << 0) #define XFRMI_ATTR_IF_ID (1 << 1) @@ -134,7 +135,7 @@ static void xfrmi_dump_details(struct rtnl_link *link, struct nl_dump_params *p) struct xfrmi_info *xfrmi = link->l_info; if (xfrmi->xfrmi_mask & XFRMI_ATTR_LINK) { - struct rtnl_link *parent; + _nl_auto_rtnl_link struct rtnl_link *parent = NULL; char *name; nl_dump(p, " link "); diff --git a/lib/route/nexthop.c b/lib/route/nexthop.c index 7e0df6136..80ea19b6f 100644 --- a/lib/route/nexthop.c +++ b/lib/route/nexthop.c @@ -61,6 +61,7 @@ struct rtnl_nexthop *rtnl_route_nh_clone(struct rtnl_nexthop *src) nh->rtnh_flag_mask = src->rtnh_flag_mask; nh->rtnh_weight = src->rtnh_weight; nh->rtnh_ifindex = src->rtnh_ifindex; + nh->rtnh_realms = src->rtnh_realms; nh->ce_mask = src->ce_mask; if (src->rtnh_gateway) {