ethdev: remove old flow director API

Old flow director API have been replaced by rte_eth_dev_filter_ctrl
since release 2.0. And no driver in current code support these functions.
All the removed functions are listed below:
  - rte_eth_dev_fdir_add_perfect_filter;
  - rte_eth_dev_fdir_add_signature_filter;
  - rte_eth_dev_fdir_get_infos;
  - rte_eth_dev_fdir_remove_perfect_filter;
  - rte_eth_dev_fdir_remove_signature_filter;
  - rte_eth_dev_fdir_set_masks;
  - rte_eth_dev_fdir_update_perfect_filter;
  - rte_eth_dev_fdir_update_signature_filter;

The library version was already incremented in a previous patch.

Signed-off-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
[Thomas: fix mlx4 and update release notes]
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
This commit is contained in:
Jingjing Wu 2015-09-21 15:34:09 +08:00 committed by Thomas Monjalon
parent da44259fbf
commit a421b86a4a
6 changed files with 3 additions and 623 deletions

View File

@ -17,13 +17,6 @@ Deprecation Notices
imissed, ibadcrc, ibadlen, imcasts, fdirmatch, fdirmiss,
tx_pause_xon, rx_pause_xon, tx_pause_xoff, rx_pause_xoff
* API for flow director filters has been replaced by rte_eth_dev_filter_ctrl.
Following old API is deprecated and will be removed with version 2.2 without
backward compatibility.
Functions: rte_eth_dev_fdir_*.
Structures: rte_fdir_*, rte_eth_fdir.
Enums: rte_l4type, rte_iptype.
* ABI changes are planned for struct rte_eth_fdir_flow_ext in order to support
flow director filtering in VF. The release 2.1 does not contain these ABI
changes, but release 2.2 will, and no backwards compatibility is planned.

View File

@ -64,6 +64,9 @@ Known Issues
API Changes
-----------
* The deprecated flow director API is removed.
It was replaced by rte_eth_dev_filter_ctrl().
* The function rte_eal_pci_close_one() is removed.
It was replaced by rte_eal_pci_detach().

View File

@ -575,7 +575,6 @@ static const struct eth_dev_ops enicpmd_eth_dev_ops = {
.priority_flow_ctrl_set = NULL,
.mac_addr_add = enicpmd_add_mac_addr,
.mac_addr_remove = enicpmd_remove_mac_addr,
.fdir_set_masks = NULL,
.filter_ctrl = enicpmd_dev_filter_ctrl,
};

View File

@ -4567,13 +4567,6 @@ static const struct eth_dev_ops mlx4_dev_ops = {
.mtu_set = mlx4_dev_set_mtu,
.udp_tunnel_add = NULL,
.udp_tunnel_del = NULL,
.fdir_add_signature_filter = NULL,
.fdir_update_signature_filter = NULL,
.fdir_remove_signature_filter = NULL,
.fdir_add_perfect_filter = NULL,
.fdir_update_perfect_filter = NULL,
.fdir_remove_perfect_filter = NULL,
.fdir_set_masks = NULL
};
/**

View File

@ -1969,234 +1969,6 @@ rte_eth_dev_set_vlan_pvid(uint8_t port_id, uint16_t pvid, int on)
return 0;
}
int
rte_eth_dev_fdir_add_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint8_t queue)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_SIGNATURE) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type, source & destinations ports "
"should be null!\n");
return -EINVAL;
}
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_add_signature_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_add_signature_filter)(dev, fdir_filter,
queue);
}
int
rte_eth_dev_fdir_update_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint8_t queue)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_SIGNATURE) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type, source & destinations ports "
"should be null!\n");
return -EINVAL;
}
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_update_signature_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_update_signature_filter)(dev, fdir_filter,
queue);
}
int
rte_eth_dev_fdir_remove_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_SIGNATURE) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type source & destinations ports "
"should be null!\n");
return -EINVAL;
}
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_remove_signature_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_remove_signature_filter)(dev, fdir_filter);
}
int
rte_eth_dev_fdir_get_infos(uint8_t port_id, struct rte_eth_fdir *fdir)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (!(dev->data->dev_conf.fdir_conf.mode)) {
PMD_DEBUG_TRACE("port %d: pkt-filter disabled\n", port_id);
return -ENOSYS;
}
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_infos_get, -ENOTSUP);
(*dev->dev_ops->fdir_infos_get)(dev, fdir);
return 0;
}
int
rte_eth_dev_fdir_add_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id, uint8_t queue,
uint8_t drop)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type, source & destinations ports "
"should be null!\n");
return -EINVAL;
}
/* For now IPv6 is not supported with perfect filter */
if (fdir_filter->iptype == RTE_FDIR_IPTYPE_IPV6)
return -ENOTSUP;
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_add_perfect_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_add_perfect_filter)(dev, fdir_filter,
soft_id, queue,
drop);
}
int
rte_eth_dev_fdir_update_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id, uint8_t queue,
uint8_t drop)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type, source & destinations ports "
"should be null!\n");
return -EINVAL;
}
/* For now IPv6 is not supported with perfect filter */
if (fdir_filter->iptype == RTE_FDIR_IPTYPE_IPV6)
return -ENOTSUP;
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_update_perfect_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_update_perfect_filter)(dev, fdir_filter,
soft_id, queue, drop);
}
int
rte_eth_dev_fdir_remove_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_PERFECT) {
PMD_DEBUG_TRACE("port %d: invalid FDIR mode=%u\n",
port_id, dev->data->dev_conf.fdir_conf.mode);
return -ENOSYS;
}
if ((fdir_filter->l4type == RTE_FDIR_L4TYPE_SCTP
|| fdir_filter->l4type == RTE_FDIR_L4TYPE_NONE)
&& (fdir_filter->port_src || fdir_filter->port_dst)) {
PMD_DEBUG_TRACE(" Port are meaningless for SCTP and "
"None l4type, source & destinations ports "
"should be null!\n");
return -EINVAL;
}
/* For now IPv6 is not supported with perfect filter */
if (fdir_filter->iptype == RTE_FDIR_IPTYPE_IPV6)
return -ENOTSUP;
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_remove_perfect_filter, -ENOTSUP);
return (*dev->dev_ops->fdir_remove_perfect_filter)(dev, fdir_filter,
soft_id);
}
int
rte_eth_dev_fdir_set_masks(uint8_t port_id, struct rte_fdir_masks *fdir_mask)
{
struct rte_eth_dev *dev;
VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
dev = &rte_eth_devices[port_id];
if (!(dev->data->dev_conf.fdir_conf.mode)) {
PMD_DEBUG_TRACE("port %d: pkt-filter disabled\n", port_id);
return -ENOSYS;
}
FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fdir_set_masks, -ENOTSUP);
return (*dev->dev_ops->fdir_set_masks)(dev, fdir_mask);
}
int
rte_eth_dev_flow_ctrl_get(uint8_t port_id, struct rte_eth_fc_conf *fc_conf)
{

View File

@ -731,114 +731,6 @@ struct rte_eth_udp_tunnel {
uint8_t prot_type;
};
/**
* Possible l4type of FDIR filters.
*/
enum rte_l4type {
RTE_FDIR_L4TYPE_NONE = 0, /**< None. */
RTE_FDIR_L4TYPE_UDP, /**< UDP. */
RTE_FDIR_L4TYPE_TCP, /**< TCP. */
RTE_FDIR_L4TYPE_SCTP, /**< SCTP. */
};
/**
* Select IPv4 or IPv6 FDIR filters.
*/
enum rte_iptype {
RTE_FDIR_IPTYPE_IPV4 = 0, /**< IPv4. */
RTE_FDIR_IPTYPE_IPV6 , /**< IPv6. */
};
/**
* A structure used to define a FDIR packet filter.
*/
struct rte_fdir_filter {
uint16_t flex_bytes; /**< Flex bytes value to match. */
uint16_t vlan_id; /**< VLAN ID value to match, 0 otherwise. */
uint16_t port_src; /**< Source port to match, 0 otherwise. */
uint16_t port_dst; /**< Destination port to match, 0 otherwise. */
union {
uint32_t ipv4_addr; /**< IPv4 source address to match. */
uint32_t ipv6_addr[4]; /**< IPv6 source address to match. */
} ip_src; /**< IPv4/IPv6 source address to match (union of above). */
union {
uint32_t ipv4_addr; /**< IPv4 destination address to match. */
uint32_t ipv6_addr[4]; /**< IPv6 destination address to match */
} ip_dst; /**< IPv4/IPv6 destination address to match (union of above). */
enum rte_l4type l4type; /**< l4type to match: NONE/UDP/TCP/SCTP. */
enum rte_iptype iptype; /**< IP packet type to match: IPv4 or IPv6. */
};
/**
* A structure used to configure FDIR masks that are used by the device
* to match the various fields of RX packet headers.
* @note The only_ip_flow field has the opposite meaning compared to other
* masks!
*/
struct rte_fdir_masks {
/** When set to 1, packet l4type is \b NOT relevant in filters, and
source and destination port masks must be set to zero. */
uint8_t only_ip_flow;
/** If set to 1, vlan_id is relevant in filters. */
uint8_t vlan_id;
/** If set to 1, vlan_prio is relevant in filters. */
uint8_t vlan_prio;
/** If set to 1, flexbytes is relevant in filters. */
uint8_t flexbytes;
/** If set to 1, set the IPv6 masks. Otherwise set the IPv4 masks. */
uint8_t set_ipv6_mask;
/** When set to 1, comparison of destination IPv6 address with IP6AT
registers is meaningful. */
uint8_t comp_ipv6_dst;
/** Mask of Destination IPv4 Address. All bits set to 1 define the
relevant bits to use in the destination address of an IPv4 packet
when matching it against FDIR filters. */
uint32_t dst_ipv4_mask;
/** Mask of Source IPv4 Address. All bits set to 1 define
the relevant bits to use in the source address of an IPv4 packet
when matching it against FDIR filters. */
uint32_t src_ipv4_mask;
/** Mask of Source IPv6 Address. All bits set to 1 define the
relevant BYTES to use in the source address of an IPv6 packet
when matching it against FDIR filters. */
uint16_t dst_ipv6_mask;
/** Mask of Destination IPv6 Address. All bits set to 1 define the
relevant BYTES to use in the destination address of an IPv6 packet
when matching it against FDIR filters. */
uint16_t src_ipv6_mask;
/** Mask of Source Port. All bits set to 1 define the relevant
bits to use in the source port of an IP packets when matching it
against FDIR filters. */
uint16_t src_port_mask;
/** Mask of Destination Port. All bits set to 1 define the relevant
bits to use in the destination port of an IP packet when matching it
against FDIR filters. */
uint16_t dst_port_mask;
};
/**
* A structure used to report the status of the flow director filters in use.
*/
struct rte_eth_fdir {
/** Number of filters with collision indication. */
uint16_t collision;
/** Number of free (non programmed) filters. */
uint16_t free;
/** The Lookup hash value of the added filter that updated the value
of the MAXLEN field */
uint16_t maxhash;
/** Longest linked list of filters in the table. */
uint8_t maxlen;
/** Number of added filters. */
uint64_t add;
/** Number of removed filters. */
uint64_t remove;
/** Number of failed added filters (no more space in device). */
uint64_t f_add;
/** Number of failed removed filters. */
uint64_t f_remove;
};
/**
* A structure used to enable/disable specific device interrupts.
*/
@ -1108,45 +1000,6 @@ typedef uint16_t (*eth_tx_burst_t)(void *txq,
uint16_t nb_pkts);
/**< @internal Send output packets on a transmit queue of an Ethernet device. */
typedef int (*fdir_add_signature_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr,
uint8_t rx_queue);
/**< @internal Setup a new signature filter rule on an Ethernet device */
typedef int (*fdir_update_signature_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr,
uint8_t rx_queue);
/**< @internal Update a signature filter rule on an Ethernet device */
typedef int (*fdir_remove_signature_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr);
/**< @internal Remove a signature filter rule on an Ethernet device */
typedef void (*fdir_infos_get_t)(struct rte_eth_dev *dev,
struct rte_eth_fdir *fdir);
/**< @internal Get information about fdir status */
typedef int (*fdir_add_perfect_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr,
uint16_t soft_id, uint8_t rx_queue,
uint8_t drop);
/**< @internal Setup a new perfect filter rule on an Ethernet device */
typedef int (*fdir_update_perfect_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr,
uint16_t soft_id, uint8_t rx_queue,
uint8_t drop);
/**< @internal Update a perfect filter rule on an Ethernet device */
typedef int (*fdir_remove_perfect_filter_t)(struct rte_eth_dev *dev,
struct rte_fdir_filter *fdir_ftr,
uint16_t soft_id);
/**< @internal Remove a perfect filter rule on an Ethernet device */
typedef int (*fdir_set_masks_t)(struct rte_eth_dev *dev,
struct rte_fdir_masks *fdir_masks);
/**< @internal Setup flow director masks on an Ethernet device */
typedef int (*flow_ctrl_get_t)(struct rte_eth_dev *dev,
struct rte_eth_fc_conf *fc_conf);
/**< @internal Get current flow control parameter on an Ethernet device */
@ -1416,23 +1269,6 @@ struct eth_dev_ops {
eth_udp_tunnel_del_t udp_tunnel_del;
eth_set_queue_rate_limit_t set_queue_rate_limit; /**< Set queue rate limit */
eth_set_vf_rate_limit_t set_vf_rate_limit; /**< Set VF rate limit */
/** Add a signature filter. */
fdir_add_signature_filter_t fdir_add_signature_filter;
/** Update a signature filter. */
fdir_update_signature_filter_t fdir_update_signature_filter;
/** Remove a signature filter. */
fdir_remove_signature_filter_t fdir_remove_signature_filter;
/** Get information about FDIR status. */
fdir_infos_get_t fdir_infos_get;
/** Add a perfect filter. */
fdir_add_perfect_filter_t fdir_add_perfect_filter;
/** Update a perfect filter. */
fdir_update_perfect_filter_t fdir_update_perfect_filter;
/** Remove a perfect filter. */
fdir_remove_perfect_filter_t fdir_remove_perfect_filter;
/** Setup masks for FDIR filtering. */
fdir_set_masks_t fdir_set_masks;
/** Update redirection table. */
reta_update_t reta_update;
/** Query redirection table. */
@ -2682,222 +2518,6 @@ rte_eth_tx_burst(uint8_t port_id, uint16_t queue_id,
}
#endif
/**
* Setup a new signature filter rule on an Ethernet device
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_filter
* The pointer to the fdir filter structure describing the signature filter
* rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* @param rx_queue
* The index of the RX queue where to store RX packets matching the added
* signature filter defined in fdir_filter.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the FDIR mode is not configured in signature mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_add_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint8_t rx_queue);
/**
* Update a signature filter rule on an Ethernet device.
* If the rule doesn't exits, it is created.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_ftr
* The pointer to the structure describing the signature filter rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* @param rx_queue
* The index of the RX queue where to store RX packets matching the added
* signature filter defined in fdir_ftr.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in signature mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_update_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_ftr,
uint8_t rx_queue);
/**
* Remove a signature filter rule on an Ethernet device.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_ftr
* The pointer to the structure describing the signature filter rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in signature mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_remove_signature_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_ftr);
/**
* Retrieve the flow director information of an Ethernet device.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir
* A pointer to a structure of type *rte_eth_dev_fdir* to be filled with
* the flow director information of the Ethernet device.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured on *port_id*.
*/
int rte_eth_dev_fdir_get_infos(uint8_t port_id, struct rte_eth_fdir *fdir);
/**
* Add a new perfect filter rule on an Ethernet device.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_filter
* The pointer to the structure describing the perfect filter rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* IPv6 are not supported.
* @param soft_id
* The 16-bit value supplied in the field hash.fdir.id of mbuf for RX
* packets matching the perfect filter.
* @param rx_queue
* The index of the RX queue where to store RX packets matching the added
* perfect filter defined in fdir_filter.
* @param drop
* If drop is set to 1, matching RX packets are stored into the RX drop
* queue defined in the rte_fdir_conf.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in perfect mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_add_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id, uint8_t rx_queue,
uint8_t drop);
/**
* Update a perfect filter rule on an Ethernet device.
* If the rule doesn't exits, it is created.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_filter
* The pointer to the structure describing the perfect filter rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* IPv6 are not supported.
* @param soft_id
* The 16-bit value supplied in the field hash.fdir.id of mbuf for RX
* packets matching the perfect filter.
* @param rx_queue
* The index of the RX queue where to store RX packets matching the added
* perfect filter defined in fdir_filter.
* @param drop
* If drop is set to 1, matching RX packets are stored into the RX drop
* queue defined in the rte_fdir_conf.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in perfect mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_update_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id, uint8_t rx_queue,
uint8_t drop);
/**
* Remove a perfect filter rule on an Ethernet device.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_filter
* The pointer to the structure describing the perfect filter rule.
* The *rte_fdir_filter* structure includes the values of the different fields
* to match: source and destination IP addresses, vlan id, flexbytes, source
* and destination ports, and so on.
* IPv6 are not supported.
* @param soft_id
* The soft_id value provided when adding/updating the removed filter.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in perfect mode
* on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct.
*/
int rte_eth_dev_fdir_remove_perfect_filter(uint8_t port_id,
struct rte_fdir_filter *fdir_filter,
uint16_t soft_id);
/**
* Configure globally the masks for flow director mode for an Ethernet device.
* For example, the device can match packets with only the first 24 bits of
* the IPv4 source address.
*
* The following fields can be masked: IPv4 addresses and L4 port numbers.
* The following fields can be either enabled or disabled completely for the
* matching functionality: VLAN ID tag; VLAN Priority + CFI bit; Flexible 2-byte
* tuple.
* IPv6 masks are not supported.
*
* All filters must comply with the masks previously configured.
* For example, with a mask equal to 255.255.255.0 for the source IPv4 address,
* all IPv4 filters must be created with a source IPv4 address that fits the
* "X.X.X.0" format.
*
* This function flushes all filters that have been previously added in
* the device.
*
* @param port_id
* The port identifier of the Ethernet device.
* @param fdir_mask
* The pointer to the fdir mask structure describing relevant headers fields
* and relevant bits to use when matching packets addresses and ports.
* IPv6 masks are not supported.
* @return
* - (0) if successful.
* - (-ENOTSUP) if hardware doesn't support flow director mode.
* - (-ENODEV) if *port_id* invalid.
* - (-ENOSYS) if the flow director mode is not configured in perfect
* mode on *port_id*.
* - (-EINVAL) if the fdir_filter information is not correct
*/
int rte_eth_dev_fdir_set_masks(uint8_t port_id,
struct rte_fdir_masks *fdir_mask);
/**
* The eth device event type for interrupt, and maybe others in the future.
*/