? 10 Index: gencode.c =================================================================== RCS file: /cvs/src/lib/libpcap/gencode.c,v retrieving revision 1.55 diff -u -p -r1.55 gencode.c --- gencode.c 3 Aug 2020 03:40:02 -0000 1.55 +++ gencode.c 7 Dec 2020 11:31:12 -0000 @@ -1255,6 +1255,9 @@ gen_host(addr, mask, proto, dir) case Q_STP: bpf_error("'stp' modifier applied to host"); + case Q_LACP: + bpf_error("'lacp' modifier applied to host"); + case Q_ATALK: bpf_error("ATALK host filtering not implemented"); @@ -1337,6 +1340,9 @@ gen_host6(addr, mask, proto, dir) case Q_STP: bpf_error("'stp' modifier applied to host"); + case Q_LACP: + bpf_error("'lacp' modifier applied to host"); + case Q_ATALK: bpf_error("ATALK host filtering not implemented"); @@ -1512,6 +1518,22 @@ gen_proto_abbrev(proto) case Q_STP: b1 = gen_linktype(LLCSAP_8021D); + break; + + case Q_LACP: + if (linktype != DLT_EN10MB) { + b1 = gen_false(); + break; + } + + /* SLOWPROTOCOLS_SUBTYPE_LACP */ + b0 = gen_cmp(off_linktype + 2, BPF_B, 1); + /* SLOWPROTOCOLS_SUBTYPE_LACP_MARKER */ + b1 = gen_cmp(off_linktype + 2, BPF_B, 2); + gen_or(b0, b1); + + b0 = gen_cmp(off_linktype, BPF_H, ETHERTYPE_SLOW); + gen_and(b0, b1); break; #ifdef INET6 Index: gencode.h =================================================================== RCS file: /cvs/src/lib/libpcap/gencode.h,v retrieving revision 1.21 diff -u -p -r1.21 gencode.h --- gencode.h 3 Aug 2020 03:40:02 -0000 1.21 +++ gencode.h 7 Dec 2020 11:31:12 -0000 @@ -58,6 +58,7 @@ #define Q_PIM 20 #define Q_STP 21 +#define Q_LACP 22 /* Directional qualifiers. */ Index: grammar.y =================================================================== RCS file: /cvs/src/lib/libpcap/grammar.y,v retrieving revision 1.22 diff -u -p -r1.22 grammar.y --- grammar.y 3 Aug 2020 03:40:02 -0000 1.22 +++ grammar.y 7 Dec 2020 11:31:12 -0000 @@ -104,7 +104,7 @@ pcap_parse() %token DST SRC HOST GATEWAY %token NET MASK PORT LESS GREATER PROTO PROTOCHAIN BYTE %token ARP RARP IP TCP UDP ICMP IGMP IGRP PIM -%token ATALK DECNET LAT SCA MOPRC MOPDL STP +%token ATALK DECNET LAT SCA MOPRC MOPDL STP LACP %token TK_BROADCAST TK_MULTICAST %token NUM INBOUND OUTBOUND %token PF_IFNAME PF_RSET PF_RNR PF_SRNR PF_REASON PF_ACTION @@ -269,6 +269,7 @@ pname: LINK { $$ = Q_LINK; } | AH { $$ = Q_AH; } | ESP { $$ = Q_ESP; } | STP { $$ = Q_STP; } + | LACP { $$ = Q_LACP; } ; other: pqual TK_BROADCAST { $$ = gen_broadcast($1); } | pqual TK_MULTICAST { $$ = gen_multicast($1); } Index: scanner.l =================================================================== RCS file: /cvs/src/lib/libpcap/scanner.l,v retrieving revision 1.28 diff -u -p -r1.28 scanner.l --- scanner.l 3 Aug 2020 03:40:02 -0000 1.28 +++ scanner.l 7 Dec 2020 11:31:12 -0000 @@ -193,6 +193,7 @@ sca return SCA; moprc return MOPRC; mopdl return MOPDL; stp return STP; +lacp return LACP; host return HOST; net return NET;