@@ -11065,11 +11065,23 @@ static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,
11065
11065
struct flow_keys * keys1 = & f1 -> fkeys ;
11066
11066
struct flow_keys * keys2 = & f2 -> fkeys ;
11067
11067
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 &&
11073
11085
keys1 -> control .flags == keys2 -> control .flags &&
11074
11086
ether_addr_equal (f1 -> src_mac_addr , f2 -> src_mac_addr ) &&
11075
11087
ether_addr_equal (f1 -> dst_mac_addr , f2 -> dst_mac_addr ))
@@ -11361,7 +11373,7 @@ int bnxt_get_port_parent_id(struct net_device *dev,
11361
11373
return - EOPNOTSUPP ;
11362
11374
11363
11375
/* The PF and it's VF-reps only support the switchdev framework */
11364
- if (!BNXT_PF (bp ))
11376
+ if (!BNXT_PF (bp ) || !( bp -> flags & BNXT_FLAG_DSN_VALID ) )
11365
11377
return - EOPNOTSUPP ;
11366
11378
11367
11379
ppid -> id_len = sizeof (bp -> switch_id );
@@ -11734,6 +11746,7 @@ static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
11734
11746
put_unaligned_le32 (dw , & dsn [0 ]);
11735
11747
pci_read_config_dword (pdev , pos + 4 , & dw );
11736
11748
put_unaligned_le32 (dw , & dsn [4 ]);
11749
+ bp -> flags |= BNXT_FLAG_DSN_VALID ;
11737
11750
return 0 ;
11738
11751
}
11739
11752
@@ -11845,9 +11858,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
11845
11858
11846
11859
if (BNXT_PF (bp )) {
11847
11860
/* Read the adapter's DSN to use as the eswitch switch_id */
11848
- rc = bnxt_pcie_dsn_get (bp , bp -> switch_id );
11849
- if (rc )
11850
- goto init_err_pci_clean ;
11861
+ bnxt_pcie_dsn_get (bp , bp -> switch_id );
11851
11862
}
11852
11863
11853
11864
/* MTU range: 60 - FW defined max */
0 commit comments