recognize and handle carrier loss
[unix-history] / usr / src / sys / net / if.c
index 345f32d..947edfe 100644 (file)
@@ -1,4 +1,4 @@
-/*     if.c    4.29    83/06/12        */
+/*     if.c    6.2     83/09/27        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -47,7 +47,7 @@ ifubareset(uban)
 
        for (ifp = ifnet; ifp; ifp = ifp->if_next)
                if (ifp->if_reset)
 
        for (ifp = ifnet; ifp; ifp = ifp->if_next)
                if (ifp->if_reset)
-                       (*ifp->if_reset)(uban);
+                       (*ifp->if_reset)(ifp->if_unit, uban);
 }
 #endif
 
 }
 #endif
 
@@ -243,10 +243,19 @@ ifioctl(cmd, data)
                ifr->ifr_flags = ifp->if_flags;
                break;
 
                ifr->ifr_flags = ifp->if_flags;
                break;
 
+       case SIOCSIFFLAGS:
+               if (ifp->if_flags & IFF_UP && (ifr->ifr_flags & IFF_UP) == 0) {
+                       int s = splimp();
+                       if_down(ifp);
+                       splx(s);
+               }
+               ifp->if_flags = ifr->ifr_flags;
+               break;
+
        default:
                if (ifp->if_ioctl == 0)
                        return (EOPNOTSUPP);
        default:
                if (ifp->if_ioctl == 0)
                        return (EOPNOTSUPP);
-               return ((*ifp->if_ioctl)(cmd, data));
+               return ((*ifp->if_ioctl)(ifp, cmd, data));
        }
        return (0);
 }
        }
        return (0);
 }