On Sun, Jul 09, 2017 at 09:57:34AM +0300, Artturi Alm wrote: > Hi, > > anyone else having issues w/urndis(android)? > victim of circumstances, i have to rely on it at times during the summer. > When i plug phone into usb, and enable usb tethering or w/e it is called, > i never get ip on first try, i have nothing but "dhcp" > in /etc/hostname.urndis0, so i just ^C on the first i"ksh /etc/netstart" > and get ip pretty much as expected in seconds on the successive run > right after ^C, the first dhclient would end up sleeping if not ^C'ed.. > > this is what i see in dmesg: > urndis0 at uhub0 port 1 configuration 1 interface 0 "SAMSUNG SAMSUNG_Android" > rev 2.00/ff.ff addr 2 > urndis0: using RNDIS, address 02:56:66:63:30:3c > urndis0: ctrl message error: unknown event 0x7 > > no dmesg, as i've ran into this issue on every installation of OpenBSD > i have tried w/. > unrelated issue is this spam i get which i haven't noticed to affect > anything: > urndis0: urndis_decap invalid buffer len 1 < minimum header 44 > > for which i ended up w/diff below. > -Artturi > > diff --git a/sys/dev/usb/if_urndis.c b/sys/dev/usb/if_urndis.c > index 4af6b55cf05..9a3d5db66c0 100644 > --- a/sys/dev/usb/if_urndis.c > +++ b/sys/dev/usb/if_urndis.c > @@ -796,11 +796,11 @@ urndis_decap(struct urndis_softc *sc, struct > urndis_chain *c, u_int32_t len) > len)); > > if (len < sizeof(*msg)) { > - printf("%s: urndis_decap invalid buffer len %u < " > + DPRINTF(("%s: urndis_decap invalid buffer len %u < " > "minimum header %zu\n", > DEVNAME(sc), > len, > - sizeof(*msg)); > + sizeof(*msg))); > return; > } > > >
Hi, so here's the diff i was too embarrassed to send along the above, that fixes the issue, but is so ugly i don't know what to do w/it, which is why i came asking. diff for the archives below. -Artturi diff --git a/sys/dev/usb/if_urndis.c b/sys/dev/usb/if_urndis.c index 4af6b55cf05..234e4d223d0 100644 --- a/sys/dev/usb/if_urndis.c +++ b/sys/dev/usb/if_urndis.c @@ -1032,8 +1032,17 @@ urndis_init(struct urndis_softc *sc) int i, s; usbd_status err; - if (urndis_ctrl_init(sc) != RNDIS_STATUS_SUCCESS) + if (urndis_ctrl_init(sc) != RNDIS_STATUS_SUCCESS) { + if (sc->sc_attached == 1) { /* XXX hack for androids. */ + /* + * first try often(always here, w/o dbg.) fails with: + * urndis0: ctrl message error: unknown event 0x7 + */ + sc->sc_attached++; + urndis_init(sc); /* so retry once per attach */ + } return; + } s = splnet();