On Sun, Apr 21, 2019 at 01:02:39PM +1000, Jonathan Matthew wrote:
>
> On Mon, Apr 15, 2019 at 04:48:02PM +0200, Stefan Sperling wrote:
> > ieee80211_media_change() will return ENETRESET if the interface is
> > switched into 11a/b/g/n mode from any other mode.
> > ifmedia_ioctl() considers this an error and reverts ifmedia's state
> > to the previous setting, even though net80211 has actually succeeded.
> > The result is that if_media and net80211 have conflicting ideas about the
> > current media mode of the interface, which can be observed with ifconfig.
>
> Diff makes sense to me. Currently we have some drivers with media_change
> functions returning the errno from ieee80211_media_change (iwn, iwm) and some
> just returning 0 at the end (run, rtwn, ral). The ones returning 0 are mostly
> ignoring possible errors from x_init() so I'm leaning towards making them more
> like iwn/m.
Agreed. Here's a follow-up diff which returns the errno from
ieee80211_media_change().
Index: sys/dev/ic/bwfm.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/bwfm.c,v
retrieving revision 1.59
diff -u -p -u -p -r1.59 bwfm.c
--- sys/dev/ic/bwfm.c 1 Apr 2019 15:19:56 -0000 1.59
+++ sys/dev/ic/bwfm.c 21 Apr 2019 13:26:12 -0000
@@ -757,7 +757,7 @@ bwfm_media_change(struct ifnet *ifp)
bwfm_stop(ifp);
bwfm_init(ifp);
}
- return 0;
+ return error;
}
/* Chip initialization (SDIO, PCIe) */
Index: sys/dev/ic/rtwn.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/rtwn.c,v
retrieving revision 1.45
diff -u -p -u -p -r1.45 rtwn.c
--- sys/dev/ic/rtwn.c 11 Mar 2019 06:19:33 -0000 1.45
+++ sys/dev/ic/rtwn.c 21 Apr 2019 13:26:12 -0000
@@ -745,9 +745,9 @@ rtwn_media_change(struct ifnet *ifp)
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
(IFF_UP | IFF_RUNNING)) {
rtwn_stop(ifp);
- rtwn_init(ifp);
+ error = rtwn_init(ifp);
}
- return (0);
+ return (error);
}
/*
Index: sys/dev/pci/if_iwi.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwi.c,v
retrieving revision 1.138
diff -u -p -u -p -r1.138 if_iwi.c
--- sys/dev/pci/if_iwi.c 26 Apr 2018 12:50:07 -0000 1.138
+++ sys/dev/pci/if_iwi.c 21 Apr 2019 13:26:12 -0000
@@ -647,9 +647,9 @@ iwi_media_change(struct ifnet *ifp)
return error;
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
- iwi_init(ifp);
+ error = iwi_init(ifp);
- return 0;
+ return error;
}
void
Index: sys/dev/usb/if_ral.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_ral.c,v
retrieving revision 1.145
diff -u -p -u -p -r1.145 if_ral.c
--- sys/dev/usb/if_ral.c 13 Jan 2019 14:27:15 -0000 1.145
+++ sys/dev/usb/if_ral.c 21 Apr 2019 13:26:12 -0000
@@ -497,9 +497,9 @@ ural_media_change(struct ifnet *ifp)
return error;
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
- ural_init(ifp);
+ error = ural_init(ifp);
- return 0;
+ return error;
}
/*
Index: sys/dev/usb/if_rsu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rsu.c,v
retrieving revision 1.43
diff -u -p -u -p -r1.43 if_rsu.c
--- sys/dev/usb/if_rsu.c 26 Apr 2018 12:50:07 -0000 1.43
+++ sys/dev/usb/if_rsu.c 21 Apr 2019 13:26:12 -0000
@@ -749,9 +749,9 @@ rsu_media_change(struct ifnet *ifp)
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
(IFF_UP | IFF_RUNNING)) {
rsu_stop(ifp);
- rsu_init(ifp);
+ error = rsu_init(ifp);
}
- return (0);
+ return (error);
}
void
Index: sys/dev/usb/if_rum.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rum.c,v
retrieving revision 1.123
diff -u -p -u -p -r1.123 if_rum.c
--- sys/dev/usb/if_rum.c 26 Oct 2017 15:00:28 -0000 1.123
+++ sys/dev/usb/if_rum.c 21 Apr 2019 13:26:12 -0000
@@ -591,9 +591,9 @@ rum_media_change(struct ifnet *ifp)
return error;
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
- rum_init(ifp);
+ error = rum_init(ifp);
- return 0;
+ return error;
}
/*
Index: sys/dev/usb/if_run.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_run.c,v
retrieving revision 1.125
diff -u -p -u -p -r1.125 if_run.c
--- sys/dev/usb/if_run.c 30 Jan 2018 20:56:38 -0000 1.125
+++ sys/dev/usb/if_run.c 21 Apr 2019 13:26:12 -0000
@@ -1693,10 +1693,10 @@ run_media_change(struct ifnet *ifp)
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
(IFF_UP | IFF_RUNNING)) {
run_stop(ifp, 0);
- run_init(ifp);
+ error = run_init(ifp);
}
- return 0;
+ return error;
}
void
Index: sys/dev/usb/if_uath.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_uath.c,v
retrieving revision 1.82
diff -u -p -u -p -r1.82 if_uath.c
--- sys/dev/usb/if_uath.c 26 Oct 2017 15:00:28 -0000 1.82
+++ sys/dev/usb/if_uath.c 21 Apr 2019 13:26:12 -0000
@@ -719,9 +719,9 @@ uath_media_change(struct ifnet *ifp)
return error;
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
- uath_init(ifp);
+ error = uath_init(ifp);
- return 0;
+ return error;
}
/*
Index: sys/dev/usb/if_upgt.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_upgt.c,v
retrieving revision 1.82
diff -u -p -u -p -r1.82 if_upgt.c
--- sys/dev/usb/if_upgt.c 25 Aug 2018 17:07:20 -0000 1.82
+++ sys/dev/usb/if_upgt.c 21 Apr 2019 13:26:13 -0000
@@ -1242,7 +1242,7 @@ upgt_media_change(struct ifnet *ifp)
upgt_init(ifp);
}
- return (0);
+ return (error);
}
void
Index: sys/dev/usb/if_zyd.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_zyd.c,v
retrieving revision 1.119
diff -u -p -u -p -r1.119 if_zyd.c
--- sys/dev/usb/if_zyd.c 27 Nov 2018 14:53:56 -0000 1.119
+++ sys/dev/usb/if_zyd.c 21 Apr 2019 13:26:13 -0000
@@ -646,9 +646,9 @@ zyd_media_change(struct ifnet *ifp)
return error;
if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
- zyd_init(ifp);
+ error = zyd_init(ifp);
- return 0;
+ return error;
}
/*