On Tue, Jul 22, 2014 at 5:06 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 packets
>
> Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com>
> ---
>  lib/netdev-dpdk.c |  3 ++-
>  lib/ofpbuf.h      | 13 +++++++++++++
>  2 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 62c9a0c..44d2dc0 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,
>          },
>      },
>      .txmode = {
> diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h
> index adaf526..9254c98 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
> @@ -389,6 +390,13 @@ static inline void ofpbuf_set_size(struct ofpbuf *b, 
> uint32_t v)
>      b->mbuf.pkt.pkt_len = v;     /* Total length of all segments linked to
>                                    * 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 need to handle case if buffer is not from dpdk.
>
>  #else
>  static inline void * ofpbuf_data(const struct ofpbuf *b)
> @@ -420,6 +428,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.0.0
>
> _______________________________________________
> 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