blob: 3d6f9583e8513007e869bccdf1fe9542ae81e5e7 [file] [log] [blame]
developerdfb50982023-09-11 13:34:36 +08001From 1bc32b7308d9460116954f048eca89f02204825c Mon Sep 17 00:00:00 2001
developer8bff6472023-07-17 11:11:44 +08002From: Michael Lee <michael-cy.lee@mediatek.com>
3Date: Thu, 13 Jul 2023 13:14:26 +0800
developerdfb50982023-09-11 13:34:36 +08004Subject: [PATCH 29/40] hostapd: mtk: Check the bridge after ioctl SIOCBRADDIF
5 failed
developer8bff6472023-07-17 11:11:44 +08006
7If ioctl returns EBUSY on command SIOCBRADDIF, the interface might
8already be bridged by others, and linux_br_add_if should not indicate an
9error in the case.
10
11This patch checks whether the interface is correctly brigded when ioctl
12returns EBUSY.
13
14Signed-off-by: Michael Lee <michael-cy.lee@mediatek.com>
15---
16 src/drivers/linux_ioctl.c | 16 ++++++++++++++--
17 1 file changed, 14 insertions(+), 2 deletions(-)
18
19diff --git a/src/drivers/linux_ioctl.c b/src/drivers/linux_ioctl.c
20index 7edb9df..b8c1af2 100644
21--- a/src/drivers/linux_ioctl.c
22+++ b/src/drivers/linux_ioctl.c
23@@ -150,7 +150,8 @@ int linux_br_del(int sock, const char *brname)
24 int linux_br_add_if(int sock, const char *brname, const char *ifname)
25 {
26 struct ifreq ifr;
27- int ifindex;
28+ int ifindex, ret;
29+ char in_br[IFNAMSIZ];
30
31 ifindex = if_nametoindex(ifname);
32 if (ifindex == 0)
33@@ -164,8 +165,19 @@ int linux_br_add_if(int sock, const char *brname, const char *ifname)
34
35 wpa_printf(MSG_DEBUG, "Could not add interface %s into bridge "
36 "%s: %s", ifname, brname, strerror(errno));
37+
38+ /* If ioctl returns -EBUSY when adding interface into bridge,
39+ * the interface might already be added by netifd, so here we
40+ * check whether the interface is currently on the right
41+ * bridge. */
42+ if(errno == EBUSY && linux_br_get(in_br, ifname) == 0 &&
43+ os_strcmp(in_br, brname) == 0)
44+ ret = 0;
45+ else
46+ ret = -1;
47+
48 errno = saved_errno;
49- return -1;
50+ return ret;
51 }
52
53 return 0;
54--
developerdfb50982023-09-11 13:34:36 +0800552.18.0
developer8bff6472023-07-17 11:11:44 +080056