Message ID | 20200127115405.13459-1-yuri.benditovich@daynix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] NetRxPkt: Introduce support for additional hash types | expand |
> On 27 Jan 2020, at 13:54, Yuri Benditovich <yuri.benditovich@daynix.com> wrote: > > Add support for following hash types: > IPV6 TCP with extension headers > IPV4 UDP > IPV6 UDP > IPV6 UDP with extension headers > > Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com> Acked-by: Dmitry Fleytman <dmitry.fleytman@gmail.com> > --- > hw/net/net_rx_pkt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > hw/net/net_rx_pkt.h | 6 +++++- > hw/net/trace-events | 4 ++++ > 3 files changed, 51 insertions(+), 1 deletion(-) > > diff --git a/hw/net/net_rx_pkt.c b/hw/net/net_rx_pkt.c > index 98a5030ace..b2a06bd27d 100644 > --- a/hw/net/net_rx_pkt.c > +++ b/hw/net/net_rx_pkt.c > @@ -307,6 +307,20 @@ _net_rx_rss_prepare_tcp(uint8_t *rss_input, > &tcphdr->th_dport, sizeof(uint16_t)); > } > > +static inline void > +_net_rx_rss_prepare_udp(uint8_t *rss_input, > + struct NetRxPkt *pkt, > + size_t *bytes_written) > +{ > + struct udp_header *udphdr = &pkt->l4hdr_info.hdr.udp; > + > + _net_rx_rss_add_chunk(rss_input, bytes_written, > + &udphdr->uh_sport, sizeof(uint16_t)); > + > + _net_rx_rss_add_chunk(rss_input, bytes_written, > + &udphdr->uh_dport, sizeof(uint16_t)); > +} > + > uint32_t > net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, > NetRxPktRssType type, > @@ -347,6 +361,34 @@ net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, > trace_net_rx_pkt_rss_ip6_ex(); > _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > break; > + case NetPktRssIpV6TcpEx: > + assert(pkt->isip6); > + assert(pkt->istcp); > + trace_net_rx_pkt_rss_ip6_ex_tcp(); > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > + _net_rx_rss_prepare_tcp(&rss_input[0], pkt, &rss_length); > + break; > + case NetPktRssIpV4Udp: > + assert(pkt->isip4); > + assert(pkt->isudp); > + trace_net_rx_pkt_rss_ip4_udp(); > + _net_rx_rss_prepare_ip4(&rss_input[0], pkt, &rss_length); > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > + break; > + case NetPktRssIpV6Udp: > + assert(pkt->isip6); > + assert(pkt->isudp); > + trace_net_rx_pkt_rss_ip6_udp(); > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, false, &rss_length); > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > + break; > + case NetPktRssIpV6UdpEx: > + assert(pkt->isip6); > + assert(pkt->isudp); > + trace_net_rx_pkt_rss_ip6_ex_udp(); > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > + break; > default: > assert(false); > break; > diff --git a/hw/net/net_rx_pkt.h b/hw/net/net_rx_pkt.h > index 7adf0fad51..048e3461f0 100644 > --- a/hw/net/net_rx_pkt.h > +++ b/hw/net/net_rx_pkt.h > @@ -133,7 +133,11 @@ typedef enum { > NetPktRssIpV4Tcp, > NetPktRssIpV6Tcp, > NetPktRssIpV6, > - NetPktRssIpV6Ex > + NetPktRssIpV6Ex, > + NetPktRssIpV6TcpEx, > + NetPktRssIpV4Udp, > + NetPktRssIpV6Udp, > + NetPktRssIpV6UdpEx, > } NetRxPktRssType; > > /** > diff --git a/hw/net/trace-events b/hw/net/trace-events > index 6f990ede87..73d4558f7e 100644 > --- a/hw/net/trace-events > +++ b/hw/net/trace-events > @@ -92,9 +92,13 @@ net_rx_pkt_l3_csum_validate_csum(size_t l3hdr_off, uint32_t csl, uint32_t cntr, > > net_rx_pkt_rss_ip4(void) "Calculating IPv4 RSS hash" > net_rx_pkt_rss_ip4_tcp(void) "Calculating IPv4/TCP RSS hash" > +net_rx_pkt_rss_ip4_udp(void) "Calculating IPv4/UDP RSS hash" > net_rx_pkt_rss_ip6_tcp(void) "Calculating IPv6/TCP RSS hash" > +net_rx_pkt_rss_ip6_udp(void) "Calculating IPv6/UDP RSS hash" > net_rx_pkt_rss_ip6(void) "Calculating IPv6 RSS hash" > net_rx_pkt_rss_ip6_ex(void) "Calculating IPv6/EX RSS hash" > +net_rx_pkt_rss_ip6_ex_tcp(void) "Calculating IPv6/EX/TCP RSS hash" > +net_rx_pkt_rss_ip6_ex_udp(void) "Calculating IPv6/EX/UDP RSS hash" > net_rx_pkt_rss_hash(size_t rss_length, uint32_t rss_hash) "RSS hash for %zu bytes: 0x%X" > net_rx_pkt_rss_add_chunk(void* ptr, size_t size, size_t input_offset) "Add RSS chunk %p, %zu bytes, RSS input offset %zu bytes" > > -- > 2.17.1 >
Hi Jason, Can you please review these 2 patches and apply if there are no objections. Thanks, Yuri Benditovich On Wed, Jan 29, 2020 at 6:09 PM Dmitry Fleytman <dmitry.fleytman@gmail.com> wrote: > > > > > On 27 Jan 2020, at 13:54, Yuri Benditovich <yuri.benditovich@daynix.com> wrote: > > > > Add support for following hash types: > > IPV6 TCP with extension headers > > IPV4 UDP > > IPV6 UDP > > IPV6 UDP with extension headers > > > > Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com> > > > Acked-by: Dmitry Fleytman <dmitry.fleytman@gmail.com> > > > > --- > > hw/net/net_rx_pkt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > > hw/net/net_rx_pkt.h | 6 +++++- > > hw/net/trace-events | 4 ++++ > > 3 files changed, 51 insertions(+), 1 deletion(-) > > > > diff --git a/hw/net/net_rx_pkt.c b/hw/net/net_rx_pkt.c > > index 98a5030ace..b2a06bd27d 100644 > > --- a/hw/net/net_rx_pkt.c > > +++ b/hw/net/net_rx_pkt.c > > @@ -307,6 +307,20 @@ _net_rx_rss_prepare_tcp(uint8_t *rss_input, > > &tcphdr->th_dport, sizeof(uint16_t)); > > } > > > > +static inline void > > +_net_rx_rss_prepare_udp(uint8_t *rss_input, > > + struct NetRxPkt *pkt, > > + size_t *bytes_written) > > +{ > > + struct udp_header *udphdr = &pkt->l4hdr_info.hdr.udp; > > + > > + _net_rx_rss_add_chunk(rss_input, bytes_written, > > + &udphdr->uh_sport, sizeof(uint16_t)); > > + > > + _net_rx_rss_add_chunk(rss_input, bytes_written, > > + &udphdr->uh_dport, sizeof(uint16_t)); > > +} > > + > > uint32_t > > net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, > > NetRxPktRssType type, > > @@ -347,6 +361,34 @@ net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, > > trace_net_rx_pkt_rss_ip6_ex(); > > _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > > break; > > + case NetPktRssIpV6TcpEx: > > + assert(pkt->isip6); > > + assert(pkt->istcp); > > + trace_net_rx_pkt_rss_ip6_ex_tcp(); > > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > > + _net_rx_rss_prepare_tcp(&rss_input[0], pkt, &rss_length); > > + break; > > + case NetPktRssIpV4Udp: > > + assert(pkt->isip4); > > + assert(pkt->isudp); > > + trace_net_rx_pkt_rss_ip4_udp(); > > + _net_rx_rss_prepare_ip4(&rss_input[0], pkt, &rss_length); > > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > > + break; > > + case NetPktRssIpV6Udp: > > + assert(pkt->isip6); > > + assert(pkt->isudp); > > + trace_net_rx_pkt_rss_ip6_udp(); > > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, false, &rss_length); > > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > > + break; > > + case NetPktRssIpV6UdpEx: > > + assert(pkt->isip6); > > + assert(pkt->isudp); > > + trace_net_rx_pkt_rss_ip6_ex_udp(); > > + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); > > + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); > > + break; > > default: > > assert(false); > > break; > > diff --git a/hw/net/net_rx_pkt.h b/hw/net/net_rx_pkt.h > > index 7adf0fad51..048e3461f0 100644 > > --- a/hw/net/net_rx_pkt.h > > +++ b/hw/net/net_rx_pkt.h > > @@ -133,7 +133,11 @@ typedef enum { > > NetPktRssIpV4Tcp, > > NetPktRssIpV6Tcp, > > NetPktRssIpV6, > > - NetPktRssIpV6Ex > > + NetPktRssIpV6Ex, > > + NetPktRssIpV6TcpEx, > > + NetPktRssIpV4Udp, > > + NetPktRssIpV6Udp, > > + NetPktRssIpV6UdpEx, > > } NetRxPktRssType; > > > > /** > > diff --git a/hw/net/trace-events b/hw/net/trace-events > > index 6f990ede87..73d4558f7e 100644 > > --- a/hw/net/trace-events > > +++ b/hw/net/trace-events > > @@ -92,9 +92,13 @@ net_rx_pkt_l3_csum_validate_csum(size_t l3hdr_off, uint32_t csl, uint32_t cntr, > > > > net_rx_pkt_rss_ip4(void) "Calculating IPv4 RSS hash" > > net_rx_pkt_rss_ip4_tcp(void) "Calculating IPv4/TCP RSS hash" > > +net_rx_pkt_rss_ip4_udp(void) "Calculating IPv4/UDP RSS hash" > > net_rx_pkt_rss_ip6_tcp(void) "Calculating IPv6/TCP RSS hash" > > +net_rx_pkt_rss_ip6_udp(void) "Calculating IPv6/UDP RSS hash" > > net_rx_pkt_rss_ip6(void) "Calculating IPv6 RSS hash" > > net_rx_pkt_rss_ip6_ex(void) "Calculating IPv6/EX RSS hash" > > +net_rx_pkt_rss_ip6_ex_tcp(void) "Calculating IPv6/EX/TCP RSS hash" > > +net_rx_pkt_rss_ip6_ex_udp(void) "Calculating IPv6/EX/UDP RSS hash" > > net_rx_pkt_rss_hash(size_t rss_length, uint32_t rss_hash) "RSS hash for %zu bytes: 0x%X" > > net_rx_pkt_rss_add_chunk(void* ptr, size_t size, size_t input_offset) "Add RSS chunk %p, %zu bytes, RSS input offset %zu bytes" > > > > -- > > 2.17.1 > > >
On 2020/2/12 下午4:50, Yuri Benditovich wrote: > Hi Jason, > > Can you please review these 2 patches and apply if there are no objections. > > Thanks, > Yuri Benditovich Applied. Thanks
diff --git a/hw/net/net_rx_pkt.c b/hw/net/net_rx_pkt.c index 98a5030ace..b2a06bd27d 100644 --- a/hw/net/net_rx_pkt.c +++ b/hw/net/net_rx_pkt.c @@ -307,6 +307,20 @@ _net_rx_rss_prepare_tcp(uint8_t *rss_input, &tcphdr->th_dport, sizeof(uint16_t)); } +static inline void +_net_rx_rss_prepare_udp(uint8_t *rss_input, + struct NetRxPkt *pkt, + size_t *bytes_written) +{ + struct udp_header *udphdr = &pkt->l4hdr_info.hdr.udp; + + _net_rx_rss_add_chunk(rss_input, bytes_written, + &udphdr->uh_sport, sizeof(uint16_t)); + + _net_rx_rss_add_chunk(rss_input, bytes_written, + &udphdr->uh_dport, sizeof(uint16_t)); +} + uint32_t net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, NetRxPktRssType type, @@ -347,6 +361,34 @@ net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, trace_net_rx_pkt_rss_ip6_ex(); _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); break; + case NetPktRssIpV6TcpEx: + assert(pkt->isip6); + assert(pkt->istcp); + trace_net_rx_pkt_rss_ip6_ex_tcp(); + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); + _net_rx_rss_prepare_tcp(&rss_input[0], pkt, &rss_length); + break; + case NetPktRssIpV4Udp: + assert(pkt->isip4); + assert(pkt->isudp); + trace_net_rx_pkt_rss_ip4_udp(); + _net_rx_rss_prepare_ip4(&rss_input[0], pkt, &rss_length); + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); + break; + case NetPktRssIpV6Udp: + assert(pkt->isip6); + assert(pkt->isudp); + trace_net_rx_pkt_rss_ip6_udp(); + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, false, &rss_length); + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); + break; + case NetPktRssIpV6UdpEx: + assert(pkt->isip6); + assert(pkt->isudp); + trace_net_rx_pkt_rss_ip6_ex_udp(); + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); + break; default: assert(false); break; diff --git a/hw/net/net_rx_pkt.h b/hw/net/net_rx_pkt.h index 7adf0fad51..048e3461f0 100644 --- a/hw/net/net_rx_pkt.h +++ b/hw/net/net_rx_pkt.h @@ -133,7 +133,11 @@ typedef enum { NetPktRssIpV4Tcp, NetPktRssIpV6Tcp, NetPktRssIpV6, - NetPktRssIpV6Ex + NetPktRssIpV6Ex, + NetPktRssIpV6TcpEx, + NetPktRssIpV4Udp, + NetPktRssIpV6Udp, + NetPktRssIpV6UdpEx, } NetRxPktRssType; /** diff --git a/hw/net/trace-events b/hw/net/trace-events index 6f990ede87..73d4558f7e 100644 --- a/hw/net/trace-events +++ b/hw/net/trace-events @@ -92,9 +92,13 @@ net_rx_pkt_l3_csum_validate_csum(size_t l3hdr_off, uint32_t csl, uint32_t cntr, net_rx_pkt_rss_ip4(void) "Calculating IPv4 RSS hash" net_rx_pkt_rss_ip4_tcp(void) "Calculating IPv4/TCP RSS hash" +net_rx_pkt_rss_ip4_udp(void) "Calculating IPv4/UDP RSS hash" net_rx_pkt_rss_ip6_tcp(void) "Calculating IPv6/TCP RSS hash" +net_rx_pkt_rss_ip6_udp(void) "Calculating IPv6/UDP RSS hash" net_rx_pkt_rss_ip6(void) "Calculating IPv6 RSS hash" net_rx_pkt_rss_ip6_ex(void) "Calculating IPv6/EX RSS hash" +net_rx_pkt_rss_ip6_ex_tcp(void) "Calculating IPv6/EX/TCP RSS hash" +net_rx_pkt_rss_ip6_ex_udp(void) "Calculating IPv6/EX/UDP RSS hash" net_rx_pkt_rss_hash(size_t rss_length, uint32_t rss_hash) "RSS hash for %zu bytes: 0x%X" net_rx_pkt_rss_add_chunk(void* ptr, size_t size, size_t input_offset) "Add RSS chunk %p, %zu bytes, RSS input offset %zu bytes"
Add support for following hash types: IPV6 TCP with extension headers IPV4 UDP IPV6 UDP IPV6 UDP with extension headers Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com> --- hw/net/net_rx_pkt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ hw/net/net_rx_pkt.h | 6 +++++- hw/net/trace-events | 4 ++++ 3 files changed, 51 insertions(+), 1 deletion(-)