[ovs-dev] [PATCH 3/4] ofpbuf: Add ofpbuf_rss()
Daniele Di Proietto
ddiproietto at vmware.com
Wed Aug 13 15:49:48 UTC 2014
On 8/12/14, 5:42 PM, "Pravin Shelar" <pshelar at nicira.com> wrote:
>On Tue, Jul 22, 2014 at 5:06 PM, Daniele Di Proietto
><ddiproietto at 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 <ddiproietto at 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.
If the buffer is not from DPDK we just return 0 (which is considered an
invalid hash value). Is there anything better we could do?
Thanks,
Daniele
>>
>> #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 at openvswitch.org
>>
>>https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman
>>/listinfo/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=MV9BdLjtFIdhBDBaw5z%2
>>BU6SSA2gAfY4L%2F1HCy3VjlKU%3D%0A&m=ao%2ByR%2BLt%2F16dAYUSzG5Xsy1LuEAg2VA0
>>Iz%2BmGxR9c7g%3D%0A&s=5a6c6fc53f650287fe1bc87d2dee9960e56cd24b2890ff91cf8
>>44c063bbe9831
More information about the dev
mailing list