aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Expand)AuthorFilesLines
2019-02-09FIX: Remove deprecated socket-mem paramPeter Mikus2-11/+1
2019-02-09Remove VHOST 256qsize tests.Peter Mikus31-4325/+0
2019-02-08CSIT-845 Capture VPP core-dump from vpp crash on DUTsPeter Mikus10-98/+360
2019-02-08FIX: Memif APIPeter Mikus3-5/+11
2019-02-08Report: Add dataTibor Frank6-812/+401
2019-02-06FIX: Set ipsec backend to dpdk backend when aes-gcm cipher usedJan Gelety13-15/+181
2019-02-06Report: methodology section, added nfv service density.Maciek Konstantynowicz2-0/+107
2019-02-05CSIT-1420: Split methodology section to more filesTibor Frank21-922/+1580
2019-02-05FIX: Cleanup docker images per jobPeter Mikus1-1/+1
2019-02-04Improve 1n-skx vpp_device mapping function-31/+102
2019-01-21Report: Compare NICs tablesTibor Frank1-2/+2
2019-01-21Report: Reset the Report History to the initial versionTibor Frank1-90/+2
2019-01-21CSIT-1406: Configure PAL to generate 1901 ReportTibor Frank4-15/+15
2019-01-21CSIT-1397: Create Heatmap graphsTibor Frank2-0/+299
host_to_net_u16 (ETHERNET_TYPE_DOT1AD)))) { ethernet_vlan_header_t *outer = (ethernet_vlan_header_t *) (h0 + 1); outer = (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_VLAN)) ? outer + 1 : outer; if (PREDICT_TRUE (outer->type) == clib_host_to_net_u16 (ETHERNET_TYPE_IP4)) { ip4_header_t *ip = (ip4_header_t *) (outer + 1); hash_key = (u64) (ip->src_address.as_u32 ^ ip->dst_address.as_u32 ^ ip->protocol); } else if (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_IP6)) { ip6_header_t *ip = (ip6_header_t *) (outer + 1); hash_key = (u64) (ip->src_address.as_u64[0] ^ ip->src_address.as_u64[1] ^ ip->dst_address.as_u64[0] ^ ip->dst_address.as_u64[1] ^ ip->protocol); } else if (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_MPLS)) { hash_key = mpls_get_key ((mpls_unicast_header_t *) (outer + 1)); } else { hash_key = outer->type; } } else { hash_key = 0; } return hash_key; } static inline u64 eth_get_key (ethernet_header_t * h0) { u64 hash_key; if (PREDICT_TRUE (h0->type) == clib_host_to_net_u16 (ETHERNET_TYPE_IP4)) { hash_key = ipv4_get_key ((ip4_header_t *) (h0 + 1)); } else if (h0->type == clib_host_to_net_u16 (ETHERNET_TYPE_IP6)) { hash_key = ipv6_get_key ((ip6_header_t *) (h0 + 1)); } else if (h0->type == clib_host_to_net_u16 (ETHERNET_TYPE_MPLS)) { hash_key = mpls_get_key ((mpls_unicast_header_t *) (h0 + 1)); } else if ((h0->type == clib_host_to_net_u16 (ETHERNET_TYPE_VLAN)) || (h0->type == clib_host_to_net_u16 (ETHERNET_TYPE_DOT1AD))) { ethernet_vlan_header_t *outer = (ethernet_vlan_header_t *) (h0 + 1); outer = (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_VLAN)) ? outer + 1 : outer; if (PREDICT_TRUE (outer->type) == clib_host_to_net_u16 (ETHERNET_TYPE_IP4)) { hash_key = ipv4_get_key ((ip4_header_t *) (outer + 1)); } else if (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_IP6)) { hash_key = ipv6_get_key ((ip6_header_t *) (outer + 1)); } else if (outer->type == clib_host_to_net_u16 (ETHERNET_TYPE_MPLS)) { hash_key = mpls_get_key ((mpls_unicast_header_t *) (outer + 1)); } else { hash_key = outer->type; } } else { hash_key = 0; } return hash_key; } void handoff_eth_func (void **p, u32 *hash, u32 n_packets) { u32 n_left_from = n_packets; while (n_left_from >= 8) { u64 key[4] = {}; clib_prefetch_load (p[4]); clib_prefetch_load (p[5]); clib_prefetch_load (p[6]); clib_prefetch_load (p[7]); key[0] = eth_get_key ((ethernet_header_t *) p[0]); key[1] = eth_get_key ((ethernet_header_t *) p[1]); key[2] = eth_get_key ((ethernet_header_t *) p[2]); key[3] = eth_get_key ((ethernet_header_t *) p[3]); hash[0] = ho_hash (key[0]); hash[1] = ho_hash (key[1]); hash[2] = ho_hash (key[2]); hash[3] = ho_hash (key[3]); hash += 4; n_left_from -= 4; p += 4; } while (n_left_from > 0) { u64 key; key = eth_get_key ((ethernet_header_t *) p[0]); hash[0] = ho_hash (key); hash += 1; n_left_from -= 1; p += 1; } } VNET_REGISTER_HASH_FUNCTION (handoff_eth, static) = { .name = "handoff-eth", .description = "Ethernet/IPv4/IPv6/MPLS headers", .priority = 2, .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_func, }; void handoff_eth_sym_func (void **p, u32 *hash, u32 n_packets) { u32 n_left_from = n_packets; while (n_left_from >= 8) { u64 key[4] = {}; clib_prefetch_load (p[4]); clib_prefetch_load (p[5]); clib_prefetch_load (p[6]); clib_prefetch_load (p[7]); key[0] = eth_get_sym_key ((ethernet_header_t *) p[0]); key[1] = eth_get_sym_key ((ethernet_header_t *) p[1]); key[2] = eth_get_sym_key ((ethernet_header_t *) p[2]); key[3] = eth_get_sym_key ((ethernet_header_t *) p[3]); hash[0] = ho_hash (key[0]); hash[1] = ho_hash (key[1]); hash[2] = ho_hash (key[2]); hash[3] = ho_hash (key[3]); hash += 4; n_left_from -= 4; p += 4; } while (n_left_from > 0) { u64 key; key = eth_get_sym_key ((ethernet_header_t *) p[0]); hash[0] = ho_hash (key); hash += 1; n_left_from -= 1; p += 1; } } VNET_REGISTER_HASH_FUNCTION (handoff_eth_sym, static) = { .name = "handoff-eth-sym", .description = "Ethernet/IPv4/IPv6/MPLS headers Symmetric", .priority = 1, .function[VNET_HASH_FN_TYPE_ETHERNET] = handoff_eth_sym_func, }; /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */