aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/l2
AgeCommit message (Collapse)AuthorFilesLines
2016-05-16VPP-68: L2 Rewrite: Support for chained classify tablesPierre Pfister1-0/+18
The classifying capabilities are pretty limited if only a single table can be used. This patch adds support for chained classify tables to L2 Rewrite feature. Change-Id: Ib678fe2028f17b441adb75d85bf3e31185e42c59 Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2016-05-16VPP-69: Create fib or bridge domain with arbitrary IDPierre Pfister2-3/+28
It appeared to me that it might be usefull to allow users to create fibs or bridge domains without a complete knowledge of the current used IDs. These changes define fib and bridge domain constructors when the provided ID is ~0. In such a case, an unused ID is used to create a new fib or bridge domain. Change-Id: Iaba69a023296e6d17bdde45980f9db84832a3995 Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2016-04-28Track number of ethernet vlans in a frameChris Luke2-0/+8
Adds flags to the packet buffer to track the number of VLANs in the current Ethernet frame. We use two bits to signify 0, 1 or 2 VLANs. The value 3 signififies an unknown quantity of VLANs, which includes "three or more" which is not widely supported. We place the bits in the vlib_buffer section; that is not the opaque section, so that all subordinate nodes can use it. For background, see the discussion thread at https://lists.fd.io/pipermail/vpp-dev/2016-March/000354.html The helper macro ethernet_buffer_header_size(buffer) uses these bits stored in "buffer" to calculate the Ethernet header size. The macro ethernet_buffer_set_vlan_count(buffer, count) sets the appropriate bit values based on the number in "count". By current frame we are referring to the case where a packet that arrives from the wire is carrying an encapsulated Ethernet packet. Once decapsulated that inner packet becomes the current frame. There are two places where this value is set; For most Ethernet frames this will be in the "ethernet-input" node when that node parses the Ethernet header. The second place is whenever vnet_update_l2_len() is used to update the layer 2 opaque data. Typically this function is used by nodes just before they send a packet into l2-input. These bits are zeroed in vlib_buffer_init_for_free_list() meaning that wherever the buffer comes from they have a reasonable value (eg, if ip4/ip6 generates the packet.) Primarily this VLAN counter is used by nodes below "ethernet- input" and "l2-input" to determine where the start of the current Ethernet header is. There is opaque data set by "ethernet-input" storing the offset of the current Ethernet header but, since this is opaque, it's not usable by downstream nodes. Previously several nodes have made assumptions regarding the location of the Ethernet header, including that it is always at the start of the packet buffer (incorrect when we have encapsulated packets) or that it is exactly sizeof(ethernet_header_t) away (incorrect when we have VLAN tags.) One notable case where this functionality is required is in ip6_neighbor when it generates a response to a received neighbor soliciation request; it reuses the incoming Ethernet header in-situ and thus needs to reliably know where that header begins. Also, at the suggestion of Dave Barach, this patch removes definition of HGSHM bits in the buffer flags since they are unused and unlikely to ever be. Change-Id: I00e4b9ced5ef814a776020c395d1774aba6185b3 Signed-off-by: Chris Luke <chrisy@flirble.org>
2016-04-25Improve mechanism for using loopback interface as BVI for BDsJohn Lo4-68/+23
When loopback interface is configured as BVI, instead of changing its output node from loopN-output to l2-input, the loopN-output node is now kept while its next tx node is changed from ethernet-input to l2-input. The packet setup previously done in bvi_to_l2 as part of l2-input is now performed in the loop output node. This change adds an extra node in the BVI output path but provides the following improvements: 1. IP address/route created on loopback prior to it being configured as BVI will still work properly. The requirement to (re)configure IP/route on loopback after it is configured as BVI is removed. 2. The output stats for loopback interfaces are always provided irrespective of their BVI configuration. 3. The loopback-BVI output stats can be batch updated outside the packet loop in output node, instead of per packet update in l2-input node, making l2-input node more efficient for BVI packets. 4. Restore original node property as implemented in node.c function vlib_node_add_next_with_slot() where next node indices stored in next slots of each node will remain unique. 5. Packet trace for BVI output includes loopN output node which provides useful packet data. Change-Id: I7f5bc72ef953a367363a179088210596881f9e73 Signed-off-by: John Lo <loj@cisco.com>
2016-04-22Add clib_memcpy macro based on DPDK rte_memcpy implementationDamjan Marion9-56/+56
Change-Id: I22cb443c4bd0bf298abb6f06e8e4ca65a44a2854 Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-04-18Add support for AArch32Christophe Fontaine1-2/+2
gcc version 4.9.2 (Raspbian 4.9.2-10) Tested on Linux raspberrypi 4.4.6-v7+ #875 SMP Tue Apr 12 16:33:02 BST 2016 armv7l GNU/Linux CPUs may be little or big endian, detect with gcc flags, not the processor architecture Add a new flag $(PLATFORM)_uses_openssl which allows to disable the link with openssl lib. vlib/vlib/threads.c: startup.conf must: - specify the heapsize as we don't have hugepages on raspbian cpu { main-core 3 } heapsize 64M Corrects in various files the assumption uword == u64 and replaces 'u64' cast with 'pointer_to_uword' and 'uword_to_pointer' where appropriate. 256 CPUs may create an OOM when testing with small memory footprint ( heapsize 64M ), allows the number of VLIB_MAX_CPUS to be set in platforms/*.mk vppinfra/vppinfra/longjmp.S: ARM - copy r1 (1st parameter of the setjmp call) to r0 (return value) vppinfra/vppinfra/time.h: On ARMv7 in AArch32 mode, we can access to a 64bit register to retreive the cycles count. gcc on rpi only declare ARM_ARCH 6. Override this info, and check if it is possible to use 'mrrc'. /!\ the time function will NOT work without allowing the user mode access to the PMU. You may download the source of the kmod here: https://github.com/christophefontaine/arm_rdtsc Change-Id: I8142606436d9671a184133b935398427f08a8bd2 Signed-off-by: Christophe Fontaine <christophe.fontaine@qosmos.com>
2016-04-15Took care of code review comments. Extended the fix to other files.rangan2-0/+4
Change-Id: I24e688884cd5896b317efb53e1d193f7d363715a Signed-off-by: rangan <rangan@cisco.com>
2016-04-14Change ARP and IP6-ND nodes to use interface-output node for outputJohn Lo1-15/+9
The current mechanism for setting up arp-input and ip6-discover-neighbor output nodes for interfaces using their interface link up/down callback function is inefficient and has potential timing issue, as observed for bonded interface. Now both nodes will setup output interface sw_if_index in the the sw_if_index[VLIB_TX] field of current packet buffer and then use the interface-ouput node to tx the packet. One side effect is that vlib_node_add_next_with_slot() needs to be modified to allow the same output node-id to be put at the specified slot, even if another slot contain that same node-id already exist. This requirement is caused by BVI support where all loopback interfaces set up as BVIs will have the same output node-id being l2-input while, for output-interface node, the output slot must match the hw_if_index of the interface. Change-Id: I18bd1d4fe9bea047018796f7b8a4d4c20ee31d6e Signed-off-by: John Lo <loj@cisco.com>
2016-03-24l2-rw: Packet rewrite feature for L2 bridgesPierre Pfister4-1/+688
This patch defines a new l2input feature: l2-rw It makes use of vnet_classify in order to match packets and applies mask/value changes depending on the matched classify entry. Change-Id: Ia98c128931e59195bf3ecb66721e155ff9049a2e Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2016-03-23Fix L2 flood packet replication interaction with VXLAN-tunnelJohn Lo1-17/+16
The check for input sw_if_index against output sw_if_index is not correct for the interface on the replication order after VXLAN tunnel because the encap code overwrite packet sw_if_index[VLIB_RX] with that of the VXLAN tunnel sw_if_index. The check should be done using sw_if_index[VLIB_RX] saved in the packet context. Change-Id: I175717221409977e80576e84dfe5362d1f6aed2f Signed-off-by: John Lo <loj@cisco.com>
2016-03-14fix declaration of symbol of different sizeJean-Mickael Guerin3-3/+4
I got many warnings at the link step with gcc version 5.3.1 20160225 (Ubuntu 5.3.1-10ubuntu2): /usr/bin/ld: Warning: size of symbol `cop_input_node' changed from 112 in vnet/cop/.libs/cop.o to 168 in vnet/cop/.libs/node1.o /usr/bin/ld: Warning: size of symbol `ethernet_input_node' changed from 112 in vnet/.libs/interface.o to 136 in vnet/ethernet/.libs/node.o /usr/bin/ld: Warning: size of symbol `l2output_node' changed from 112 in vnet/l2/.libs/l2_efp_filter.o to 120 in vnet/l2/.libs/l2_output.o /usr/bin/ld: Warning: size of symbol `srp_input_node' changed from 112 in vnet/srp/.libs/format.o to 136 in vnet/srp/.libs/node.o /usr/bin/ld: Warning: size of symbol `vxlan_encap_node' changed from 112 in vnet/vxlan/.libs/vxlan.o to 128 in vnet/vxlan/.libs/encap.o /usr/bin/ld: Warning: size of symbol `vxlan_input_node' changed from 112 in vnet/vxlan/.libs/vxlan.o to 144 in vnet/vxlan/.libs/decap.o ... Looking at vlib_node_registration_t, I think the reason is that the char * next_nodes[] could be bigger where the variable is defined in .c file. We should mark global variables as external in header files. Some of them can be made static. Change-Id: Ieb6961fd08180c9a69e1d884852703f3eb23f23f Signed-off-by: Jean-Mickael Guerin <jean-mickael.guerin@6wind.com>
2016-03-09Fix IPv6 NDP and bridge BVI and restore NDP and ARP when BVI move is changed.Pierre Pfister1-3/+12
Both ARP and NDP need to be called when hi->output_node_index is changed. It does not look like a perfect solution though. Maybe an actual up-down call would be better... Change-Id: If2988d131e77f4fc522f34f3ffe2d5ba9c1d506c Signed-off-by: Pierre Pfister <ppfister@cisco.com>
2016-01-27Fix l2output error-drop next node indexDamjan Marion1-4/+2
Change-Id: I8a79f683350b77bd56b44e37a099293033aadd15 Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-01-19Enhance and fix packet trace for IP forwarding as follows:John Lo1-0/+1
1. Add fib index to IP6 forwarding trace. 2. Display adjacency index in IP forwarding trace. 3. Fix adjacency display for L3 to L2 forwarding such as BVI and VXLAN tunnel decap. 4. Setup VXLAN tunnel fib index properly for packet trace. Change-Id: I261fea5abf51e2550d24cdcee53887be2fdd08de Signed-off-by: John Lo <loj@cisco.com>
2016-01-14hw0 used without initialization in when DPDK is undefinedShesha Sreenivasamurthy1-2/+3
Change-Id: I0d044669dbd57c9a25a4d917c0e3ab8fda5808aa Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
2015-12-16Don't send more than one mapping req in l2output nodeDamjan Marion1-3/+13
Change-Id: I4205613818d664abb94b62a33e1353b87d5b1c7d Signed-off-by: Damjan Marion <damarion@cisco.com>
2015-12-14Warnings be goneDave Barach1-0/+1
Change-Id: Id1dcb9d50c3cc516bd2f74bb815eab1c7c55cdb3 Signed-off-by: Dave Barach <dave@barachs.net>
2015-12-14Remove inline from definition of bd_validate()Damjan Marion2-2/+2
Change-Id: Id71c3903e19da9bbdbec9dd0af5aed112135c60b Signed-off-by: Damjan Marion <damarion@cisco.com>
2015-12-12Clear one-time test key, add missing cast in big-endian l2 fib key computationDave Barach2-1/+2
Change-Id: I014fdd3cc174f787ed00af8e3861fb40585522a1 Signed-off-by: Dave Barach <dave@barachs.net>
2015-12-08Initial commit of vpp code.v1.0.0Ed Warnicke31-0/+9617
Change-Id: Ib246f1fbfce93274020ee93ce461e3d8bd8b9f17 Signed-off-by: Ed Warnicke <eaw@cisco.com>