xref: /OK3568_Linux_fs/buildroot/package/smcroute/0001-Avoid-trying-to-delete-inactive-VIFs.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 8ce1d117a31e35d97fb955b82edf13514267eaab Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Joachim Wiberg <troglobit@gmail.com>
3*4882a593SmuzhiyunDate: Tue, 28 Sep 2021 11:09:47 +0200
4*4882a593SmuzhiyunSubject: [PATCH] Avoid trying to delete inactive VIFs
5*4882a593SmuzhiyunOrganization: Westermo Network Technologies AB
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunWhen probing interfaces at startup, there's a check for IFF_MULTICAST,
8*4882a593Smuzhiyunif this flag is not set we try to delete its corresponding VIF/MIF.
9*4882a593SmuzhiyunThis is for hanlding .conf reload scenarios where an interface has had
10*4882a593Smuzhiyunits MULTICAST flag dropped.
11*4882a593Smuzhiyun
12*4882a593SmuzhiyunHowever, when starting up on Linux systems, the loopback interface has
13*4882a593Smuzhiyunno MULTICAST flag set.  This leads to the following bogus warning:
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun   Failed deleting VIF for iface lo: Resource temporarily unavailable
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunThis patch makes sure to check if we have a registered kernel VIF/MIF
18*4882a593Smuzhiyunfor an interface before attempting to delete it.
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunSigned-off-by: Joachim Wiberg <troglobit@gmail.com>
21*4882a593Smuzhiyun---
22*4882a593Smuzhiyun src/mroute.c | 6 ++++++
23*4882a593Smuzhiyun 1 file changed, 6 insertions(+)
24*4882a593Smuzhiyun
25*4882a593Smuzhiyundiff --git a/src/mroute.c b/src/mroute.c
26*4882a593Smuzhiyunindex 291e9c4..6a80a47 100644
27*4882a593Smuzhiyun--- a/src/mroute.c
28*4882a593Smuzhiyun+++ b/src/mroute.c
29*4882a593Smuzhiyun@@ -298,6 +298,9 @@ static int mroute4_del_vif(struct iface *iface)
30*4882a593Smuzhiyun 	if (iface->mrdisc)
31*4882a593Smuzhiyun 		rc = mrdisc_deregister(iface->vif);
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun+	if (iface->vif == ALL_VIFS)
34*4882a593Smuzhiyun+		return 0;
35*4882a593Smuzhiyun+
36*4882a593Smuzhiyun 	if (kern_vif_del(iface)) {
37*4882a593Smuzhiyun 		switch (errno) {
38*4882a593Smuzhiyun 		case ENOENT:
39*4882a593Smuzhiyun@@ -910,6 +913,9 @@ static int mroute6_del_mif(struct iface *iface)
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun 	int rc = 0;
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun+	if (iface->mif == ALL_VIFS)
44*4882a593Smuzhiyun+		return 0;
45*4882a593Smuzhiyun+
46*4882a593Smuzhiyun 	if (kern_mif_del(iface) && errno != ENOENT) {
47*4882a593Smuzhiyun 		switch (errno) {
48*4882a593Smuzhiyun 		case ENOENT:
49*4882a593Smuzhiyun--
50*4882a593Smuzhiyun2.25.1
51*4882a593Smuzhiyun
52