dpdk/drivers/net/ionic/ionic_rx_filter.h
<<
>>
Prefs
   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