Could people doing actual networking with urndis(4) please test the following diff and report if any regressions are encountered?
I plan on commiting it by the end of the week if I don't hear anything bad in regards to the patch. Index: if_urndis.c =================================================================== RCS file: /cvs/src/sys/dev/usb/if_urndis.c,v retrieving revision 1.44 diff -u -p -r1.44 if_urndis.c --- if_urndis.c 21 Nov 2013 14:08:05 -0000 1.44 +++ if_urndis.c 28 Nov 2013 10:22:42 -0000 @@ -1363,6 +1363,7 @@ urndis_attach(struct device *parent, str sc = (void *)self; uaa = aux; + sc->sc_attached = 0; sc->sc_udev = uaa->device; id = usbd_get_interface_descriptor(uaa->iface); sc->sc_ifaceno_ctl = id->bInterfaceNumber; @@ -1447,14 +1448,11 @@ urndis_attach(struct device *parent, str IFQ_SET_READY(&ifp->if_snd); - urndis_init(sc); - s = splnet(); if (urndis_ctrl_query(sc, OID_802_3_PERMANENT_ADDRESS, NULL, 0, &buf, &bufsz) != RNDIS_STATUS_SUCCESS) { printf(": unable to get hardware address\n"); - urndis_stop(sc); splx(s); return; } @@ -1466,7 +1464,6 @@ urndis_attach(struct device *parent, str } else { printf(", invalid address\n"); free(buf, M_TEMP); - urndis_stop(sc); splx(s); return; } @@ -1478,7 +1475,6 @@ urndis_attach(struct device *parent, str if (urndis_ctrl_set(sc, OID_GEN_CURRENT_PACKET_FILTER, &filter, sizeof(filter)) != RNDIS_STATUS_SUCCESS) { printf("%s: unable to set data filters\n", DEVNAME(sc)); - urndis_stop(sc); splx(s); return; }