summaryrefslogtreecommitdiffstats
path: root/src/vnet/ethernet
AgeCommit message (Expand)AuthorFilesLines
2017-10-24Add extern to *_main global variable declarations in header files.Dave Wallace1-1/+1
2017-10-09vppapigen: support per-file (major,minor,patch) version stampsDave Barach1-0/+2
2017-10-04[aarch64] Fixes CLI crashes on dpaa2 platform.Christophe Fontaine3-3/+3
2017-10-03Repair vlib API socket serverDave Barach1-1/+2
2017-09-25Fix sending GARP/NA on Bonded Interface Active/Backup Link Up/DownJohn Lo2-45/+2
2017-09-22IP-MAC,ND:wildcard events,fix sending multiple eventsEyal Bari2-5/+9
2017-09-18L2BD,ARP-TERM:fix arp query report mechanism+testEyal Bari2-25/+61
2017-09-11replace uint32_t with u32Neale Ranns1-2/+2
2017-09-11FIB table add/delete APINeale Ranns1-34/+93
2017-08-16Add missing counters for P2P ethernet interfacesPavel Kotucek2-0/+40
2017-08-15Support proxy ARP on mirrored TAP interfacesNeale Ranns1-4/+16
2017-08-09VPP-933 VPP crashes when deleting an ARP entryMatthew Smith1-0/+7
2017-08-09ARP reply: use interface to build rewrite stringNeale Ranns1-17/+13
2017-08-08L2 over MPLSNeale Ranns1-2/+2
2017-08-04don't truncate the interface name in 'sh ip arp'Neale Ranns1-1/+1
2017-08-01P2P EthernetPavel Kotucek8-27/+517
2017-07-23Improve L2 Input/Output Feature Infrastructure and UsageJohn Lo1-6/+2
2017-07-14vnet_buffer_t flags cleanupDamjan Marion1-7/+7
2017-07-14Introduce l{2,3,4}_hdr_offset fields in the buffer metadataDamjan Marion2-16/+10
2017-07-13Fix typo for non x86 platforms.Christophe Fontaine1-1/+1
2017-07-07ETH:optimized double is_tagged checkEyal Bari1-2/+24
2017-07-06Send GARP/NA on bonded intf slave up/down if in active-backup modeJohn Lo2-0/+92
2017-06-21ARP: ignore non-connected routes and non-interface sources when determing if ...Neale Ranns1-30/+97
2017-06-14ETH:fix l2_len/vlan count mismatch for > 2 tagsEyal Bari1-1/+4
2017-06-08P2P Ethernet - APIPavel Kotucek4-0/+302
2017-06-06Packets recieved on VLAN-0 map to the main interfaceNeale Ranns2-164/+32
2017-05-26ARP/ND use path_remove to complement path_addNeale Ranns1-1/+17
2017-05-23ARP/ND entries for the same address on different interfaces (VPP-848)Neale Ranns1-5/+5
2017-05-17VPP-719: Accept ARP replies from VRRP hw addrMatthew Smith1-7/+27
2017-05-17Add ethernet type to support NSH over ethernetHongjun Ni1-1/+1
2017-05-17ARP learning fixes (VPP-843)Neale Ranns1-72/+47
2017-05-06Fix mac check issue for vitual tunnel interface with no mac addressHongjun Ni1-0/+3
2017-04-19Learn IP6 link-local ND entries from NSs sourced from link-local addressNeale Ranns1-0/+3
2017-04-11Remove usued, redundant and deprecated code from lookup.hNeale Ranns1-9/+5
2017-04-07MPLS McastNeale Ranns4-5/+6
2017-04-06Use thread local storage for thread indexDamjan Marion3-11/+12
2017-04-03Adjacency layout change and move to vnet/adjNeale Ranns1-1/+0
2017-03-31ARP/API:protect against identical registrationsEyal Bari1-55/+38
2017-03-30BRIDGE-DOMAIN:enable arp term,mac/ip learning on local intsEyal Bari1-8/+7
2017-03-27Mcast rewrite no memcpyNeale Ranns1-21/+23
2017-03-17Attached hostsNeale Ranns1-18/+54
2017-03-13Add MAC address check in ethernet-input node if interface in L3 modeJohn Lo1-6/+17
2017-03-10Retire vpp_liteDamjan Marion2-0/+234
2017-03-09IMplementation for option to not create a FIB table entry when adding a neigh...Neale Ranns3-29/+46
2017-03-08ARP resilience in the absence of IP config on input and output interfacesNeale Ranns1-0/+6
2017-03-03Implement a loopback instance allocation scheme.Jon Loeliger2-12/+117
2017-02-21VPP-540 : pbb tag rewrite detailsPavel Kotucek1-28/+10
2017-02-02SNAT: changed source for outbound address FIB entry (VPP-613)Matus Fabian1-5/+2
2017-01-27IP Multicast FIB (mfib)Neale Ranns3-21/+85
2017-01-12Fix ARP on unnumbered interfaces (VPP-583)Neale Ranns1-2/+15
">to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 1]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 1], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) { to_next[0] = from[pi - 1]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 1]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 1], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 3 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); to_next[0] = from[pi - 2]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 2]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 2], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) { to_next[0] = from[pi - 2]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 2]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 2], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 4 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); to_next[0] = from[pi - 3]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 3]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 3], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) { to_next[0] = from[pi - 3]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 3]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 3], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 5 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); if (pi - 3 >= 0) stage3 (vm, node, from[pi - 3]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); stage3 (vm, node, from[pi - 3]); to_next[0] = from[pi - 4]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 4]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 4], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) stage3 (vm, node, from[pi - 3]); if (((pi - 4) >= 0) && ((pi - 4) < pi_limit)) { to_next[0] = from[pi - 4]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 4]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 4], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif #if NSTAGES == 6 static STAGE_INLINE uword dispatch_pipeline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { u32 *from = vlib_frame_vector_args (frame); u32 n_left_from, n_left_to_next, *to_next, next_index, next0; int pi, pi_limit; n_left_from = frame->n_vectors; next_index = node->cached_next_index; while (n_left_from > 0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); pi_limit = clib_min (n_left_from, n_left_to_next); for (pi = 0; pi < NSTAGES - 1; pi++) { if (pi == pi_limit) break; stage0 (vm, node, from[pi]); if (pi - 1 >= 0) stage1 (vm, node, from[pi - 1]); if (pi - 2 >= 0) stage2 (vm, node, from[pi - 2]); if (pi - 3 >= 0) stage3 (vm, node, from[pi - 3]); if (pi - 4 >= 0) stage4 (vm, node, from[pi - 4]); } for (; pi < pi_limit; pi++) { stage0 (vm, node, from[pi]); stage1 (vm, node, from[pi - 1]); stage2 (vm, node, from[pi - 2]); stage3 (vm, node, from[pi - 3]); stage4 (vm, node, from[pi - 4]); to_next[0] = from[pi - 5]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 5]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 5], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } for (; pi < (pi_limit + (NSTAGES - 1)); pi++) { if (((pi - 1) >= 0) && ((pi - 1) < pi_limit)) stage1 (vm, node, from[pi - 1]); if (((pi - 2) >= 0) && ((pi - 2) < pi_limit)) stage2 (vm, node, from[pi - 2]); if (((pi - 3) >= 0) && ((pi - 3) < pi_limit)) stage3 (vm, node, from[pi - 3]); if (((pi - 4) >= 0) && ((pi - 4) < pi_limit)) stage4 (vm, node, from[pi - 4]); if (((pi - 5) >= 0) && ((pi - 5) < pi_limit)) { to_next[0] = from[pi - 5]; to_next++; n_left_to_next--; next0 = last_stage (vm, node, from[pi - 5]); vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, from[pi - 5], next0); n_left_from--; if ((int) n_left_to_next < 0 && n_left_from > 0) vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); } } vlib_put_next_frame (vm, node, next_index, n_left_to_next); from += pi_limit; } return frame->n_vectors; } #endif /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */