mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-16 23:03:40 +01:00
Revert "iproute: remove broken fan patch"
This reverts commit 0d5a5307be
because it
breaks evaluation. See #21561.
This commit is contained in:
parent
26dce1924e
commit
08d1f28818
4 changed files with 386 additions and 1 deletions
|
@ -0,0 +1,65 @@
|
|||
Description: POC fan driver support
|
||||
POC Fan driver support
|
||||
Author: Jay Vosburgh <jay.vosburgh@canonical.com>
|
||||
|
||||
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);
|
|
@ -0,0 +1,133 @@
|
|||
Description: Fan driver support v3
|
||||
Fan driver support v3
|
||||
Author: Jay Vosburgh <jay.vosburgh@canonical.com>
|
||||
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
|
||||
@@ -59,6 +59,7 @@ enum {
|
||||
IFLA_IPTUN_ENCAP_DPORT,
|
||||
|
||||
IFLA_IPTUN_FAN_UNDERLAY = 32,
|
||||
+ IFLA_IPTUN_FAN_MAP = 33,
|
||||
|
||||
__IFLA_IPTUN_MAX,
|
||||
};
|
||||
@@ -134,4 +135,20 @@ enum {
|
||||
};
|
||||
|
||||
#define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1)
|
||||
+
|
||||
+enum {
|
||||
+ IFLA_FAN_UNSPEC,
|
||||
+ IFLA_FAN_MAPPING,
|
||||
+ __IFLA_FAN_MAX,
|
||||
+};
|
||||
+
|
||||
+#define IFLA_FAN_MAX (__IFLA_FAN_MAX - 1)
|
||||
+
|
||||
+struct ip_tunnel_fan_map {
|
||||
+ __be32 underlay;
|
||||
+ __be32 overlay;
|
||||
+ __u16 underlay_prefix;
|
||||
+ __u16 overlay_prefix;
|
||||
+};
|
||||
+
|
||||
#endif /* _IF_TUNNEL_H_ */
|
||||
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
|
||||
@@ -49,6 +49,42 @@ static void usage(int sit)
|
||||
print_usage(stderr, sit);
|
||||
exit(-1);
|
||||
}
|
||||
+static int fan_parse_map(int *argcp, char ***argvp, struct nlmsghdr *n)
|
||||
+{
|
||||
+ inet_prefix underlay, overlay;
|
||||
+ struct ip_tunnel_fan_map map;
|
||||
+ struct rtattr *nest;
|
||||
+ char **argv = *argvp;
|
||||
+ int argc = *argcp;
|
||||
+
|
||||
+ nest = addattr_nest(n, 1024, IFLA_IPTUN_FAN_MAP);
|
||||
+ while (argc > 0) {
|
||||
+ char *colon = strchr(*argv, ':');
|
||||
+
|
||||
+ if (!colon)
|
||||
+ break;
|
||||
+ *colon = '\0';
|
||||
+
|
||||
+ if (get_prefix(&overlay, *argv, AF_INET))
|
||||
+ invarg("invalid fan-map overlay", *argv);
|
||||
+ if (get_prefix(&underlay, colon + 1, AF_INET))
|
||||
+ invarg("invalid fan-map underlay", colon + 1);
|
||||
+
|
||||
+ memcpy(&map.underlay, underlay.data, 4);
|
||||
+ map.underlay_prefix = underlay.bitlen;
|
||||
+ memcpy(&map.overlay, overlay.data, 4);
|
||||
+ map.overlay_prefix = overlay.bitlen;
|
||||
+
|
||||
+ argc--, argv++;
|
||||
+
|
||||
+ addattr_l(n, 1024, IFLA_FAN_MAPPING, &map, sizeof(map));
|
||||
+ }
|
||||
+ addattr_nest_end(n, nest);
|
||||
+
|
||||
+ *argcp = argc;
|
||||
+ *argvp = argv;
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
struct nlmsghdr *n)
|
||||
@@ -178,6 +214,10 @@ get_failed:
|
||||
} else if (strcmp(*argv, "underlay") == 0) {
|
||||
NEXT_ARG();
|
||||
underlay = get_addr32(*argv);
|
||||
+ } else if (strcmp(*argv, "fan-map") == 0) {
|
||||
+ NEXT_ARG();
|
||||
+ if (fan_parse_map(&argc, &argv, n))
|
||||
+ invarg("invalid fan-map", *argv);
|
||||
} else if (strcmp(*argv, "local") == 0) {
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "any"))
|
||||
@@ -328,6 +368,28 @@ get_failed:
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void fan_print_map(FILE *f, struct rtattr *attr)
|
||||
+{
|
||||
+ char b1[INET_ADDRSTRLEN], b2[INET_ADDRSTRLEN];
|
||||
+ struct ip_tunnel_fan_map *m;
|
||||
+ struct rtattr *i;
|
||||
+ int rem;
|
||||
+ int p;
|
||||
+
|
||||
+ fprintf(f, "fan-map ");
|
||||
+
|
||||
+ rem = RTA_PAYLOAD(attr);
|
||||
+ for (i = RTA_DATA(attr); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
+ p = RTA_PAYLOAD(i);
|
||||
+ m = RTA_DATA(i);
|
||||
+ fprintf(f, "%s/%d:%s/%d ",
|
||||
+ rt_addr_n2a_r(AF_INET, p, &m->overlay, b1, INET_ADDRSTRLEN),
|
||||
+ m->overlay_prefix,
|
||||
+ rt_addr_n2a_r(AF_INET, p, &m->underlay, b2, INET_ADDRSTRLEN),
|
||||
+ m->underlay_prefix);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||
{
|
||||
char s1[1024];
|
||||
@@ -364,6 +426,9 @@ static void iptunnel_print_opt(struct li
|
||||
format_host(AF_INET, 4, &addr, s1, sizeof(s1)));
|
||||
}
|
||||
|
||||
+ if (tb[IFLA_IPTUN_FAN_MAP])
|
||||
+ fan_print_map(f, tb[IFLA_IPTUN_FAN_MAP]);
|
||||
+
|
||||
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);
|
|
@ -0,0 +1,177 @@
|
|||
Description: Fan driver support VXLAN (p4)
|
||||
Fan driver setup support for vxlan interfaces.
|
||||
|
||||
Index: iproute2-4.3.0/include/linux/if_link.h
|
||||
===================================================================
|
||||
--- iproute2-4.3.0.orig/include/linux/if_link.h
|
||||
+++ iproute2-4.3.0/include/linux/if_link.h
|
||||
@@ -392,6 +392,7 @@ enum {
|
||||
IFLA_VXLAN_COLLECT_METADATA,
|
||||
IFLA_VXLAN_LABEL,
|
||||
IFLA_VXLAN_GPE,
|
||||
+ IFLA_VXLAN_FAN_MAP = 33,
|
||||
__IFLA_VXLAN_MAX
|
||||
};
|
||||
#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
|
||||
Index: iproute2-4.3.0/include/linux/if_tunnel.h
|
||||
===================================================================
|
||||
--- iproute2-4.3.0.orig/include/linux/if_tunnel.h
|
||||
+++ iproute2-4.3.0/include/linux/if_tunnel.h
|
||||
@@ -145,7 +145,7 @@ enum {
|
||||
|
||||
#define IFLA_FAN_MAX (__IFLA_FAN_MAX - 1)
|
||||
|
||||
-struct ip_tunnel_fan_map {
|
||||
+struct ifla_fan_map {
|
||||
__be32 underlay;
|
||||
__be32 overlay;
|
||||
__u16 underlay_prefix;
|
||||
Index: iproute2-4.3.0/ip/iplink_vxlan.c
|
||||
===================================================================
|
||||
--- iproute2-4.3.0.orig/ip/iplink_vxlan.c
|
||||
+++ iproute2-4.3.0/ip/iplink_vxlan.c
|
||||
@@ -15,7 +15,10 @@
|
||||
#include <net/if.h>
|
||||
#include <linux/ip.h>
|
||||
#include <linux/if_link.h>
|
||||
+#include <linux/types.h>
|
||||
#include <arpa/inet.h>
|
||||
+#include <linux/in6.h>
|
||||
+#include <linux/if_tunnel.h>
|
||||
|
||||
#include "rt_names.h"
|
||||
#include "utils.h"
|
||||
@@ -43,6 +46,45 @@ static void explain(void)
|
||||
print_explain(stderr);
|
||||
}
|
||||
|
||||
+static int fan_parse_map(int *argcp, char ***argvp, struct nlmsghdr *n)
|
||||
+{
|
||||
+ inet_prefix underlay, overlay;
|
||||
+ struct ifla_fan_map map;
|
||||
+ struct rtattr *nest;
|
||||
+ char **argv = *argvp;
|
||||
+ int argc = *argcp;
|
||||
+
|
||||
+ nest = addattr_nest(n, 1024, IFLA_VXLAN_FAN_MAP);
|
||||
+ while (argc > 0) {
|
||||
+ char *colon = strchr(*argv, ':');
|
||||
+
|
||||
+ if (!colon) {
|
||||
+ PREV_ARG();
|
||||
+ break;
|
||||
+ }
|
||||
+ *colon = '\0';
|
||||
+
|
||||
+ if (get_prefix(&overlay, *argv, AF_INET))
|
||||
+ invarg("invalid fan-map overlay", *argv);
|
||||
+ if (get_prefix(&underlay, colon + 1, AF_INET))
|
||||
+ invarg("invalid fan-map underlay", colon + 1);
|
||||
+
|
||||
+ memcpy(&map.underlay, underlay.data, 4);
|
||||
+ map.underlay_prefix = underlay.bitlen;
|
||||
+ memcpy(&map.overlay, overlay.data, 4);
|
||||
+ map.overlay_prefix = overlay.bitlen;
|
||||
+
|
||||
+ argc--, argv++;
|
||||
+
|
||||
+ addattr_l(n, 1024, IFLA_FAN_MAPPING, &map, sizeof(map));
|
||||
+ }
|
||||
+ addattr_nest_end(n, nest);
|
||||
+
|
||||
+ *argcp = argc;
|
||||
+ *argvp = argv;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||
struct nlmsghdr *n)
|
||||
{
|
||||
@@ -201,6 +243,10 @@ static int vxlan_parse_opt(struct link_u
|
||||
gbp = 1;
|
||||
} else if (!matches(*argv, "gpe")) {
|
||||
gpe = 1;
|
||||
+ } else if (!matches(*argv, "fan-map")) {
|
||||
+ NEXT_ARG();
|
||||
+ if (fan_parse_map(&argc, &argv, n))
|
||||
+ invarg("invalid fan-map", *argv);
|
||||
} else if (matches(*argv, "help") == 0) {
|
||||
explain();
|
||||
return -1;
|
||||
@@ -279,6 +325,28 @@ static int vxlan_parse_opt(struct link_u
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void fan_print_map(FILE *f, struct rtattr *attr)
|
||||
+{
|
||||
+ char b1[INET_ADDRSTRLEN], b2[INET_ADDRSTRLEN];
|
||||
+ struct ifla_fan_map *m;
|
||||
+ struct rtattr *i;
|
||||
+ int rem;
|
||||
+ int p;
|
||||
+
|
||||
+ fprintf(f, "fan-map ");
|
||||
+
|
||||
+ rem = RTA_PAYLOAD(attr);
|
||||
+ for (i = RTA_DATA(attr); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
|
||||
+ p = RTA_PAYLOAD(i);
|
||||
+ m = RTA_DATA(i);
|
||||
+ fprintf(f, "%s/%d:%s/%d ",
|
||||
+ rt_addr_n2a_r(AF_INET, p, &m->overlay, b1, INET_ADDRSTRLEN),
|
||||
+ m->overlay_prefix,
|
||||
+ rt_addr_n2a_r(AF_INET, p, &m->underlay, b2, INET_ADDRSTRLEN),
|
||||
+ m->underlay_prefix);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||
{
|
||||
__u32 vni;
|
||||
@@ -321,6 +389,9 @@ static void vxlan_print_opt(struct link_
|
||||
}
|
||||
}
|
||||
|
||||
+ if (tb[IFLA_VXLAN_FAN_MAP])
|
||||
+ fan_print_map(f, tb[IFLA_VXLAN_FAN_MAP]);
|
||||
+
|
||||
if (tb[IFLA_VXLAN_LOCAL]) {
|
||||
__be32 addr = rta_getattr_u32(tb[IFLA_VXLAN_LOCAL]);
|
||||
if (addr)
|
||||
Index: iproute2-4.3.0/ip/link_iptnl.c
|
||||
===================================================================
|
||||
--- iproute2-4.3.0.orig/ip/link_iptnl.c
|
||||
+++ iproute2-4.3.0/ip/link_iptnl.c
|
||||
@@ -49,10 +49,11 @@ static void usage(int sit)
|
||||
print_usage(stderr, sit);
|
||||
exit(-1);
|
||||
}
|
||||
+
|
||||
static int fan_parse_map(int *argcp, char ***argvp, struct nlmsghdr *n)
|
||||
{
|
||||
inet_prefix underlay, overlay;
|
||||
- struct ip_tunnel_fan_map map;
|
||||
+ struct ifla_fan_map map;
|
||||
struct rtattr *nest;
|
||||
char **argv = *argvp;
|
||||
int argc = *argcp;
|
||||
@@ -61,8 +62,10 @@ static int fan_parse_map(int *argcp, cha
|
||||
while (argc > 0) {
|
||||
char *colon = strchr(*argv, ':');
|
||||
|
||||
- if (!colon)
|
||||
+ if (!colon) {
|
||||
+ PREV_ARG();
|
||||
break;
|
||||
+ }
|
||||
*colon = '\0';
|
||||
|
||||
if (get_prefix(&overlay, *argv, AF_INET))
|
||||
@@ -371,7 +374,7 @@ get_failed:
|
||||
static void fan_print_map(FILE *f, struct rtattr *attr)
|
||||
{
|
||||
char b1[INET_ADDRSTRLEN], b2[INET_ADDRSTRLEN];
|
||||
- struct ip_tunnel_fan_map *m;
|
||||
+ struct ifla_fan_map *m;
|
||||
struct rtattr *i;
|
||||
int rem;
|
||||
int p;
|
|
@ -1,4 +1,6 @@
|
|||
{ fetchurl, stdenv, lib, flex, bison, db, iptables, pkgconfig }:
|
||||
{ fetchurl, stdenv, lib, flex, bison, db, iptables, pkgconfig
|
||||
, enableFan ? false
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "iproute2-${version}";
|
||||
|
@ -9,6 +11,14 @@ stdenv.mkDerivation rec {
|
|||
sha256 = "1i0n071hiqxw1gisngw2jln3kcp9sh47n6fj5hdwqrvp7w20zwy0";
|
||||
};
|
||||
|
||||
patches = lib.optionals enableFan [
|
||||
# These patches were pulled from:
|
||||
# https://launchpad.net/ubuntu/xenial/+source/iproute2
|
||||
./1000-ubuntu-poc-fan-driver.patch
|
||||
./1001-ubuntu-poc-fan-driver-v3.patch
|
||||
./1002-ubuntu-poc-fan-driver-vxlan.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
patchShebangs ./configure
|
||||
sed -e '/ARPDDIR/d' -i Makefile
|
||||
|
|
Loading…
Reference in a new issue