Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Oct 2022 10:22:38 -0500
From:      Mike Karels <mike@karels.net>
To:        Ronald Klop <ronald-lists@klop.ws>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: wake-on-lan lost from rpi4 (works on rpi3)
Message-ID:  <676FFB6B-0D38-47D4-AED8-EA2D5F685F43@karels.net>
In-Reply-To: <1407175820.10534.1666707226593@localhost>
References:  <108673236.151493.1666699064016@localhost> <64FDF71E-B0B8-4625-833E-CCA62785DEB4@karels.net> <1407175820.10534.1666707226593@localhost>

next in thread | previous in thread | raw e-mail | index | archive | help
On 25 Oct 2022, at 9:13, Ronald Klop wrote:

> Van: Mike Karels <mike@karels.net>
> Datum: dinsdag, 25 oktober 2022 14:55
> Aan: Ronald Klop <ronald-lists@klop.ws>
> CC: freebsd-arm@freebsd.org
> Onderwerp: Re: wake-on-lan lost from rpi4 (works on rpi3)
>>
>> On 25 Oct 2022, at 6:57, Ronald Klop wrote:
>>
>>> Hi,
>>>
>>> When I do "wake ue0 `cat /home/ronald/freenas.ethernet `" on my RPI3B=
+ my NAS boots and tcpdump shows the following line on my rpi3 as well as=
 on my router.
>>> 13:39:44.344111 IPX 00217046.6c:da:00:21:70:46.6cda > 00217046.6c:da:=
00:21:70:46.6cda: ipx-#6cda 65505
>>>
>>> When I do "wake genet0 `cat /home/ronald/freenas.ethernet `" on my RP=
I4 my NAS does not boot and tcpdump only show this on my rpi4 and *not* o=
n my router.
>>> 13:37:26.448251 IPX 00217046.6c:da:00:21:70:46.6cda > 00217046.6c:da:=
00:21:70:46.6cda: ipx-#6cda 65505
>>>
>>> Firewall ipfw does not indicate that it blocks anything.
>>>
>>> RPI4 runs:
>>> FreeBSD rpi4 14.0-CURRENT FreeBSD 14.0-CURRENT #11 main-4f0c9b76cf: S=
at Aug 13 23:59:19 CEST 2022     ronald@rpi4:/home/ronald/dev/obj/home/ro=
nald/dev/freebsd/arm64.aarch64/sys/GENERIC-NODEBUG arm64
>>>
>>> genet0: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> =
metric 0 mtu 1500
>>>    options=3D68000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE,RXCSUM_IPV6,TXCS=
UM_IPV6>
>>>
>>>
>>> RPI3 runs:
>>> FreeBSD rpi3 13.1-RELEASE-p2 FreeBSD 13.1-RELEASE-p2 GENERIC arm64
>>>
>>> ue0: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> met=
ric 0 mtu 1500
>>>    options=3D80009<RXCSUM,VLAN_MTU,LINKSTATE>
>>>
>>>
>>> Does genet0 not support these packages?
>>> What can prevent this packet to go on the ethernet while tcpdump stil=
l shows it is outgoing on the interface?
>>> genet0 does have a vlan configured connected to a bridge0 for some ja=
ils
>>> vlan3: flags=3D8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> m=
etric 0 mtu 1500
>>>    options=3D80000<LINKSTATE>
>>>    groups: vlan
>>>    vlan: 3 vlanproto: 802.1q vlanpcp: 0 parent interface: genet0
>>>
>>> ue0 is itself connected to a bridge0
>>
>> Is the RPI3 also on a vlan and bridge?
>>
>> Is the router (or switch) expecting the packet on the vlan?
>> If so, maybe you need to send on vlan3 rather than genet0.
>>
>> The genet interface has some oddities about packet layouts;
>> that could be hitting here.  You could try disabling TCP TX
>> checksum offload: ifconfig genet0 -txcsum -txcsum6; that
>> simplifies some of the issues.
>>
>>         Mike
>>
>>> Regards,
>>> Ronald.
>
>
> Hi,
>
> Thanks for the hint. I experimented some further.
>
> Disabling -txcsum -rxcsum didn't matter.

-rxcsum doesn=E2=80=99t matter, but you need to do -txcsum6 as well as
-txcsum.  (See the code that calls gen_parse_tx.)

> But when I use bridge0 or vlan3 as device then it goes into the wire bu=
t on the VLAN which is not where my NAS is which I want to boot.
>
> Looking at the driver I found this interesting peace of code.
>
> static int
> gen_parse_tx(struct mbuf *m, int csum_flags) {
> ...
>        if (ether_type =3D=3D ETHERTYPE_IP) {
>                COPY(((struct ip *)p)->ip_hl << 2);
>                offset +=3D ((struct ip *)p)->ip_hl << 2;
>        } else if (ether_type =3D=3D ETHERTYPE_IPV6) {
>                COPY(sizeof(struct ip6_hdr));
>                offset +=3D sizeof(struct ip6_hdr);
>        } else {
>                /*
>                 * Unknown whether other cases require moving a header;
>                 * ARP works without.
>                 */
>        }
> ...
> }
>
> There is also some code which handles EHTERTYPE_VLAN.
>
> I don't have time to start debugging this today. But would this ring a =
bell to anybody in connection to a wake-on-lan packet?

I ran some experiments with tx checksum disabled, and it seems to
matter.  I have a change for the last block you listed that might
help, but I haven=E2=80=99t tested it yet.

		Mike

> Regards,
> Ronald.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?676FFB6B-0D38-47D4-AED8-EA2D5F685F43>