qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

NetRxPkt: Introduce support for additional hash types

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>
Signed-off-by: Jason Wang <jasowang@redhat.com>

authored by

Yuri Benditovich and committed by
Jason Wang
33bbc05e b559ea95

+51 -1
+42
hw/net/net_rx_pkt.c
··· 307 307 &tcphdr->th_dport, sizeof(uint16_t)); 308 308 } 309 309 310 + static inline void 311 + _net_rx_rss_prepare_udp(uint8_t *rss_input, 312 + struct NetRxPkt *pkt, 313 + size_t *bytes_written) 314 + { 315 + struct udp_header *udphdr = &pkt->l4hdr_info.hdr.udp; 316 + 317 + _net_rx_rss_add_chunk(rss_input, bytes_written, 318 + &udphdr->uh_sport, sizeof(uint16_t)); 319 + 320 + _net_rx_rss_add_chunk(rss_input, bytes_written, 321 + &udphdr->uh_dport, sizeof(uint16_t)); 322 + } 323 + 310 324 uint32_t 311 325 net_rx_pkt_calc_rss_hash(struct NetRxPkt *pkt, 312 326 NetRxPktRssType type, ··· 346 360 assert(pkt->isip6); 347 361 trace_net_rx_pkt_rss_ip6_ex(); 348 362 _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); 363 + break; 364 + case NetPktRssIpV6TcpEx: 365 + assert(pkt->isip6); 366 + assert(pkt->istcp); 367 + trace_net_rx_pkt_rss_ip6_ex_tcp(); 368 + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); 369 + _net_rx_rss_prepare_tcp(&rss_input[0], pkt, &rss_length); 370 + break; 371 + case NetPktRssIpV4Udp: 372 + assert(pkt->isip4); 373 + assert(pkt->isudp); 374 + trace_net_rx_pkt_rss_ip4_udp(); 375 + _net_rx_rss_prepare_ip4(&rss_input[0], pkt, &rss_length); 376 + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); 377 + break; 378 + case NetPktRssIpV6Udp: 379 + assert(pkt->isip6); 380 + assert(pkt->isudp); 381 + trace_net_rx_pkt_rss_ip6_udp(); 382 + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, false, &rss_length); 383 + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); 384 + break; 385 + case NetPktRssIpV6UdpEx: 386 + assert(pkt->isip6); 387 + assert(pkt->isudp); 388 + trace_net_rx_pkt_rss_ip6_ex_udp(); 389 + _net_rx_rss_prepare_ip6(&rss_input[0], pkt, true, &rss_length); 390 + _net_rx_rss_prepare_udp(&rss_input[0], pkt, &rss_length); 349 391 break; 350 392 default: 351 393 assert(false);
+5 -1
hw/net/net_rx_pkt.h
··· 133 133 NetPktRssIpV4Tcp, 134 134 NetPktRssIpV6Tcp, 135 135 NetPktRssIpV6, 136 - NetPktRssIpV6Ex 136 + NetPktRssIpV6Ex, 137 + NetPktRssIpV6TcpEx, 138 + NetPktRssIpV4Udp, 139 + NetPktRssIpV6Udp, 140 + NetPktRssIpV6UdpEx, 137 141 } NetRxPktRssType; 138 142 139 143 /**
+4
hw/net/trace-events
··· 92 92 93 93 net_rx_pkt_rss_ip4(void) "Calculating IPv4 RSS hash" 94 94 net_rx_pkt_rss_ip4_tcp(void) "Calculating IPv4/TCP RSS hash" 95 + net_rx_pkt_rss_ip4_udp(void) "Calculating IPv4/UDP RSS hash" 95 96 net_rx_pkt_rss_ip6_tcp(void) "Calculating IPv6/TCP RSS hash" 97 + net_rx_pkt_rss_ip6_udp(void) "Calculating IPv6/UDP RSS hash" 96 98 net_rx_pkt_rss_ip6(void) "Calculating IPv6 RSS hash" 97 99 net_rx_pkt_rss_ip6_ex(void) "Calculating IPv6/EX RSS hash" 100 + net_rx_pkt_rss_ip6_ex_tcp(void) "Calculating IPv6/EX/TCP RSS hash" 101 + net_rx_pkt_rss_ip6_ex_udp(void) "Calculating IPv6/EX/UDP RSS hash" 98 102 net_rx_pkt_rss_hash(size_t rss_length, uint32_t rss_hash) "RSS hash for %zu bytes: 0x%X" 99 103 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" 100 104