Description: POC fan driver support POC Fan driver support Author: Jay Vosburgh Index: iproute2-4.1.1/include/linux/if_tunnel.h =================================================================== --- iproute2-4.1.1.orig/include/linux/if_tunnel.h +++ iproute2-4.1.1/include/linux/if_tunnel.h @@ -57,6 +57,9 @@ enum { IFLA_IPTUN_ENCAP_FLAGS, IFLA_IPTUN_ENCAP_SPORT, IFLA_IPTUN_ENCAP_DPORT, + + IFLA_IPTUN_FAN_UNDERLAY = 32, + __IFLA_IPTUN_MAX, }; #define IFLA_IPTUN_MAX (__IFLA_IPTUN_MAX - 1) Index: iproute2-4.1.1/ip/link_iptnl.c =================================================================== --- iproute2-4.1.1.orig/ip/link_iptnl.c +++ iproute2-4.1.1/ip/link_iptnl.c @@ -66,6 +66,7 @@ static int iptunnel_parse_opt(struct lin __u32 link = 0; __u32 laddr = 0; __u32 raddr = 0; + __u32 underlay = 0; __u8 ttl = 0; __u8 tos = 0; __u8 pmtudisc = 1; @@ -174,6 +175,9 @@ get_failed: raddr = get_addr32(*argv); else raddr = 0; + } else if (strcmp(*argv, "underlay") == 0) { + NEXT_ARG(); + underlay = get_addr32(*argv); } else if (strcmp(*argv, "local") == 0) { NEXT_ARG(); if (strcmp(*argv, "any")) @@ -318,6 +322,9 @@ get_failed: } } + if (underlay) + addattr32(n, 1024, IFLA_IPTUN_FAN_UNDERLAY, underlay); + return 0; } @@ -349,6 +356,14 @@ static void iptunnel_print_opt(struct li fprintf(f, "local %s ", local); + if (tb[IFLA_IPTUN_FAN_UNDERLAY]) { + unsigned addr = rta_getattr_u32(tb[IFLA_IPTUN_FAN_UNDERLAY]); + + if (addr) + fprintf(f, "underlay %s ", + format_host_r(AF_INET, 4, &addr, s1, sizeof(s1))); + } + if (tb[IFLA_IPTUN_LINK] && rta_getattr_u32(tb[IFLA_IPTUN_LINK])) { unsigned link = rta_getattr_u32(tb[IFLA_IPTUN_LINK]); const char *n = if_indextoname(link, s2);