summaryrefslogtreecommitdiffstats
path: root/src/vnet/interface_output.c
AgeCommit message (Collapse)AuthorFilesLines
2019-11-03gso: fix buffers traceAndrew Yourtchenko1-0/+1
When segmenting, new buffers must inherit the original buffer trace handle. Type: fix Change-Id: Ibd1859a501b2862906dfc563b98652cfee5681da Signed-off-by: Benoît Ganne <bganne@cisco.com> Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2019-10-04misc: add vnet classify filter set supportDave Barach1-7/+15
Type: feature Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I79b216d2499df143f53977e5b70382f6f887e0bc (cherry picked from commit f5667c3055dbd6755277f085c6778c2b1104aa6e)
2019-09-28ipsec ip tcp l2: multiarch nodes cannot be declared as staticDamjan Marion1-1/+1
Credits to ray.kinsella@intel.com who spotted the issue and identified root cause. Type: fix Change-Id: I4afe74c47769484309f6aebca2de56ad32c8041f Signed-off-by: Damjan Marion <damarion@cisco.com> (cherry picked from commit d770cfc96257f9bd9e0c96c8ebe50e4531dc1bc5)
2019-09-25misc: improve pcap drop trace outputDave Barach1-0/+54
Append <nodename>: <error-string> to pcap drop traces. The data displays perfectly fine in [vanilla] wireshark, and makes it 100% obvious which node dropped the packet, and why. Type: feature Ticket: VPP-1776 Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I9b964b99da4011b93723354db6ef0b128fca20cb (cherry picked from commit 9382ad9b390e17c8bfd8229342656348d059becb)
2019-09-25misc: unify pcap rx / tx / drop traceDave Barach1-150/+15
Use a single vnet_pcap_t in vlib_global_main, specifically to support unified tracing Update sphinx docs, doxygen tags Type: refactor Ticket: VPP-1776 Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Id15d41a596712968c0714cef1bd2cd5bc9cbdd55 (cherry picked from commit 33909777c63712ca397165cd92e7cc62208eb5c8)
2019-09-25interface: fix pcap drop trace in case of vlanBenoît Ganne1-1/+12
Type: fix Change-Id: If3c4e5c376b51a26143d8922dcacfbda534163bd Signed-off-by: Benoît Ganne <bganne@cisco.com> (cherry picked from commit 4e323cbdbd57fcd77db68e295f639288441ef3e3)
2019-09-25misc: classifier-based packet trace filterDave Barach1-2/+17
See .../src/vnet/classify/trace_classify.h for the business end of the scheme. It would be best to hash pkts, prefetch buckets, and do the primary table lookups two at a time. The inline as given works, but perf tuning will be required. "At least it works..." Add "classify filter" debug cli, for example: classify filter mask l3 ip4 src dst \ match l3 ip4 dst 192.168.2.10 src 192.168.1.10 Add "pcap rx | tx trace ... filter" to use the current classify filter chain Patch includes sphinx documentation and doxygen tags. Next step: device-driver integration Type: feature Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: I05b1358a769f61e6d32470e0c87058f640486b26 (cherry picked from commit 9137e5400699bed9f7c0095187839a8b38273100)
2019-09-25interface: use the correct condition for checking if the pcap fd is openAndrew Yourtchenko1-1/+1
The 9af7e2e87e used a comparison that fd is >= 0 to check that the pcap needs closing. While the pcap_close() function does reset the file descriptor to -1, the freshly initialized structure has it equal to 0. This causes the VPP to close stdin if the packets are being seen on pg interface without the capture file being opened. This triggers the vpp attempting to read from STDIN (another bug), which results in running out of memory. Change-Id: I11d61422701500a9b3e0dd52d59383f297d57f54 Type: fix Fixes: 9af7e2e87e Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com> (cherry picked from commit 4da1506d39eb8f67ed2c48c76916bb6bcca6fbf1)
2019-09-25interface: fix pcap_write functionAndrew Yourtchenko1-0/+2
when use pcap cli to capture pcakets into two files rx01.pcap && rx02.pcap, the first time: 1)pcap rx trace on max 100 intfc any file rx01.pcap 2)......the process of capture data to buffer...... 3)pcap rx trace off the second time: 4)pcap rx trace on max 100 intfc any file rx02.pcap 5)......the process of capture data to buffer...... 6)pcap rx trace off the pcap_write function bug in this two lines pm->n_packets_captured = 0; if (pm->n_packets_captured >= pm->n_packets_to_capture) referring to calling pcap_close() will result in that the twice pcap cli both writes the packets into rx01.pcap, but nothing into rx02.pcap. Beside, the rx02.pcap file will not be created. solution: separate the pcap_close() out of pcap_write() The automatic cherrypick did not work, so the manual cherrypick of commit 9af7e2e87e6a11fb69309fc9ce4432acbc4e3 was performed as follows: 0) git checkout stable/1908 1) git checkout -b stable-1908-history-rewrite 2) git rebase -i d1e17d00bb81659bf9e45caa62482bf7029d98f7~1 3) in the editor, mark the second commit as "edit", search for the following commits and edit as in the snippet below: edit 30d28bdfd api: enforce vla is last and fixed string type drop 4c19bfd93 vlib: clean up the "pcap dispatch trace" debug CLI pick 4aef0dd82 dpdk: fix extended stats edit 1dafb7fd8 dpdk: initialize rte_mbuf during mempool dequeue drop 4b943d632 misc: clean up "pcap [rx|tx] trace" debug CLI 4) close the editor 5) git cherry-pick 9af7e2e87e6a11fb69309fc9ce4bf8432acbc4e3 (it applies cleanly) 6) git rebase --continue (rebase of a 1000+ patches) 7) at prompt - git cherry-pick -x e5948fb49a6eeaf437323cc1043a350cd33bcd47 8) git rebase --continue 9) at prompt - git cherry-pick -x b97641c79f4aaf0069268c550f263167ddea2b34 10) git rebase --continue 11) the rebase finished. 12) git checkout stable/1908 13) git diff stable/1908..stable-1908-history-rewrite | patch -p1 14) discard the whitespace-only hunk 15) git commit -a -s; edit this commit message Type: fix Change-Id: Iedeb46f9cf0a4cb12449fd75a4014f95f3bb3fa8 Signed-off-by: Jack Xu <jack.c.xu@ericsson.com> Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2019-09-25interface: Remove residual dpdk bonding codeSteven Luong1-2/+1
dpdk bonding code was removed in 19.08. However, there are still references to VNET_SW_INTERFACE_FLAG_BOND_SLAVE which was set by the already removed code. Type: fix Signed-off-by: Steven Luong <sluong@cisco.com> Change-Id: I949a7281e6273f2733dd7532cc4a3bb4f3ce30de (cherry picked from commit 5ad541eeaa428c6a88c40e2088cdaabc0748c9df)
2019-09-02gso: fix segmentation when gso_size greater than vlib buffer sizeMohsin Kazmi1-1/+4
Type: fix Ticket: VPP-1751 Change-Id: I5ffb078492adc97374290de404f2ec0102b75184 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com> (cherry picked from commit 3f1964d2d2847c5307694fe8daea0a7eef1e2733)
2019-08-18gso: fix the segmentation to use current_data offsetMohsin Kazmi1-15/+16
Type: fix Ticket: VPP-1740 Change-Id: If3e34b5b8260e4c50af338895066c2c96f4603af Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com> (cherry picked from commit 0a5734372d7176146126f83f51b0b9062f90fe94)
2019-08-07interface: fix checksum flagsFlorin Coras1-0/+3
Type:fix Fixes:4208a4c Change-Id: I7077788cd14f539b06ead5dc65d8411940438bae Signed-off-by: Florin Coras <fcoras@cisco.com> Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2019-08-01interface: fix pcap tx/rx trace cli handlingJohn Lo1-1/+1
Provide default packet_to_capture value. Display interface name correctly for "pcap tx/rx trace status". Type: fix Signed-off-by: John Lo <loj@cisco.com> Change-Id: I7064d0dbea236a9aff68bba7fbaf2c4a73b16c6f Signed-off-by: John Lo <loj@cisco.com>
2019-07-31devices interface tests: vhosst GSO supportSteven Luong1-4/+0
Add gso option in create vhost interface to support gso and checksum offload. Tested with the following startup options in qemu: csum=on,gso=on,guest_csum=on,guest_tso4=on,guest_tso6=on,guest_ufo=on, host_tso4=on,host_tso6=on,host_ufo=on Type: feature Change-Id: I9ba1ee33677a694c4a0dfe66e745b098995902b8 Signed-off-by: Steven Luong <sluong@cisco.com>
2019-07-15interface: fix issue that pcap rx/tx trace not available when there are ↵Wei CHEN1-4/+5
worker threads Type: fix Change-Id: Ie9a3a78b45b53344a0a5d7e2027c0e0354a49ebe Signed-off-by: Wei CHEN <weichen@astri.org>
2019-06-20interface: fix the incorrect sizes/offsets in the tso segmentationAndrew Yourtchenko1-2/+2
The copying of the first segment copied too small amount of data. The copying of the second and subsequent segments used the wrong data offset - for the case of GSO enabled it starts from 12 bytes earlier. Change-Id: I3adc532c175babc1ca1e121c7e12e6cafbdb9974 Type: fix Ticket: VPP-1700 Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2019-06-19interface: Fix the tso segmentationMohsin Kazmi1-10/+9
ASSERT (b[0]->current_length > 0) fails in single loop of function vnet_interface_output_node_inline_gso. Under 'do_segmentation' condition, there are two places in code which execute "continue" in while-loop without incrementing the pointer to next buffer which is wrong behavior. In fact, at one place, current buffer is also freed. In which case, during next iteration buffer ptr still points to free buffer which current length is 0 and triggers the above assert. Type: fix Change-Id: Ic9d540748c1d00a54e18acc2b0f23730728d7460 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2019-05-27rewrite vnet_interface_output_node_inline_gsoZhiyong Yang1-59/+47
1. Using vlib_get_buffers replaces original logic. 2. Simplify some implementation. Change-Id: I46cd3487c1d3289074d9dff22aa384688be326dd Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
2019-04-23vnet: clean up calc_checksums()Zhiyong Yang1-7/+8
Remove the duplicated code and unnecessary operations. Change-Id: I78005848d29d3156165627926a79015d590d61a6 Signed-off-by: Zhiyong Yang <zhiyong.yang@intel.com>
2019-04-17Duplicate pcap tx trace fixNeale Ranns1-3/+0
Change-Id: I0657cb44f58942ef281046dd3841bda669b10589 Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-03-21error-drop; print interface by nameNeale Ranns1-1/+2
Change-Id: I19736180c1e7e1d13dbb74bcd8f1dfae762b1d25 Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-03-13Move the punt/drop nodes into vlibNeale Ranns1-286/+91
The core VLIB library now has a means to dispoe of buffers. the vlib punt/drop node counts node errors. the vnet punt/drop node counts interface errors. speed up both nodes with the usual reciepe. before: error-drop 8.33e1 after: drop 4.51e1 error-drop 6.81e0 Change-Id: If2e919458a3f2e9d71dbf9c6f1352dafb186a05b Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-03-11disable multiarch for error-dropFilip Tehlar1-2/+4
this is a workaround that avoids building/linking other archs for error-node. Combination error-node + avx512 arch triggers a crash in pg during test run. Change-Id: I6ed39fdf0a58f82d951082b1cf91ab2a57d8108c Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2019-03-06interface: migrate old MULTIARCH macros to VLIB_NODE_FNFilip Tehlar1-23/+19
Change-Id: Ib92e338d0becbfbc38e6b9f34f262df76b63eead Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2019-02-27VPP-1576: fix Coverity issuesDave Barach1-1/+2
Change-Id: I8b59b2e1c0525abf4b0492e50a7af57df4cd3ce2 Signed-off-by: Dave Barach <dave@barachs.net>
2019-02-26Move pcap rx/tx trace code out of the dpdk pluginDave Barach1-0/+46
Moved code to the ethernet input node, and the interface output path(s). Since we no longer skip ethernet-input, there's no reason for device drivers to know anything about pcap rx tracing, etc. Change-Id: I08d32fb1b90cbee1bd4f609837d533e047b36fa4 Signed-off-by: Dave Barach <dave@barachs.net>
2019-02-19tap gso: experimental supportAndrew Yourtchenko1-25/+408
This commit adds a "gso" parameter to existing "create tap..." CLI, and a "no-gso" parameter for the compatibility with the future, when/if defaults change. It makes use of the lowest bit of the "tap_flags" field in the API call in order to allow creation of GSO interfaces via API as well. It does the necessary syscalls to enable the GSO and checksum offload support on the kernel side and sets two flags on the interface: virtio-specific virtio_if_t.gso_enabled, and vnet_hw_interface_t.flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO. The first one, if enabled, triggers the marking of the GSO-encapsulated packets on ingress with VNET_BUFFER_F_GSO flag, and setting vnet_buffer2(b)->gso_size to the desired L4 payload size. VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO determines the egress packet processing in interface-output for such packets: When the flag is set, they are sent out almost as usual (just taking care to set the vnet header for virtio). When the flag is not enabled (the case for most interfaces), the egress path performs the re-segmentation such that the L4 payload of the transmitted packets equals gso_size. The operations in the datapath are enabled only when there is at least one GSO-compatible interface in the system - this is done by tracking the count in interface_main.gso_interface_count. This way the impact of conditional checks for the setups that do not use GSO is minimized. "show tap" CLI shows the state of the GSO flag on the interface, and the total count of GSO-enabled interfaces (which is used to enable the GSO-related processing in the packet path). This commit lacks IPv6 extension header traversal support of any kind - the L4 payload is assumed to follow the IPv6 header. Also it performs the offloads only for TCP (TSO - TCP segmentation offload). The UDP fragmentation offload (UFO) is not part of it. For debug purposes it also adds the debug CLI: "set tap gso {<interface> | sw_if_index <sw_idx>} <enable|disable>" Change-Id: Ifd562db89adcc2208094b3d1032cee8c307aaef9 Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
2019-02-02Deprecate old mutliarch code, phase 1Damjan Marion1-4/+1
It is causing compilation sloness with gcc-7 so removing it before it was originally planned. So far macros are left in the tree so we can know which nodes to convert to new multiarch code. Change-Id: Idb14622ca61fdce1eba59723b20d98715b7971e6 Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-24move misc-drop-errors to vnetDave Barach1-0/+31
thanks, Eliot... Change-Id: I8d8fee09bf1fe24933e6ef4e126dba8e22fe62b1 Signed-off-by: Dave Barach <dave@barachs.net>
2019-01-07Fix TCP checksum.Andrej Kozemcak1-1/+4
Set TCP checksum to zero, before calculate the TCP checksum. Change-Id: Id96743334481804b8ebb74afef2f1dbfed29e0cb Signed-off-by: Andrej Kozemcak <andrej.kozemcak@pantheon.tech>
2018-11-26Add a feature arc consistency checkDave Barach1-0/+1
Verify that last node in the computed feature order matches reality. This check doesn't make sense in all cases, so we skip it if the newly-added vnet_feature_arc_registration_t ".last_in_arc" datum is a NULL pointer. Change-Id: Ia99c3e2b2da2e4780a7d5bc71670c5742a66fef2 Signed-off-by: Dave Barach <dave@barachs.net>
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach1-6/+6
Change-Id: Id4f37f5d4a03160572954a416efa1ef9b3d79ad1 Signed-off-by: Dave Barach <dave@barachs.net>
2018-11-13vlib rename vlib_frame_args(...) to vlib_frame_scalar_args(..)Damjan Marion1-5/+5
Typically we have scalar_size == 0, so it doesn't matter but vlib_frame_args was providing pointer to scalar frame data, not vector data. To avoid future confusion function is renamed to vlib_frame_scalar_args(...) Change-Id: I48b75523b46d487feea24f3f3cb10c528dde516f Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-10-23c11 safe string handling supportDave Barach1-1/+1
Change-Id: Ied34720ca5a6e6e717eea4e86003e854031b6eab Signed-off-by: Dave Barach <dave@barachs.net>
2018-06-26node functions cannot be always_inlineDamjan Marion1-1/+1
Thanks to gcc-8 for highlighting this... Change-Id: I53bfab631a40fd1b680c76a48b0307a33fa2b154 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-04-27A bit of buffer metadata reshuffling to accommodate flow_idDamjan Marion1-5/+5
Change-Id: I2794384557c6272fe217269b14a9db09eda19220 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-04-10Make IPsec tunnel intf work with IPv4 output featuresMatthew Smith1-0/+6
With no IPv4 output features on an IPsec tunnel inferface, when packets are forwarded to that interface, they reach the ipsec-if-output node via the output_node_index on the hw interface and they are handled correctly. When an IPv4 output feature (e.g. output ACL, outbound NAT) is enabled on an IPsec tunnel interface, outbound IPsec stops working for that interface. The last node in the ip4-output feature arc is interface-output. From there a packet is sent to ipsec<N>-output, and then ipsec<N>-tx. The tx function for an IPsec tunnel interface that is called by ipsec<N>-tx is a dummy that doesn't do anything except write a warning message. Enable a feature on the interface-output feature arc for an IPsec tunnel interface so the ipsec-if-output node is reached from the interface-output node. Change-Id: Ia9c73d3932f5930ec7ce0791a0375b1d37148b01 Signed-off-by: Matthew Smith <mgsmith@netgate.com>
2018-01-24Improve tunnel interface creation performanceJohn Lo1-8/+21
Modify interface creation to allow creation of tunnel interfaces without dedicated per tunnel output and tx nodes which are not used for most tunnel types. Also changed interface-output node function vnet_per_buffer_interface_output() so it does not rely on hw_if_index as the next node index which is not flexible nor efficient for large scale tunnel interfaces. The improvenemts are done for VXLAN, VXLAN-GPE, GENEVE and GTPU tunnels. GRE tunnel is still using per tunnel output nodes which will be changed in a separate patch with other GRE enhencements. Change-Id: I4123c01c0d2ead814417a867adb8c8a407e4df55 Signed-off-by: John Lo <loj@cisco.com>
2017-10-04[aarch64] Fixes CLI crashes on dpaa2 platform.Christophe Fontaine1-1/+1
- always use 'va_args' as pointer in all format_* functions - u32 for all 'indent' params as it's declaration was inconsistent Change-Id: Ic5799309a6b104c9b50fec309cba789c8da99e79 Signed-off-by: Christophe Fontaine <christophe.fontaine@enea.com>
2017-08-02Make ip csum configurable in vlib buffer functionsFlorin Coras1-1/+0
Also fixes csum computation for lisp control plane 4o6 encapsulated control messages. Change-Id: I991e0b5c0d16dc51e0b5bdc79e1d752270b34765 Signed-off-by: Florin Coras <fcoras@cisco.com>
2017-07-18TCP/UDP checksum offload APIDave Barach1-5/+90
Change-Id: I2cb6ce4e29813f6602b14e6e61713fb381fbcef8 Signed-off-by: Dave Barach <dave@barachs.net>
2017-07-12Deprecate support for flattened output nodesDamjan Marion1-265/+0
Change-Id: Id117e219146d9994340fb38c00233ea67db8929b Signed-off-by: Damjan Marion <damarion@cisco.com>
2017-07-08lldp packet transmission on a bonded interfaceSteve Shin1-2/+4
LLDP packets are dropped at interface output node if each slave's link is configured as the LLDP interface. The admin state is configured and managed by the bonded interface, so slave link's state is down by default. The checking for the admin state UP should be ignored for the slave link. Change-Id: I06ca250f42fcb8cc50e0ea3a3817a2c5b56865df Signed-off-by: Steve Shin <jonshin@cisco.com>
2017-04-11Fix bug in configure 'pcap drop trace on file xx.cap' command (VPP-691)jerryian1-1/+1
Change-Id: Id9cc1fbe18099fae483a823dc7c2b16d6bc46a8c Signed-off-by: jerryian <gu.jian1@zte.com.cn>
2017-04-06Use thread local storage for thread indexDamjan Marion1-26/+27
This patch deprecates stack-based thread identification, Also removes requirement that thread stacks are adjacent. Finally, possibly annoying for some folks, it renames all occurences of cpu_index and cpu_number with thread index. Using word "cpu" is misleading here as thread can be migrated ti different CPU, and also it is not related to linux cpu index. Change-Id: I68cdaf661e701d2336fc953dcb9978d10a70f7c1 Signed-off-by: Damjan Marion <damarion@cisco.com>
2017-03-17Fix IP feature ordering.Neale Ranns1-1/+0
Drop comes before lookup when enabled. is_first_or_last is not required when setting a feature, the anchor is added in find_config_with_features(). Don't make the PG interfaces automatically L3 enabled, this way we can have tests that check the L3 protocol disbaled behaviour. Change-Id: Icef22a920b27ff9cec6ab2da6b05f05c532cb60f Signed-off-by: Neale Ranns <nranns@cisco.com>
2017-03-06Quad loop interface-output nodeDamjan Marion1-13/+48
Change-Id: I0c24d9af90241083ae56b1d52239d2d55e70b65e Signed-off-by: Damjan Marion <damarion@cisco.com>
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion1-0/+1404
Change-Id: I7b51f88292e057c6443b12224486f2d0c9f8ae23 Signed-off-by: Damjan Marion <damarion@cisco.com>