On Mon, Aug 18, 2014 at 1:29 PM, Daniele Di Proietto
<ddiproie...@vmware.com> wrote:
> ofpbuf_rss() is introduced to get the RSS hash from the NIC. It works only for
> packets received by DPDK (otherwise it returns 0, which tells the caller to
> compute the hash in another way)
>
> This commit also configure DPDK devices to compute RSS hash for UDP and IPv6
> packets
>
> Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com>
> ---
>  lib/netdev-dpdk.c |  3 ++-
>  lib/ofpbuf.h      | 14 ++++++++++++++
>  2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index a8f041b..23cf410 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -96,7 +96,8 @@ static const struct rte_eth_conf port_conf = {
>      .rx_adv_conf = {
>          .rss_conf = {
>              .rss_key = NULL,
> -            .rss_hf = ETH_RSS_IPV4_TCP | ETH_RSS_IPV4 | ETH_RSS_IPV6,
> +            .rss_hf = ETH_RSS_IPV4_TCP | ETH_RSS_IPV4 | ETH_RSS_IPV6
> +                    | ETH_RSS_IPV4_UDP | ETH_RSS_IPV6_TCP | ETH_RSS_IPV6_UDP,
>          },
>      },
>      .txmode = {
> diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h
> index adaf526..f115eb5 100644
> --- a/lib/ofpbuf.h
> +++ b/lib/ofpbuf.h
> @@ -159,6 +159,7 @@ char *ofpbuf_to_string(const struct ofpbuf *, size_t 
> maxbytes);
>  static inline struct ofpbuf *ofpbuf_from_list(const struct list *);
>  void ofpbuf_list_delete(struct list *);
>  static inline bool ofpbuf_equal(const struct ofpbuf *, const struct ofpbuf 
> *);
> +static inline uint32_t ofpbuf_rss(const struct ofpbuf *);
>
>
>  /* Returns a pointer that may be passed to free() to accomplish the same 
> thing
> @@ -390,6 +391,14 @@ static inline void ofpbuf_set_size(struct ofpbuf *b, 
> uint32_t v)
>                                    * this segment. */
>  }
>
> +static inline uint32_t ofpbuf_rss(const struct ofpbuf *b)
> +{
> +    if (OVS_LIKELY(b->source == OFPBUF_DPDK)) {
> +        return b->mbuf.pkt.hash.rss;
> +    }
> +    return 0;
> +}

We can avoid this source check by always setting the rss value.
Have considered not defining separate dpif_packet->hash for DPDK_NETDEV case?

> +
>  #else
>  static inline void * ofpbuf_data(const struct ofpbuf *b)
>  {
> @@ -420,6 +429,11 @@ static inline void ofpbuf_set_size(struct ofpbuf *b, 
> uint32_t v)
>  {
>      b->size_ = v;
>  }
> +
> +static inline uint32_t ofpbuf_rss(const struct ofpbuf *b OVS_UNUSED)
> +{
> +    return 0;
> +}
>  #endif
>
>  #ifdef  __cplusplus
> --
> 2.1.0.rc1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to