On Tue, Jul 11, 2017 at 12:32:30PM +0200, Mike Belopuhov wrote:
> On Sun, Jul 09, 2017 at 09:57 +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
> > 
> 
> What happens if you apply the diff below w/o your modifications?
> 
> diff --git sys/dev/usb/if_urndis.c sys/dev/usb/if_urndis.c
> index 4af6b55cf05..bdca361713d 100644
> --- sys/dev/usb/if_urndis.c
> +++ sys/dev/usb/if_urndis.c
> @@ -88,10 +88,12 @@ u_int32_t urndis_ctrl_handle_init(struct urndis_softc *,
>      const struct rndis_comp_hdr *);
>  u_int32_t urndis_ctrl_handle_query(struct urndis_softc *,
>      const struct rndis_comp_hdr *, void **, size_t *);
>  u_int32_t urndis_ctrl_handle_reset(struct urndis_softc *,
>      const struct rndis_comp_hdr *);
> +u_int32_t urndis_ctrl_handle_status(struct urndis_softc *,
> +    const struct rndis_comp_hdr *);
>  
>  u_int32_t urndis_ctrl_init(struct urndis_softc *);
>  u_int32_t urndis_ctrl_halt(struct urndis_softc *);
>  u_int32_t urndis_ctrl_query(struct urndis_softc *, u_int32_t, void *, size_t,
>      void **, size_t *);
> @@ -233,10 +235,14 @@ urndis_ctrl_handle(struct urndis_softc *sc, struct 
> rndis_comp_hdr *hdr,
>               case REMOTE_NDIS_KEEPALIVE_CMPLT:
>               case REMOTE_NDIS_SET_CMPLT:
>                       rval = letoh32(hdr->rm_status);
>                       break;
>  
> +             case REMOTE_NDIS_INDICATE_STATUS_MSG:
> +                     rval = urndis_ctrl_handle_status(sc, hdr);
> +                     break;
> +
>               default:
>                       printf("%s: ctrl message error: unknown event 0x%x\n",
>                           DEVNAME(sc), letoh32(hdr->rm_type));
>                       rval = RNDIS_STATUS_FAILURE;
>       }
> @@ -400,10 +406,48 @@ urndis_ctrl_handle_reset(struct urndis_softc *sc,
>  
>       return rval;
>  }
>  
>  u_int32_t
> +urndis_ctrl_handle_status(struct urndis_softc *sc,
> +    const struct rndis_comp_hdr *hdr)
> +{
> +     const struct rndis_status_msg   *msg;
> +     u_int32_t                        rval;
> +
> +     msg = (struct rndis_status_msg *)hdr;
> +
> +     rval = letoh32(msg->rm_status);
> +
> +     DPRINTF(("%s: urndis_ctrl_handle_status: len %u status 0x%x "
> +         "stbuflen %u\n",
> +         DEVNAME(sc),
> +         letoh32(msg->rm_len),
> +         rval,
> +         letoh32(msg->rm_stbuflen)));
> +
> +     switch (rval) {
> +             case RNDIS_STATUS_MEDIA_CONNECT:
> +                     printf("%s: link up\n", DEVNAME(sc));
> +                     break;
> +
> +             case RNDIS_STATUS_MEDIA_DISCONNECT:
> +                     printf("%s: link down\n", DEVNAME(sc));
> +                     break;
> +
> +             /* Ignore these */
> +             case RNDIS_STATUS_OFFLOAD_CURRENT_CONFIG:
> +                     break;
> +
> +             default:
> +                     printf("%s: unknown status 0x%x\n", DEVNAME(sc), rval);
> +     }
> +
> +     return RNDIS_STATUS_SUCCESS;
> +}
> +
> +u_int32_t
>  urndis_ctrl_init(struct urndis_softc *sc)
>  {
>       struct rndis_init_req   *msg;
>       u_int32_t                rval;
>       struct rndis_comp_hdr   *hdr;

Hi,

your diff solved the problem w/ dhclient ending up sleeping upon
"ctrl message error: unknown event 0x7", and instead does print:

urndis0 at uhub1 port 2 configuration 1 interface 0 "SAMSUNG SAMSUNG_Android" 
rev 2.00/ff.ff addr 3
urndis0: using RNDIS, address 02:56:66:63:30:3c
urndis0: link up

the ": link up" does come after i run netstart urndis0, so it
seems to work as i guess you intended, thanks:)

i just connected w/the diff to reply, and have not yet seen
those _decap invalid buffer len 1 msgs, but i haven't caused
any pressure on the connection yet either so i might just not have
triggered those, and so don't know if your diff does help w/that
spam yet.

-Artturi

Reply via email to