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; } /*