blob: 57b8060de3e8a8b805eb103113613e1a20a22782 [file] [log] [blame]
developerd243af02023-12-21 14:49:33 +08001From a08f87c88e8abd539dc75b7fcb15fef786d5a61d 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
developerd243af02023-12-21 14:49:33 +08004Subject: [PATCH 29/54] mtk: hostapd: Check the bridge after ioctl SIOCBRADDIF
developerdfb50982023-09-11 13:34:36 +08005 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
developerd243af02023-12-21 14:49:33 +080020index 7edb9df2e..b8c1af2e3 100644
developer8bff6472023-07-17 11:11:44 +080021--- 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