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