aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Karbowski <rkarbowski2@gmail.com>2024-05-19 12:40:03 +0200
committerJiri Pirko <jiri@nvidia.com>2024-05-20 17:07:47 +0200
commit337125ce8d24ed66d7f4c7e6eef50458f3e7d154 (patch)
tree287b3310183b93bd30e1f25c4d61a7854464c460
parent4eb54a811bef43da2be9cc84009567e5d6ca9741 (diff)
downloadlibteam-master.tar.gz
teamd: lw: arp_ping: bitmask VID in VLAN BPF filterHEADmaster
BPF filter arp_vlan_rpl_flt fails if in the ARP response the VLAN tag has, in addition to VID, also PCP (priority code point). This patch is masking the last 12 bits from SKF_AD_VLAN_TAG field to extract VID only. Signed-off-by: Robert Karbowski <robert_karbowski@hotmail.com> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
-rw-r--r--teamd/teamd_lw_arp_ping.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/teamd/teamd_lw_arp_ping.c b/teamd/teamd_lw_arp_ping.c
index c3d4710..5b5c044 100644
--- a/teamd/teamd_lw_arp_ping.c
+++ b/teamd/teamd_lw_arp_ping.c
@@ -90,10 +90,11 @@ static const struct sock_fprog arp_novlan_rpl_fprog = {
static struct sock_filter arp_vlan_rpl_flt[] = {
BPF_STMT(BPF_LD + BPF_B + BPF_ABS, SKF_AD_OFF + SKF_AD_PROTOCOL),
- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETH_P_ARP, 0, 8),
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ETH_P_ARP, 0, 9),
BPF_STMT(BPF_LD + BPF_B + BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT),
- BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 6, 0),
+ BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0, 7, 0),
BPF_STMT(BPF_LD + BPF_B + BPF_ABS, SKF_AD_OFF + SKF_AD_VLAN_TAG),
+ BPF_STMT(BPF_ALU + BPF_AND + BPF_K, 0xfff),
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, 0xffff, 0, 4), /* 0xffff will be replaced by vland id */
BPF_STMT(BPF_LD + BPF_H + BPF_ABS, OFFSET_ARP_OP_CODE),
BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, ARPOP_REPLY, 1, 0),
@@ -103,7 +104,7 @@ static struct sock_filter arp_vlan_rpl_flt[] = {
};
/* this hack replaces vlanid value in filter code */
-#define SET_FILTER_VLANID(fprog, vlanid) (fprog)->filter[5].k = vlanid
+#define SET_FILTER_VLANID(fprog, vlanid) (fprog)->filter[6].k = vlanid
static const struct sock_fprog arp_vlan_rpl_fprog = {
.len = ARRAY_SIZE(arp_vlan_rpl_flt),