1/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 2 * Copyright(c) 2018-2019 Pensando Systems, Inc. All rights reserved. 3 */ 4 5#ifndef _IONIC_RX_FILTER_H_ 6#define _IONIC_RX_FILTER_H_ 7 8#include <rte_spinlock.h> 9 10#include "ionic_osdep.h" 11#include "ionic_if.h" 12 13#define IONIC_RXQ_INDEX_ANY (0xFFFF) 14struct ionic_rx_filter { 15 uint32_t flow_id; 16 uint32_t filter_id; 17 uint16_t rxq_index; 18 uint16_t match; 19 struct ionic_rx_filter_add_cmd cmd; 20 LIST_ENTRY(ionic_rx_filter) by_hash; 21 LIST_ENTRY(ionic_rx_filter) by_id; 22}; 23 24#define IONIC_RX_FILTER_HLISTS (1 << 10) 25#define IONIC_RX_FILTER_HLISTS_MASK (IONIC_RX_FILTER_HLISTS - 1) 26struct ionic_rx_filters { 27 rte_spinlock_t lock; 28 LIST_HEAD(rx_filters_by_hash, ionic_rx_filter) 29 by_hash[IONIC_RX_FILTER_HLISTS]; /* by pkt hash */ 30 LIST_HEAD(rx_filters_by_id, ionic_rx_filter) 31 by_id[IONIC_RX_FILTER_HLISTS]; /* by filter_id */ 32}; 33 34struct ionic_admin_ctx; 35struct ionic_lif; 36 37void ionic_rx_filter_free(struct ionic_rx_filter *f); 38int ionic_rx_filters_init(struct ionic_lif *lif); 39void ionic_rx_filters_deinit(struct ionic_lif *lif); 40int ionic_rx_filter_save(struct ionic_lif *lif, uint32_t flow_id, 41 uint16_t rxq_index, struct ionic_admin_ctx *ctx); 42struct ionic_rx_filter *ionic_rx_filter_by_vlan(struct ionic_lif *lif, 43 uint16_t vid); 44struct ionic_rx_filter *ionic_rx_filter_by_addr(struct ionic_lif *lif, 45 const uint8_t *addr); 46 47#endif /* _IONIC_RX_FILTER_H_ */ 48