Two patches were backported to fix issue openwrt/packages#12737 0002-compat-Fix-ipv6_dst_lookup-build-error.patch 0003-compat-Backport-ipv6_stub-change.patch One was deleted as it is now part of 2.11.3 0005-datapath-conntrack-fix-include-for-IP6_DEFRAG_CONNTR.patch Other patches refreshed Reported-by: Josef Schlehofer <pepe.schlehofer@gmail.com> Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
37 lines
1.4 KiB
Diff
37 lines
1.4 KiB
Diff
From 64fad2453bc409bf9728a14d8ae630d602e77842 Mon Sep 17 00:00:00 2001
|
|
From: Helmut Schaa <helmut.schaa@googlemail.com>
|
|
Date: Wed, 8 Jan 2014 13:48:49 +0100
|
|
Subject: [PATCH] netdev-linux: Let interface flag survive internal port setup
|
|
|
|
Due to a race condition when bringing up an internal port on Linux
|
|
some interface flags (e.g. IFF_MULTICAST) are falsely reset. This
|
|
happens because netlink events may be processed after the according
|
|
netdev has been brought up (which sets interface flags).
|
|
|
|
Fix this by reading the interface flags just before updating them
|
|
if they have not been updated by from the kernel yet.
|
|
|
|
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
|
|
---
|
|
lib/netdev-linux.c | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
|
|
index 4ab645953..cf23ca753 100644
|
|
--- a/lib/netdev-linux.c
|
|
+++ b/lib/netdev-linux.c
|
|
@@ -3120,7 +3120,13 @@ update_flags(struct netdev_linux *netdev, enum netdev_flags off,
|
|
unsigned int old_flags, new_flags;
|
|
int error = 0;
|
|
|
|
- old_flags = netdev->ifi_flags;
|
|
+ if (!(netdev->cache_valid & VALID_DRVINFO)) {
|
|
+ /* Most likely the debvice flags are not in sync yet, fetch them now */
|
|
+ get_flags(&netdev->up, &old_flags);
|
|
+ } else {
|
|
+ old_flags = netdev->ifi_flags;
|
|
+ }
|
|
+
|
|
*old_flagsp = iff_to_nd_flags(old_flags);
|
|
new_flags = (old_flags & ~nd_to_iff_flags(off)) | nd_to_iff_flags(on);
|
|
if (new_flags != old_flags) {
|