59b328cf56
Matching IPv6 traffic require allocating their own individual slots in TCAM. So, fetch additional slots to insert IPv6 rules. Also, fetch the cumulative stats of all the slots occupied by the Matchall rule. Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
52 lines
1.7 KiB
C
52 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright (C) 2019 Chelsio Communications. All rights reserved. */
|
|
|
|
#ifndef __CXGB4_TC_MATCHALL_H__
|
|
#define __CXGB4_TC_MATCHALL_H__
|
|
|
|
#include <net/pkt_cls.h>
|
|
|
|
enum cxgb4_matchall_state {
|
|
CXGB4_MATCHALL_STATE_DISABLED = 0,
|
|
CXGB4_MATCHALL_STATE_ENABLED,
|
|
};
|
|
|
|
struct cxgb4_matchall_egress_entry {
|
|
enum cxgb4_matchall_state state; /* Current MATCHALL offload state */
|
|
u8 hwtc; /* Traffic class bound to port */
|
|
u64 cookie; /* Used to identify the MATCHALL rule offloaded */
|
|
};
|
|
|
|
struct cxgb4_matchall_ingress_entry {
|
|
enum cxgb4_matchall_state state; /* Current MATCHALL offload state */
|
|
u32 tid[CXGB4_FILTER_TYPE_MAX]; /* Index to hardware filter entries */
|
|
/* Filter entries */
|
|
struct ch_filter_specification fs[CXGB4_FILTER_TYPE_MAX];
|
|
u16 viid_mirror; /* Identifier for allocated Mirror VI */
|
|
u64 bytes; /* # of bytes hitting the filter */
|
|
u64 packets; /* # of packets hitting the filter */
|
|
u64 last_used; /* Last updated jiffies time */
|
|
};
|
|
|
|
struct cxgb4_tc_port_matchall {
|
|
struct cxgb4_matchall_egress_entry egress; /* Egress offload info */
|
|
struct cxgb4_matchall_ingress_entry ingress; /* Ingress offload info */
|
|
};
|
|
|
|
struct cxgb4_tc_matchall {
|
|
struct cxgb4_tc_port_matchall *port_matchall; /* Per port entry */
|
|
};
|
|
|
|
int cxgb4_tc_matchall_replace(struct net_device *dev,
|
|
struct tc_cls_matchall_offload *cls_matchall,
|
|
bool ingress);
|
|
int cxgb4_tc_matchall_destroy(struct net_device *dev,
|
|
struct tc_cls_matchall_offload *cls_matchall,
|
|
bool ingress);
|
|
int cxgb4_tc_matchall_stats(struct net_device *dev,
|
|
struct tc_cls_matchall_offload *cls_matchall);
|
|
|
|
int cxgb4_init_tc_matchall(struct adapter *adap);
|
|
void cxgb4_cleanup_tc_matchall(struct adapter *adap);
|
|
#endif /* __CXGB4_TC_MATCHALL_H__ */
|