packages/net/openvswitch/patches/0001-netdev-linux-Let-interface-flag-survive-internal-por.patch
Yousong Zhou 48769259a8 openvswitch: bump to version 2.11.0
The following patches are in upstream now

	0100-netdev-linux-Use-unsigned-int-for-ifi_flags.patch
	0103-ovs-ctl-fix-setting-hostname.patch
	0106-ovs-save-compatible-with-busybox-ip-command.patch
	0107-datapath-use-KARCH-when-building-linux-datapath-modu.patch

As for 0001-musl-compatibility.patch, the net/if_packet.h part does not
apply anymore.  And musl is not relevant as we use libatomic from gcc

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
2019-03-04 03:35:19 +00:00

38 lines
1.5 KiB
Diff

From c7247a20c7779dbeafda7767f4a3c090da37c0c0 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 1/4] 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 25d037cb6..ba1427986 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -3117,7 +3117,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) {