Ping. I haven't heard from Petr yet. Does anyone else
want to review/test/ok this?

On Fri, Jan 10, 2014 at 01:20:41PM +0100, Stefan Sperling wrote:
> On Sun, Jan 05, 2014 at 11:35:51AM +0100, Petr Hoffmann wrote:
> > >Synopsis:      missing packets when not in promiscuous mode
> > >Category:      kernel
> > >Environment:
> >         System      : OpenBSD 5.4
> >         Details     : OpenBSD 5.4-stable (GENERIC.MP) #0: Thu Jan  2
> > 07:25:09 CET 2014
> >                          p...@lambda.my.domain
> > :/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > 
> >         Architecture: OpenBSD.amd64
> >         Machine     : amd64
> > >Description:
> > I have a fresh OpenBSD 5.4 machine that is connected to a network
> > by a USB->Ethernet MCS7830-based adapter handled by the 'mos' driver.
> > While I'm able to establish connections originating on that machine
> > with no problem, it is not possible to connect in the other direction,
> > I even do not see the packets using tcpdump with the -p option (but
> > I saw a packet from the client coming to 224.0.0.252 (a multicast
> > address used by the link-local multicast name resolution protocol).
> > I updated my machine to the -patch version but the problem persists.
> > Both the client and the server machine are on the same IPv4 network,
> > connected directly to the same router.
> > 
> > I figured out that this problem disappears if I start 'tcpdump -i mos0'
> > (mos0 being the interface corresponding to my adapter) but not if I
> > start tcpdump with the -p option (i.e. in the non-promiscuous mode).
> > Unfortunatelly, shortly after exiting the tcpdump, it is not possible
> > to connect anymore (unless I start tcpdump again).
> > 
> > Another workaround is to first establish a connection from my machine
> > to, let's say, a machine X, then it is possible to connect from X to
> > my machine (at least if X is a linux machine).
> > 
> > I conjecture the problem is in that my adapter does not pass ARP
> > who-is requests made by clients and thus they have no IP->MAC mapping.
> > Actually, I see such requests when in the promiscuous mode but no such
> > requests otherwise. BUT, surprisingly, even in the non-promiscuous
> > mode, I see ARP who-is requests from my router!
> > 
> > At first I thought my router is blocking ARP who-is requests from
> > clients, but if I try to connect to some non-existing IP address,
> > the ARP who-is request arrives to my machine so that's probably not
> > the case.
> > 
> > This problems seems slightly similar to the one below, maybe it will
> > help. I'm new to the OpenBSD world, sorry, I don't know how to
> > refer to that bug correctly:
> > 
> > http://marc.info/?l=openbsd-bugs&m=117897452708054&w=2
> > 
> > >How-To-Repeat:
> > Install a fresh OpenBSD 5.4 machine, configure the only network
> > interface mos0 to use dhcp, and try to connect to that machine
> > e.g. by ssh.
> > >Fix:
> > I know two work arounds:
> > a) tcpdump -i mos0
> > b) connect from the machine to the client trying to establish
> >    the connection at first
> 
> I can reproduce this problem with an MCS7830 mos adapter.
> The patch below seems to fix it. Can you confirm?
> 
> Index: if_mos.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/if_mos.c,v
> retrieving revision 1.22
> diff -u -p -r1.22 if_mos.c
> --- if_mos.c  15 Nov 2013 10:17:39 -0000      1.22
> +++ if_mos.c  10 Jan 2014 11:54:38 -0000
> @@ -558,6 +558,13 @@ mos_iff(struct mos_softc *sc)
>  
>                       ETHER_NEXT_MULTI(step, enm);
>               }
> +             /* 
> +              * The datasheet claims broadcast frames were always accepted
> +              * regardless of filter settings. But the hardware seems to
> +              * filter broadcast frames, so pass them explicitly.
> +              */
> +             h = ether_crc32_be(etherbroadcastaddr, ETHER_ADDR_LEN) >> 26;
> +             hashtbl[h / 8] |= 1 << (h % 8);
>       }
>  
>       mos_write_mcast(sc, (void *)&hashtbl);

Reply via email to