[dpdk-dev] [PATCH v4 1/4] ethdev: rename rte_eth_vmdq_mirror_conf

Wu, Jingjing jingjing.wu at intel.com
Mon Jul 6 03:27:28 CEST 2015


Hi, Thomas

Any suggestions about this patch? Do I need rework it by using macro RTE_NEXT_ABI?
Thanks a lot!

Jingjing

> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Wu, Jingjing
> Sent: Friday, June 26, 2015 3:03 PM
> To: 'nhorman at tuxdriver.com'
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v4 1/4] ethdev: rename
> rte_eth_vmdq_mirror_conf
> 
> Hi, Neil
> 
> About this patch I have an ABI concern about it.
> This patch just renamed a struct rte_eth_vmdq_mirror_conf to
> rte_eth_mirror_conf, the size and its elements don't change. As my
> understanding, it will not break the ABI. And I also tested it.
> But when I use the script ./scripts/validate-abi.sh to check. A low severity
> problem is reported in symbol "rte_eth_mirror_rule_set"
>  - Change: "Base type of 2nd parameter mirror_conf has been changed from
> struct rte_eth_vmdq_mirror_conf to struct rte_eth_mirror_conf."
>  - Effect: "Replacement of parameter base type may indicate a change in its
> semantic meaning."
> 
> So, I'm not sure whether this patch meet the ABI policy?
> 
> Additional, about the validate-abi.sh, does it mean we need to fix all the
> problems it reports? Or we can decide case by case. Can a Low Severity
> problem be acceptable?
> 
> Look forward to your reply.
> 
> Thanks
> 
> Jingjing
> 
> > -----Original Message-----
> > From: Wu, Jingjing
> > Sent: Wednesday, June 10, 2015 2:25 PM
> > To: dev at dpdk.org
> > Cc: Wu, Jingjing; Liu, Jijiang; Jiajia, SunX; Zhang, Helin
> > Subject: [PATCH v4 1/4] ethdev: rename rte_eth_vmdq_mirror_conf
> >
> > rename rte_eth_vmdq_mirror_conf to rte_eth_mirror_conf and move the
> > maximum rule id check from ethdev level to driver
> >
> > Signed-off-by: Jingjing Wu <jingjing.wu at intel.com>
> > ---
> >  app/test-pmd/cmdline.c           | 22 +++++++++++-----------
> >  drivers/net/ixgbe/ixgbe_ethdev.c | 11 +++++++----
> > drivers/net/ixgbe/ixgbe_ethdev.h |  4 +++-
> >  lib/librte_ether/rte_ethdev.c    | 18 ++----------------
> >  lib/librte_ether/rte_ethdev.h    | 19 ++++++++++---------
> >  5 files changed, 33 insertions(+), 41 deletions(-)
> >
> > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> > f01db2a..d693bde 100644
> > --- a/app/test-pmd/cmdline.c
> > +++ b/app/test-pmd/cmdline.c
> > @@ -6604,11 +6604,11 @@ cmd_set_mirror_mask_parsed(void
> > *parsed_result,  {
> >  	int ret,nb_item,i;
> >  	struct cmd_set_mirror_mask_result *res = parsed_result;
> > -	struct rte_eth_vmdq_mirror_conf mr_conf;
> > +	struct rte_eth_mirror_conf mr_conf;
> >
> > -	memset(&mr_conf,0,sizeof(struct rte_eth_vmdq_mirror_conf));
> > +	memset(&mr_conf, 0, sizeof(struct rte_eth_mirror_conf));
> >
> > -	unsigned int vlan_list[ETH_VMDQ_MAX_VLAN_FILTERS];
> > +	unsigned int vlan_list[ETH_MIRROR_MAX_VLANS];
> >
> >  	mr_conf.dst_pool = res->dstpool_id;
> >
> > @@ -6618,11 +6618,11 @@ cmd_set_mirror_mask_parsed(void
> > *parsed_result,
> >  	} else if(!strcmp(res->what, "vlan-mirror")) {
> >  		mr_conf.rule_type_mask = ETH_VMDQ_VLAN_MIRROR;
> >  		nb_item = parse_item_list(res->value, "core",
> > -
> > 	ETH_VMDQ_MAX_VLAN_FILTERS,vlan_list,1);
> > +					ETH_MIRROR_MAX_VLANS, vlan_list,
> > 1);
> >  		if (nb_item <= 0)
> >  			return;
> >
> > -		for(i=0; i < nb_item; i++) {
> > +		for (i = 0; i < nb_item; i++) {
> >  			if (vlan_list[i] > ETHER_MAX_VLAN_ID) {
> >  				printf("Invalid vlan_id: must be < 4096\n");
> >  				return;
> > @@ -6634,10 +6634,10 @@ cmd_set_mirror_mask_parsed(void
> > *parsed_result,
> >  	}
> >
> >  	if(!strcmp(res->on, "on"))
> > -		ret = rte_eth_mirror_rule_set(res->port_id,&mr_conf,
> > +		ret = rte_eth_mirror_rule_set(res->port_id, &mr_conf,
> >  						res->rule_id, 1);
> >  	else
> > -		ret = rte_eth_mirror_rule_set(res->port_id,&mr_conf,
> > +		ret = rte_eth_mirror_rule_set(res->port_id, &mr_conf,
> >  						res->rule_id, 0);
> >  	if(ret < 0)
> >  		printf("mirror rule add error: (%s)\n", strerror(-ret)); @@ -
> > 6711,9 +6711,9 @@ cmd_set_mirror_link_parsed(void *parsed_result,  {
> >  	int ret;
> >  	struct cmd_set_mirror_link_result *res = parsed_result;
> > -	struct rte_eth_vmdq_mirror_conf mr_conf;
> > +	struct rte_eth_mirror_conf mr_conf;
> >
> > -	memset(&mr_conf,0,sizeof(struct rte_eth_vmdq_mirror_conf));
> > +	memset(&mr_conf, 0, sizeof(struct rte_eth_mirror_conf));
> >  	if(!strcmp(res->what, "uplink-mirror")) {
> >  		mr_conf.rule_type_mask = ETH_VMDQ_UPLINK_MIRROR;
> >  	}else if(!strcmp(res->what, "downlink-mirror")) @@ -6722,10
> > +6722,10 @@ cmd_set_mirror_link_parsed(void *parsed_result,
> >  	mr_conf.dst_pool = res->dstpool_id;
> >
> >  	if(!strcmp(res->on, "on"))
> > -		ret = rte_eth_mirror_rule_set(res->port_id,&mr_conf,
> > +		ret = rte_eth_mirror_rule_set(res->port_id, &mr_conf,
> >  						res->rule_id, 1);
> >  	else
> > -		ret = rte_eth_mirror_rule_set(res->port_id,&mr_conf,
> > +		ret = rte_eth_mirror_rule_set(res->port_id, &mr_conf,
> >  						res->rule_id, 0);
> >
> >  	/* check the return value and print it if is < 0 */ diff --git
> > a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> > index 0d9f9b2..9e767fa 100644
> > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> > @@ -209,7 +209,7 @@ static int ixgbe_set_pool_tx(struct rte_eth_dev
> > *dev,uint16_t pool,uint8_t on);  static int
> > ixgbe_set_pool_vlan_filter(struct rte_eth_dev *dev, uint16_t vlan,
> >  		uint64_t pool_mask,uint8_t vlan_on);  static int
> > ixgbe_mirror_rule_set(struct rte_eth_dev *dev,
> > -		struct rte_eth_vmdq_mirror_conf *mirror_conf,
> > +		struct rte_eth_mirror_conf *mirror_conf,
> >  		uint8_t rule_id, uint8_t on);
> >  static int ixgbe_mirror_rule_reset(struct rte_eth_dev *dev,
> >  		uint8_t	rule_id);
> > @@ -3388,7 +3388,7 @@ ixgbe_set_pool_vlan_filter(struct rte_eth_dev
> > *dev, uint16_t vlan,
> >
> >  static int
> >  ixgbe_mirror_rule_set(struct rte_eth_dev *dev,
> > -			struct rte_eth_vmdq_mirror_conf *mirror_conf,
> > +			struct rte_eth_mirror_conf *mirror_conf,
> >  			uint8_t rule_id, uint8_t on)
> >  {
> >  	uint32_t mr_ctl,vlvf;
> > @@ -3412,7 +3412,10 @@ ixgbe_mirror_rule_set(struct rte_eth_dev *dev,
> >  		IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
> >
> >  	if (ixgbe_vmdq_mode_check(hw) < 0)
> > -		return (-ENOTSUP);
> > +		return -ENOTSUP;
> > +
> > +	if (rule_id >= IXGBE_MAX_MIRROR_RULES)
> > +		return -EINVAL;
> >
> >  	/* Check if vlan mask is valid */
> >  	if ((mirror_conf->rule_type_mask & ETH_VMDQ_VLAN_MIRROR)
> && (on)) {
> > @@ -3526,7 +3529,7 @@ ixgbe_mirror_rule_reset(struct rte_eth_dev
> *dev,
> > uint8_t rule_id)
> >  		return (-ENOTSUP);
> >
> >  	memset(&mr_info->mr_conf[rule_id], 0,
> > -		sizeof(struct rte_eth_vmdq_mirror_conf));
> > +		sizeof(struct rte_eth_mirror_conf));
> >
> >  	/* clear PFVMCTL register */
> >  	IXGBE_WRITE_REG(hw, IXGBE_MRCTL(rule_id), mr_ctl); diff --git
> > a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
> > index 19237b8..755b674 100644
> > --- a/drivers/net/ixgbe/ixgbe_ethdev.h
> > +++ b/drivers/net/ixgbe/ixgbe_ethdev.h
> > @@ -177,8 +177,10 @@ 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_vmdq_mirror_conf
> > mr_conf[ETH_VMDQ_NUM_MIRROR_RULE];
> > +	struct rte_eth_mirror_conf mr_conf[IXGBE_MAX_MIRROR_RULES];
> >  	/**< store PF mirror rules configuration*/  };
> >
> > diff --git a/lib/librte_ether/rte_ethdev.c
> > b/lib/librte_ether/rte_ethdev.c index 024fe8b..43c7295 100644
> > --- a/lib/librte_ether/rte_ethdev.c
> > +++ b/lib/librte_ether/rte_ethdev.c
> > @@ -3034,7 +3034,7 @@ int rte_eth_set_vf_rate_limit(uint8_t port_id,
> > uint16_t vf, uint16_t tx_rate,
> >
> >  int
> >  rte_eth_mirror_rule_set(uint8_t port_id,
> > -			struct rte_eth_vmdq_mirror_conf *mirror_conf,
> > +			struct rte_eth_mirror_conf *mirror_conf,
> >  			uint8_t rule_id, uint8_t on)
> >  {
> >  	struct rte_eth_dev *dev = &rte_eth_devices[port_id]; @@ -3051,7
> > +3051,7 @@ rte_eth_mirror_rule_set(uint8_t port_id,
> >
> >  	if (mirror_conf->dst_pool >= ETH_64_POOLS) {
> >  		PMD_DEBUG_TRACE("Invalid dst pool, pool id must"
> > -			"be 0-%d\n",ETH_64_POOLS - 1);
> > +			"be 0-%d\n", ETH_64_POOLS - 1);
> >  		return -EINVAL;
> >  	}
> >
> > @@ -3062,13 +3062,6 @@ rte_eth_mirror_rule_set(uint8_t port_id,
> >  		return -EINVAL;
> >  	}
> >
> > -	if(rule_id >= ETH_VMDQ_NUM_MIRROR_RULE)
> > -	{
> > -		PMD_DEBUG_TRACE("Invalid rule_id, rule_id must be 0-
> > %d\n",
> > -			ETH_VMDQ_NUM_MIRROR_RULE - 1);
> > -		return -EINVAL;
> > -	}
> > -
> >  	dev = &rte_eth_devices[port_id];
> >  	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_set, -
> ENOTSUP);
> >
> > @@ -3085,13 +3078,6 @@ rte_eth_mirror_rule_reset(uint8_t port_id,
> > uint8_t rule_id)
> >  		return -ENODEV;
> >  	}
> >
> > -	if(rule_id >= ETH_VMDQ_NUM_MIRROR_RULE)
> > -	{
> > -		PMD_DEBUG_TRACE("Invalid rule_id, rule_id must be 0-
> > %d\n",
> > -			ETH_VMDQ_NUM_MIRROR_RULE-1);
> > -		return -EINVAL;
> > -	}
> > -
> >  	dev = &rte_eth_devices[port_id];
> >  	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mirror_rule_reset, -
> ENOTSUP);
> >
> > diff --git a/lib/librte_ether/rte_ethdev.h
> > b/lib/librte_ether/rte_ethdev.h index 16dbe00..ae22fea 100644
> > --- a/lib/librte_ether/rte_ethdev.h
> > +++ b/lib/librte_ether/rte_ethdev.h
> > @@ -467,8 +467,8 @@ struct rte_eth_rss_conf {
> >  #define ETH_VMDQ_ACCEPT_BROADCAST   0x0008 /**< accept broadcast
> > packets. */
> >  #define ETH_VMDQ_ACCEPT_MULTICAST   0x0010 /**< multicast
> > promiscuous. */
> >
> > -/* Definitions used for VMDQ mirror rules setting */
> > -#define ETH_VMDQ_NUM_MIRROR_RULE     4 /**< Maximum nb. of
> mirror
> > rules. . */
> > +/** Maximum nb. of vlan per mirror rule */
> > +#define ETH_MIRROR_MAX_VLANS       64
> >
> >  #define ETH_VMDQ_POOL_MIRROR    0x0001 /**< Virtual Pool Mirroring.
> */
> >  #define ETH_VMDQ_UPLINK_MIRROR  0x0002 /**< Uplink Port Mirroring.
> > */ @@ -480,18 +480,19 @@ struct rte_eth_rss_conf {
> >   */
> >  struct rte_eth_vlan_mirror {
> >  	uint64_t vlan_mask; /**< mask for valid VLAN ID. */
> > -	uint16_t vlan_id[ETH_VMDQ_MAX_VLAN_FILTERS];
> > -	/** VLAN ID list for vlan mirror. */
> > +	/** VLAN ID list for vlan mirroring. */
> > +	uint16_t vlan_id[ETH_MIRROR_MAX_VLANS];
> >  };
> >
> >  /**
> >   * A structure used to configure traffic mirror of an Ethernet port.
> >   */
> > -struct rte_eth_vmdq_mirror_conf {
> > +struct rte_eth_mirror_conf {
> >  	uint8_t rule_type_mask; /**< Mirroring rule type mask we want to
> set
> > */
> > -	uint8_t dst_pool; /**< Destination pool for this mirror rule. */
> > +	uint8_t dst_pool;  /**< Destination pool for this mirror rule. */
> >  	uint64_t pool_mask; /**< Bitmap of pool for pool mirroring */
> > -	struct rte_eth_vlan_mirror vlan; /**< VLAN ID setting for VLAN
> > mirroring */
> > +	/** VLAN ID setting for VLAN mirroring. */
> > +	struct rte_eth_vlan_mirror vlan;
> >  };
> >
> >  /**
> > @@ -1211,7 +1212,7 @@ typedef int (*eth_set_vf_rate_limit_t)(struct
> > rte_eth_dev *dev,  /**< @internal Set VF TX rate */
> >
> >  typedef int (*eth_mirror_rule_set_t)(struct rte_eth_dev *dev,
> > -				  struct rte_eth_vmdq_mirror_conf
> > *mirror_conf,
> > +				  struct rte_eth_mirror_conf *mirror_conf,
> >  				  uint8_t rule_id,
> >  				  uint8_t on);
> >  /**< @internal Add a traffic mirroring rule on an Ethernet device */
> > @@ -
> > 3168,7 +3169,7 @@ rte_eth_dev_set_vf_vlan_filter(uint8_t port,
> > uint16_t vlan_id,
> >   *   - (-EINVAL) if the mr_conf information is not correct.
> >   */
> >  int rte_eth_mirror_rule_set(uint8_t port_id,
> > -			struct rte_eth_vmdq_mirror_conf *mirror_conf,
> > +			struct rte_eth_mirror_conf *mirror_conf,
> >  			uint8_t rule_id,
> >  			uint8_t on);
> >
> > --
> > 1.9.3



More information about the dev mailing list