Hi Yuwei, I did not suggest one can create VXLAN tunnel and send the dcap packet directly to ip4-input or ip4-input-nochecksum. It will not work because the VXLAN payload still have a MAC header before the IP header after decap. That's why it only works if it is sent to ethernet-input. You are getting checksum error, because ip4-input node is treating the MAC header as if it is an IP header.
I was suggesting you may be able to create VXLAN-GPE tunnel (with a different CLI to that of the VXLAN one) which is different to VXLAN tunnel. With VXLAN-GPE, you can potentially send just IP packet without ethernet header, with the appropriate protocol field in the VXLAN-GPE header set accordingly. Then it is feasible to send the packet directly to ip4-input or ip4-input-nochecksum. I am not sure how complete VXLAN-GPE handling is implemented in VPP so you may need to improve the code to handle it. Note that big portion of performance gain you observed is because ethernet-input node is bypassed, in addition to saving from not calculating IP checksum. As I described before, VXLAN is supposed to be used for L2 to carry ethernet packets. If it is used for L3, it is not standard usage and will not interoperate properly with other devices. For L3, VXLAN-GPE should ideally be used as it is designed to handle encap/decap of various packet types, as GPE mean "generic protocol extension", including L2 and L3 protocols. Regards, John From: Zhang, Yuwei1 <yuwei1.zh...@intel.com> Sent: Monday, October 22, 2018 4:50 AM To: John Lo (loj) <l...@cisco.com>; vpp-dev@lists.fd.io Subject: RE: [vpp-dev] one question IP checksum Hi John, thanks for your instructions, I tried to use your method with below steps: 1) Create tunnel: vppctl create vxlan tunnel src 10.0.0.1 dst 10.0.0.2 vni 24 encap-vrf-id 0 decap-next node ip4-input-no-checksum; 2) Send vxlan traffic without inner ip header; I can see obvious performance gain. But if I set the decap-next node ipv4-input, the vpp will drop the packet after decapsulation cause of the wrong inner ip header checksum. But when I set the decap-next node Ethernet-input, the packet will not be dropped. I'm a little confuse about this. BTW, could you give me some explanation about which scenario should use vxlan over l2 and which scenario should use vxlan over l3? Thanks for your kindly help again! Regards, Yuwei From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> [mailto:vpp-dev@lists.fd.io] On Behalf Of John Lo (loj) via Lists.Fd.Io Sent: Saturday, October 20, 2018 11:06 PM To: Zhang, Yuwei1 <yuwei1.zh...@intel.com<mailto:yuwei1.zh...@intel.com>>; vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Cc: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: Re: [vpp-dev] one question IP checksum Hi Yuwei, I see that you are using VXLAN to carry L3 packets which seems to still have ethernet header. This is not standard usage of VXLAN so I am not aware of a way to achieve what you desired via some kind of configuration of VPP. A more optimal (also not standard) way may be to just send IP payload in VXLLAN tunnel without Ethernet header. Then on decap, you can send the packet directly to ip-input-nochecksum node instead of (ethernet-input node). The proper way to do this would be to use VXLAN-GPE which include a protocol header to specify payload type. BTW, your claim of UDP checksum on the outer packet would've already cover the inner payload including its IP header is not necessarily correct. For IPv4, the UDP checksum is optional and often left as 0 so not calculated. VPP VXLAN encap would leave UDP checksum as 0 to save clocks, if the underlay is IPv4. If underlay is IPv6, then UDP checksum would be required and VPP would set it on VXLAN encap. Regards, John From: Zhang, Yuwei1 <yuwei1.zh...@intel.com<mailto:yuwei1.zh...@intel.com>> Sent: Saturday, October 20, 2018 9:58 AM To: John Lo (loj) <l...@cisco.com<mailto:l...@cisco.com>>; vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Cc: Yang, Zhiyong <zhiyong.y...@intel.com<mailto:zhiyong.y...@intel.com>> Subject: RE: [vpp-dev] one question IP checksum Thanks a lot for your detail reply, John. My scenario is vxlan over l3 network, which means after decapsulation, vpp will use ip header to execute the forward function. I use this command to create the tunnel: "vppctl create vxlan tunnel src 10.0.0.1 dst 10.0.0.2 vni 24 encap-vrf-id 0 decap-next node ethernet-input". I found that vpp will calculate the inner ip header checksum and verify it. So I wonder if it is possible to skip the inner ip header calculation because the outer udp checksum can cover the inner packet. Expecting your reply, thanks a lot. Regards, Yuwei From: John Lo (loj) [mailto:l...@cisco.com] Sent: Friday, October 19, 2018 11:04 PM To: Zhang, Yuwei1 <yuwei1.zh...@intel.com<mailto:yuwei1.zh...@intel.com>>; vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: RE: [vpp-dev] one question IP checksum The IP path after receiving a VXLAN packet is processing the outer IP header and not the inner one. The payload of VXLAN packet is expected to be an ethernet packet. After VXLAN decap, the payload ethernet packet will be processed in L2 forwarding path where no IP processing is involved. If you want to speed up VXLAN decap processing, there is a vxlan-bypass feature you can enable on the underlay interface which will look for VXLAN packet and bypass IP lookup to speed up processing: vpp# set interface ip vxlan-bypass ? set interface ip vxlan-bypass set interface ip vxlan-bypass <interface> [del] Enabling this feature on IP forwarding would add slight overhead for non-VXLAN IP packets but speed up VXLAN decap performance as IP lookup is not done. Regards, John From: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> <vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io>> On Behalf Of Zhang Yuwei Sent: Thursday, October 18, 2018 11:26 PM To: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: [vpp-dev] one question IP checksum Hi Guys and VPP maintainers, When I run VPP in vxlan scenario, I found that when VPP receive a vxlan packets, after decapsulation, the packet will go into ip-input node instead of ip-input-nochecksum which means vpp will re-calculate the checksum and verify it. I think the outer UDP checksum has already include the inner packet as payload, so can we skip the ip header checksum calculation for inner ip header? This part is done by software which will cause some CPU cycles consumption and I tried if skip the checksum calculation it will have a obvious performance gain. Can anybody give me some instructions? Thanks a lot for your kindly help. Regards, Yuwei
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#10906): https://lists.fd.io/g/vpp-dev/message/10906 Mute This Topic: https://lists.fd.io/mt/27412224/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-