From: Steve Yang <stevex.yang@intel.com> To: dev@dpdk.org Cc: jia.guo@intel.com, haiyue.wang@intel.com, qiming.yang@intel.com, beilei.xing@intel.com, orika@nvidia.com, murphyx.yang@intel.com, Steve Yang <stevex.yang@intel.com> Subject: [dpdk-dev] [RFC v2 4/6] net/ixgbe: add mirror rule config and add/del rule APIs Date: Tue, 3 Nov 2020 08:28:07 +0000 Message-ID: <20201103082809.41149-5-stevex.yang@intel.com> (raw) In-Reply-To: <20201103082809.41149-1-stevex.yang@intel.com> Define ixgbe_flow_mirror_conf structure that is used for set mirror flow rule to ixgbe register, and relocate the mirror related MACORs to header file. Signed-off-by: Steve Yang <stevex.yang@intel.com> --- drivers/net/ixgbe/ixgbe_ethdev.c | 8 ----- drivers/net/ixgbe/ixgbe_ethdev.h | 54 ++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 9a47a8b26..cc07b0e31 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -5724,14 +5724,6 @@ ixgbe_convert_vm_rx_mask_to_val(uint16_t rx_mask, uint32_t orig_val) return new_val; } -#define IXGBE_MRCTL_VPME 0x01 /* Virtual Pool Mirroring. */ -#define IXGBE_MRCTL_UPME 0x02 /* Uplink Port Mirroring. */ -#define IXGBE_MRCTL_DPME 0x04 /* Downlink Port Mirroring. */ -#define IXGBE_MRCTL_VLME 0x08 /* VLAN Mirroring. */ -#define IXGBE_INVALID_MIRROR_TYPE(mirror_type) \ - ((mirror_type) & ~(uint8_t)(ETH_MIRROR_VIRTUAL_POOL_UP | \ - ETH_MIRROR_UPLINK_PORT | ETH_MIRROR_DOWNLINK_PORT | ETH_MIRROR_VLAN)) - static int ixgbe_mirror_rule_set(struct rte_eth_dev *dev, struct rte_eth_mirror_conf *mirror_conf, diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h index 3d35ea791..db95a53f1 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.h +++ b/drivers/net/ixgbe/ixgbe_ethdev.h @@ -216,6 +216,27 @@ struct ixgbe_rte_flow_rss_conf { uint16_t queue[IXGBE_MAX_RX_QUEUE_NUM]; /**< Queues indices to use. */ }; +#define IXGBE_MAX_MIRROR_RULES 4 /* Maximum nb. of mirror rules. */ +#define IXGBE_MRCTL_VPME 0x01 /* Virtual Pool Mirroring. */ +#define IXGBE_MRCTL_UPME 0x02 /* Uplink Port Mirroring. */ +#define IXGBE_MRCTL_DPME 0x04 /* Downlink Port Mirroring. */ +#define IXGBE_MRCTL_VLME 0x08 /* VLAN Mirroring. */ +#define IXGBE_INVALID_MIRROR_TYPE(mirror_type) \ + ((mirror_type) & ~(uint8_t)(ETH_MIRROR_VIRTUAL_POOL_UP |\ + ETH_MIRROR_UPLINK_PORT | \ + ETH_MIRROR_DOWNLINK_PORT | \ + ETH_MIRROR_VLAN)) + +struct ixgbe_flow_mirror_conf { + uint8_t rule_type; + uint16_t rule_id; + uint8_t dst_pool; /* Destination pool for this mirror rule. */ + uint64_t pool_mask; /* Bitmap of pool for virtual pool mirroring */ + uint64_t vlan_mask; /* mask for valid VLAN ID. */ + /* VLAN ID list for vlan mirroring. */ + uint16_t vlan_id[ETH_MIRROR_MAX_VLANS]; +}; + /* structure for interrupt relative data */ struct ixgbe_interrupt { uint32_t flags; @@ -250,8 +271,6 @@ struct ixgbe_uta_info { uint32_t uta_shadow[IXGBE_MAX_UTA]; }; -#define IXGBE_MAX_MIRROR_RULES 4 /* Maximum nb. of mirror rules. */ - struct ixgbe_mirror_info { struct rte_eth_mirror_conf mr_conf[IXGBE_MAX_MIRROR_RULES]; /**< store PF mirror rules configuration*/ @@ -337,6 +356,8 @@ struct ixgbe_filter_info { uint32_t syn_info; /* store the rss filter info */ struct ixgbe_rte_flow_rss_conf rss_info; + uint8_t mirror_mask; /* Bit mask for every used mirror filter */ + struct ixgbe_flow_mirror_conf mirror_filters[IXGBE_MAX_MIRROR_RULES]; }; struct ixgbe_l2_tn_key { @@ -830,4 +851,33 @@ ixgbe_ethertype_filter_remove(struct ixgbe_filter_info *filter_info, return idx; } +static inline int8_t +ixgbe_mirror_filter_insert(struct ixgbe_filter_info *filter_info, + struct ixgbe_flow_mirror_conf *mirror_conf) +{ + int i; + + for (i = 0; i < IXGBE_MAX_MIRROR_RULES; i++) { + if (!(filter_info->mirror_mask & (1 << i))) { + filter_info->mirror_mask |= 1 << i; + mirror_conf->rule_id = i; + filter_info->mirror_filters[i] = *mirror_conf; + return i; + } + } + return -1; +} + +static inline int +ixgbe_mirror_filter_remove(struct ixgbe_filter_info *filter_info, + uint8_t idx) +{ + if (idx >= IXGBE_MAX_MIRROR_RULES) + return -1; + filter_info->mirror_mask &= ~(1 << idx); + memset(&filter_info->mirror_filters[idx], 0, + sizeof(filter_info->mirror_filters[0])); + return idx; +} + #endif /* _IXGBE_ETHDEV_H_ */ -- 2.17.1
next prev parent reply other threads:[~2020-11-03 8:30 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-14 8:41 [dpdk-dev] [PATCH v1 0/8] use generic flow command to re-realize mirror rule SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 1/8] ethdev: support the mirror action for flow SimonX Lu 2020-10-14 12:07 ` Ori Kam 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 2/8] app/testpmd: support action mirror for flow command SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 3/8] net/ixgbe: add mirror rule config and extend flow filter type SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 4/8] net/ixgbe: define the mirror filter paser SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 5/8] net/ixgbe: use generic flow command to re-realize mirror rule SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 6/8] net/i40e: add mirror rule config and export add/del rule APIs SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 7/8] net/i40e: define the mirror filter paser SimonX Lu 2020-10-14 8:41 ` [dpdk-dev] [PATCH v1 8/8] net/i40e: use generic flow command to re-realize mirror rule SimonX Lu [not found] ` <20201103082809.41149-1-stevex.yang@intel.com> 2020-11-03 8:28 ` [dpdk-dev] [RFC v2 1/6] net/i40e: add mirror rule config and add/del rule APIs Steve Yang 2020-11-03 8:28 ` [dpdk-dev] [RFC v2 2/6] net/i40e: define the mirror filter parser Steve Yang 2021-02-18 18:59 ` Thomas Monjalon 2021-02-19 12:56 ` Ferruh Yigit 2020-11-03 8:28 ` [dpdk-dev] [RFC v2 3/6] net/i40e: use generic flow command to re-realize mirror rule Steve Yang 2020-11-03 8:28 ` Steve Yang [this message] 2020-11-03 8:28 ` [dpdk-dev] [RFC v2 5/6] net/ixgbe: define the mirror filter parser Steve Yang 2021-02-19 12:57 ` Ferruh Yigit 2020-11-03 8:28 ` [dpdk-dev] [RFC v2 6/6] net/ixgbe: use flow sample to re-realize mirror rule Steve Yang 2021-02-19 12:59 ` Ferruh Yigit
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201103082809.41149-5-stevex.yang@intel.com \ --to=stevex.yang@intel.com \ --cc=beilei.xing@intel.com \ --cc=dev@dpdk.org \ --cc=haiyue.wang@intel.com \ --cc=jia.guo@intel.com \ --cc=murphyx.yang@intel.com \ --cc=orika@nvidia.com \ --cc=qiming.yang@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git