> +             if (!memcmp(name, "GTPC", sizeof("GTPC") - 1))
> +                     new_pctype =
> +                             i40e_find_personalized_pctype(pf,
> +                                                   I40E_PERSONALIZED_GTPC);
> +             else if (!memcmp(name, "GTPU_IPV4",
> +                              sizeof("GTPU_IPV4") - 1))
Memcmp -> strcmp?

[......]


> 
> +enum i40e_new_proto {
> +     I40E_PERSONALIZED_GTPC = 0,
> +     I40E_PERSONALIZED_GTPU_IPV4,
> +     I40E_PERSONALIZED_GTPU_IPV6,
> +     I40E_PERSONALIZED_GTPU,
> +     I40E_PERSONALIZED_MAX,
> +};
> +
> +#define I40E_FILTER_PCTYPE_INVALID     0
> +struct i40e_personalized_pctype {
> +     uint8_t index;    /* Indicate which personalized pctype */


The index is I40E_PERSONALIZED_XXX right? Why not define it like
enum i40e_new_proto index? Or you can just use #define to define
personalized pctype instead of enum.
> +     uint8_t pctype;   /* New pctype value */
> +     bool valid;   /* Check if it's valid */
> +};
> +
>  /*
>   * Structure to store private data specific for PF instance.
>   */
> @@ -786,6 +801,11 @@ struct i40e_pf {
>       bool mpls_replace_flag;  /* 1 - MPLS filter replace is done */
>       bool qinq_replace_flag;  /* QINQ filter replace is done */
>       struct i40e_tm_conf tm_conf;
> +
> +     /* Dynamic Device Personalization */
> +     bool gtp_support; /* 1 - support GTP-C and GTP-U */
> +     /* customer personalized pctype */
> +     struct i40e_personalized_pctype new_pctype[I40E_PERSONALIZED_MAX];
>  };
> 
>  enum pending_msg {
> @@ -1003,6 +1023,10 @@ void i40e_check_write_reg(struct i40e_hw *hw, uint32_t 
> addr,
> uint32_t val);
>  int i40e_tm_ops_get(struct rte_eth_dev *dev, void *ops);
>  void i40e_tm_conf_init(struct rte_eth_dev *dev);
>  void i40e_tm_conf_uninit(struct rte_eth_dev *dev);
> +struct i40e_personalized_pctype*
> +i40e_find_personalized_pctype(struct i40e_pf *pf, uint8_t index);
> +void i40e_update_personalized_info(struct rte_eth_dev *dev, uint8_t *pkg,
> +                                uint32_t pkg_size);
> 
>  #define I40E_DEV_TO_PCI(eth_dev) \
>       RTE_DEV_TO_PCI((eth_dev)->device)
> diff --git a/drivers/net/i40e/rte_pmd_i40e.c b/drivers/net/i40e/rte_pmd_i40e.c
> index 9f9c808..d1313f6 100644
> --- a/drivers/net/i40e/rte_pmd_i40e.c
> +++ b/drivers/net/i40e/rte_pmd_i40e.c
> @@ -1608,6 +1608,8 @@ rte_pmd_i40e_process_ddp_package(uint8_t port, uint8_t
> *buff,
>               return -EINVAL;
>       }
> 
> +     i40e_update_personalized_info(dev, buff, size);
> +
>       /* Find metadata segment */
>       metadata_seg_hdr = i40e_find_segment_in_package(SEGMENT_TYPE_METADATA,
>                                                       pkg_hdr);
> @@ -2090,7 +2092,9 @@ static int check_invalid_pkt_type(uint32_t pkt_type)
>           tnl != RTE_PTYPE_TUNNEL_VXLAN &&
>           tnl != RTE_PTYPE_TUNNEL_NVGRE &&
>           tnl != RTE_PTYPE_TUNNEL_GENEVE &&
> -         tnl != RTE_PTYPE_TUNNEL_GRENAT)
> +         tnl != RTE_PTYPE_TUNNEL_GRENAT &&
> +         tnl != RTE_PTYPE_TUNNEL_GTPC &&
> +         tnl != RTE_PTYPE_TUNNEL_GTPU)
>               return -1;
> 
>       if (il2 &&
> --
> 2.5.5

Reply via email to