[PATCH] l2_packet: Enable receiving priority tagged (VID 0) frames

R. Christian McDonald rcm at rcm.sh
Thu Jun 15 09:18:12 PDT 2023


This patch has been superseded by http://lists.infradead.org/pipermail/hostap/2023-June/041627.html

This patch fails to account for handling encapsulated packets offsets on all platforms. The patch above is complete for FreeBSD. Other platforms will require additional work.


------- Original Message -------
On Thursday, June 15th, 2023 at 12:15 PM, R. Christian McDonald <rcm at rcm.sh> wrote:


> 
> 
> Certain internet service providers transmit vlan 0 priority tagged
> EAPOL frames from the ONT towards the residential gateway. VID 0
> should be ignored, and the frame processed according to the priority
> set in the 802.1P bits and the encapsulated EtherType (i.e. EAPOL).
> 
> The pcap filter utilized by l2_packet is inadquate for this use case.
> 
> Here we modify the pcap filter to accept both unencapsulated and
> encapsulated (with VLAN 0) EAPOL EtherTypes. This preserves the
> original filter behavior while also matching on encapsulated EAPOL.
> 
> Signed-off-by: R. Christian McDonald rcm at rcm.sh
> 
> Sponsored by: Rubicon Communications, LLC ("Netgate")
> ---
> src/l2_packet/l2_packet_freebsd.c | 4 ++--
> src/l2_packet/l2_packet_pcap.c | 4 ++--
> src/l2_packet/l2_packet_winpcap.c | 4 ++--
> 3 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/src/l2_packet/l2_packet_freebsd.c b/src/l2_packet/l2_packet_freebsd.c
> index 60de9fe6b..cefcc0545 100644
> --- a/src/l2_packet/l2_packet_freebsd.c
> +++ b/src/l2_packet/l2_packet_freebsd.c
> @@ -122,10 +122,10 @@ static int l2_packet_init_libpcap(struct l2_packet_data l2,
> os_snprintf(pcap_filter, sizeof(pcap_filter),
> "not ether src " MACSTR " and "
> "( ether dst " MACSTR " or ether dst " MACSTR " ) and "
> - "ether proto 0x%x",
> + "( ether proto 0x%x or ( vlan 0 and ether proto 0x%x ) )",
> MAC2STR(l2->own_addr), / do not receive own packets */
> 
> MAC2STR(l2->own_addr), MAC2STR(pae_group_addr),
> 
> - protocol);
> + protocol, protocol);
> if (pcap_compile(l2->pcap, &pcap_fp, pcap_filter, 1, pcap_netp) < 0) {
> 
> fprintf(stderr, "pcap_compile: %s\n", pcap_geterr(l2->pcap));
> 
> return -1;
> diff --git a/src/l2_packet/l2_packet_pcap.c b/src/l2_packet/l2_packet_pcap.c
> index c2b17fcf8..e05be9902 100644
> --- a/src/l2_packet/l2_packet_pcap.c
> +++ b/src/l2_packet/l2_packet_pcap.c
> @@ -232,10 +232,10 @@ static int l2_packet_init_libpcap(struct l2_packet_data l2,
> os_snprintf(pcap_filter, sizeof(pcap_filter),
> "not ether src " MACSTR " and "
> "( ether dst " MACSTR " or ether dst " MACSTR " ) and "
> - "ether proto 0x%x",
> + "( ether proto 0x%x or ( vlan 0 and ether proto 0x%x) )",
> MAC2STR(l2->own_addr), / do not receive own packets */
> 
> MAC2STR(l2->own_addr), MAC2STR(pae_group_addr),
> 
> - protocol);
> + protocol, protocol);
> if (pcap_compile(l2->pcap, &pcap_fp, pcap_filter, 1, pcap_netp) < 0) {
> 
> fprintf(stderr, "pcap_compile: %s\n", pcap_geterr(l2->pcap));
> 
> return -1;
> diff --git a/src/l2_packet/l2_packet_winpcap.c b/src/l2_packet/l2_packet_winpcap.c
> index 3452051f5..14ef85655 100644
> --- a/src/l2_packet/l2_packet_winpcap.c
> +++ b/src/l2_packet/l2_packet_winpcap.c
> @@ -175,10 +175,10 @@ static int l2_packet_init_libpcap(struct l2_packet_data l2,
> os_snprintf(pcap_filter, sizeof(pcap_filter),
> "not ether src " MACSTR " and "
> "( ether dst " MACSTR " or ether dst " MACSTR " ) and "
> - "ether proto 0x%x",
> + "( ether proto 0x%x or ( vlan 0 and ether proto 0x%x ) )",
> MAC2STR(l2->own_addr), / do not receive own packets */
> 
> MAC2STR(l2->own_addr), MAC2STR(pae_group_addr),
> 
> - protocol);
> + protocol, protocol);
> if (pcap_compile(l2->pcap, &pcap_fp, pcap_filter, 1, pcap_netp) < 0) {
> 
> fprintf(stderr, "pcap_compile: %s\n", pcap_geterr(l2->pcap));
> 
> return -1;
> --
> 2.41.0
> 
> _______________________________________________
> Hostap mailing list
> Hostap at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/hostap



More information about the Hostap mailing list