/* SPDX-License-Identifier: GPL-2.0 */
|
/* Copyright(c) 2017 - 2019 Pensando Systems, Inc */
|
|
#ifndef _IONIC_RX_FILTER_H_
|
#define _IONIC_RX_FILTER_H_
|
|
#define IONIC_RXQ_INDEX_ANY (0xFFFF)
|
struct ionic_rx_filter {
|
u32 flow_id;
|
u32 filter_id;
|
u16 rxq_index;
|
struct ionic_rx_filter_add_cmd cmd;
|
struct hlist_node by_hash;
|
struct hlist_node by_id;
|
};
|
|
#define IONIC_RX_FILTER_HASH_BITS 10
|
#define IONIC_RX_FILTER_HLISTS BIT(IONIC_RX_FILTER_HASH_BITS)
|
#define IONIC_RX_FILTER_HLISTS_MASK (IONIC_RX_FILTER_HLISTS - 1)
|
struct ionic_rx_filters {
|
spinlock_t lock; /* filter list lock */
|
struct hlist_head by_hash[IONIC_RX_FILTER_HLISTS]; /* by skb hash */
|
struct hlist_head by_id[IONIC_RX_FILTER_HLISTS]; /* by filter_id */
|
};
|
|
void ionic_rx_filter_free(struct ionic_lif *lif, struct ionic_rx_filter *f);
|
void ionic_rx_filter_replay(struct ionic_lif *lif);
|
int ionic_rx_filters_init(struct ionic_lif *lif);
|
void ionic_rx_filters_deinit(struct ionic_lif *lif);
|
int ionic_rx_filter_save(struct ionic_lif *lif, u32 flow_id, u16 rxq_index,
|
u32 hash, struct ionic_admin_ctx *ctx);
|
struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif, u16 vid);
|
struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif, const u8 *addr);
|
|
#endif /* _IONIC_RX_FILTER_H_ */
|