diff options
Diffstat (limited to 'packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch')
-rw-r--r-- | packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch b/packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch index c9467e74..2be1a3c8 100644 --- a/packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch +++ b/packages/linux-kernel/patches/kernel/0001-VyOS-Add-linkstate-IP-device-attribute.patch @@ -6,6 +6,7 @@ Subject: [PATCH] VyOS: Add linkstate IP device attribute Backport of earlier Vyatta patch. (cherry picked from commit 7c5a851086686be14ae937c80d6cee34814dbefc) + --- Documentation/networking/ip-sysctl.txt | 13 +++++++++++++ include/linux/inetdevice.h | 1 + @@ -14,14 +15,14 @@ Backport of earlier Vyatta patch. include/uapi/linux/ipv6.h | 1 + net/ipv4/devinet.c | 2 ++ net/ipv6/addrconf.c | 9 +++++++++ - net/ipv6/route.c | 12 ++++++++++++ - 8 files changed, 40 insertions(+) + net/ipv6/route.c | 11 +++++++++++ + 8 files changed, 39 insertions(+) diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt -index 7eb9366422f5..b99d54a313a0 100644 +index 8af3771a3ebf..93408cc52991 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt -@@ -1177,6 +1177,19 @@ rp_filter - INTEGER +@@ -1245,6 +1245,19 @@ rp_filter - INTEGER Default value is 0. Note that some distributions enable it in startup scripts. @@ -42,7 +43,7 @@ index 7eb9366422f5..b99d54a313a0 100644 1 - Allows you to have multiple network interfaces on the same subnet, and have the ARPs for each interface be answered diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h -index a64f21a97369..4014dd852bae 100644 +index 3515ca64e638..dcae58193580 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h @@ -133,6 +133,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) @@ -54,7 +55,7 @@ index a64f21a97369..4014dd852bae 100644 struct in_ifaddr { struct hlist_node hash; diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h -index 8415bf1a9776..80a0ada19c9a 100644 +index ea7c7906591e..57f656ea2783 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h @@ -76,6 +76,7 @@ struct ipv6_devconf { @@ -90,10 +91,10 @@ index 9c0f4a92bcff..619edd130cfd 100644 }; diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c -index 12a2cea9d606..e0870ba2a8e2 100644 +index a27d034c85cc..b62b62abe907 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c -@@ -2319,6 +2319,8 @@ static struct devinet_sysctl_table { +@@ -2550,6 +2550,8 @@ static struct devinet_sysctl_table { "route_localnet"), DEVINET_SYSCTL_FLUSHING_ENTRY(DROP_UNICAST_IN_L2_MULTICAST, "drop_unicast_in_l2_multicast"), @@ -103,10 +104,10 @@ index 12a2cea9d606..e0870ba2a8e2 100644 }; diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index 627cd24b7c0d..8c49eac27fd0 100644 +index 635b2482fa20..ce1405ecf6f6 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c -@@ -5240,6 +5240,7 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf, +@@ -5477,6 +5477,7 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf, array[DEVCONF_ADDR_GEN_MODE] = cnf->addr_gen_mode; array[DEVCONF_DISABLE_POLICY] = cnf->disable_policy; array[DEVCONF_NDISC_TCLASS] = cnf->ndisc_tclass; @@ -114,7 +115,7 @@ index 627cd24b7c0d..8c49eac27fd0 100644 } static inline size_t inet6_ifla6_size(void) -@@ -6561,6 +6562,14 @@ static const struct ctl_table addrconf_sysctl[] = { +@@ -6849,6 +6850,14 @@ static const struct ctl_table addrconf_sysctl[] = { .mode = 0644, .proc_handler = addrconf_sysctl_disable_policy, }, @@ -130,34 +131,33 @@ index 627cd24b7c0d..8c49eac27fd0 100644 .procname = "ndisc_tclass", .data = &ipv6_devconf.ndisc_tclass, diff --git a/net/ipv6/route.c b/net/ipv6/route.c -index dad35cd48807..1a2439c6a257 100644 +index 46df6345bb99..2b930a2c4fdb 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -595,6 +595,15 @@ static inline int rt6_check_dev(struct fib6_info *rt, int oif) - return 0; +@@ -686,6 +686,15 @@ static inline void rt6_probe(struct fib6_nh *fib6_nh) } + #endif -+static inline int rt6_link_filter(struct fib6_info *rt) ++static inline int rt6_link_filter(const struct fib6_nh *nh) +{ -+ const struct net_device *dev = rt->fib6_nh.nh_dev; ++ const struct net_device *dev = nh->fib_nh_dev; + int linkf = __in6_dev_get(dev)->cnf.link_filter; + + return (linkf && !netif_running(dev)) -+ || (linkf > 1 && !netif_carrier_ok(dev)); ++ || (linkf > 1 && !netif_carrier_ok(dev)); +} + - static inline enum rt6_nud_state rt6_check_neigh(struct fib6_info *rt) - { - enum rt6_nud_state ret = RT6_NUD_FAIL_HARD; -@@ -634,6 +643,9 @@ static int rt6_score_route(struct fib6_info *rt, int oif, int strict) - m = rt6_check_dev(rt, oif); + /* + * Default Router Selection (RFC 2461 6.3.6) + */ +@@ -727,6 +736,8 @@ static int rt6_score_route(const struct fib6_nh *nh, u32 fib6_flags, int oif, + if (!m && (strict & RT6_LOOKUP_F_IFACE)) return RT6_NUD_FAIL_HARD; -+ if (rt6_link_filter(rt)) ++ if (rt6_link_filter(nh)) + return -1; -+ #ifdef CONFIG_IPV6_ROUTER_PREF - m |= IPV6_DECODE_PREF(IPV6_EXTRACT_PREF(rt->fib6_flags)) << 2; + m |= IPV6_DECODE_PREF(IPV6_EXTRACT_PREF(fib6_flags)) << 2; #endif -- 2.20.1 |