Skip to content

Commit 6fc7caa

Browse files
Michael Chandavem330
authored andcommitted
bnxt_en: Fix ipv6 RFS filter matching logic.
Fix bnxt_fltr_match() to match ipv6 source and destination addresses. The function currently only checks ipv4 addresses and will not work corrently on ipv6 filters. Fixes: c0c050c ("bnxt_en: New Broadcom ethernet driver.") Signed-off-by: Michael Chan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ceb3284 commit 6fc7caa

File tree

1 file changed

+17
-5
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+17
-5
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11065,11 +11065,23 @@ static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,
1106511065
struct flow_keys *keys1 = &f1->fkeys;
1106611066
struct flow_keys *keys2 = &f2->fkeys;
1106711067

11068-
if (keys1->addrs.v4addrs.src == keys2->addrs.v4addrs.src &&
11069-
keys1->addrs.v4addrs.dst == keys2->addrs.v4addrs.dst &&
11070-
keys1->ports.ports == keys2->ports.ports &&
11071-
keys1->basic.ip_proto == keys2->basic.ip_proto &&
11072-
keys1->basic.n_proto == keys2->basic.n_proto &&
11068+
if (keys1->basic.n_proto != keys2->basic.n_proto ||
11069+
keys1->basic.ip_proto != keys2->basic.ip_proto)
11070+
return false;
11071+
11072+
if (keys1->basic.n_proto == htons(ETH_P_IP)) {
11073+
if (keys1->addrs.v4addrs.src != keys2->addrs.v4addrs.src ||
11074+
keys1->addrs.v4addrs.dst != keys2->addrs.v4addrs.dst)
11075+
return false;
11076+
} else {
11077+
if (memcmp(&keys1->addrs.v6addrs.src, &keys2->addrs.v6addrs.src,
11078+
sizeof(keys1->addrs.v6addrs.src)) ||
11079+
memcmp(&keys1->addrs.v6addrs.dst, &keys2->addrs.v6addrs.dst,
11080+
sizeof(keys1->addrs.v6addrs.dst)))
11081+
return false;
11082+
}
11083+
11084+
if (keys1->ports.ports == keys2->ports.ports &&
1107311085
keys1->control.flags == keys2->control.flags &&
1107411086
ether_addr_equal(f1->src_mac_addr, f2->src_mac_addr) &&
1107511087
ether_addr_equal(f1->dst_mac_addr, f2->dst_mac_addr))

0 commit comments

Comments
 (0)