Hi, Below is the trace output for "unknown ip protocol" related drops for the ESP pkts coming from the strongswan to VPP. Let me know If I need to add some ip4-punt related config.
show trace o/p =============== 00:08:29:451365: dpdk-input VirtualFuncEthernet0/7/0 rx queue 0 buffer 0x4c2d69: current data 0, length 170, buffer-pool 0, ref-count 1, totlen-nifb 0, trace handle 0x1000001 ext-hdr-valid l4-cksum-computed l4-cksum-correct PKT MBUF: port 0, nb_segs 1, pkt_len 170 buf_len 2176, data_len 170, ol_flags 0x180, data_off 128, phys_addr 0x4ecb5ac0 packet_type 0x691 l2_len 0 l3_len 0 outer_l2_len 0 outer_l3_len 0 rss 0x0 fdir.hi 0x0 fdir.lo 0x0 Packet Offload Flags PKT_RX_IP_CKSUM_GOOD (0x0080) IP cksum of RX pkt. is valid PKT_RX_L4_CKSUM_GOOD (0x0100) L4 cksum of RX pkt. is valid Packet Types RTE_PTYPE_L2_ETHER (0x0001) Ethernet packet RTE_PTYPE_L3_IPV4_EXT_UNKNOWN (0x0090) IPv4 packet with or without extension headers RTE_PTYPE_L4_NONFRAG (0x0600) Non-fragmented IP packet IP4: fa:16:3e:4b:6b:42 -> fa:16:3e:c2:b4:f4 802.1q vlan 1556 IPSEC_ESP: 20.20.99.215 -> 20.20.99.99 tos 0x00, ttl 64, length 152, checksum 0xbe54 dscp CS0 ecn NON_ECN fragment id 0x8c7d, flags DONT_FRAGMENT 00:08:29:451372: ethernet-input frame: flags 0x3, hw-if-index 3, sw-if-index 3 IP4: fa:16:3e:4b:6b:42 -> fa:16:3e:c2:b4:f4 802.1q vlan 1556 00:08:29:451377: ip4-input IPSEC_ESP: 20.20.99.215 -> 20.20.99.99 tos 0x00, ttl 64, length 152, checksum 0xbe54 dscp CS0 ecn NON_ECN fragment id 0x8c7d, flags DONT_FRAGMENT 00:08:29:451380: ip4-lookup fib 1 dpo-idx 27 flow hash: 0x00000000 IPSEC_ESP: 20.20.99.215 -> 20.20.99.99 tos 0x00, ttl 64, length 152, checksum 0xbe54 dscp CS0 ecn NON_ECN fragment id 0x8c7d, flags DONT_FRAGMENT 00:08:29:451382: ip4-local IPSEC_ESP: 20.20.99.215 -> 20.20.99.99 tos 0x00, ttl 64, length 152, checksum 0xbe54 dscp CS0 ecn NON_ECN fragment id 0x8c7d, flags DONT_FRAGMENT 00:08:29:451383: ip4-punt IPSEC_ESP: 20.20.99.215 -> 20.20.99.99 tos 0x00, ttl 64, length 152, checksum 0xbe54 dscp CS0 ecn NON_ECN fragment id 0x8c7d, flags DONT_FRAGMENT 00:08:29:451384: error-punt rx:VirtualFuncEthernet0/7/0.1556 00:08:29:451386: punt * ip4-local: unknown ip protocol* On Mon, Mar 8, 2021 at 2:00 AM Vijay Kumar via lists.fd.io <vjkumar2003= gmail....@lists.fd.io> wrote: > Hi, > > Strongswan <======================> [VPP IPSec] + [Azure IKE stack] > > I have a use case like above. Strongswan is the peer while VPP is the > responder. On the right hand side, I am not showing VPP ikev2 plugin > because we have disabled the plugin but rather using the Microsoft Azure > ike stack. In our case the ike stack and vpp run on different pods. We have > written a new plugin for IKE pkt forwarding to the pod where IKE stack is > running. The new plugin registers for udp port 500 and 4500 and thus fwds > all the received IKE traffic to IKE stack (to be precise, the new VPP > plugin forwards IKE packets to the application process via memif. The > application process in turn uses REST API to forward the IKE pkts to the > pods that runs the IKE stack). Once SA is established, the IKE stack would > install the SA on to the VPP IPSec plugin using VPP APIs (we would use > the vl_api_rpc_call_main_thread function call to execute the REST API SA > information). > > The *IPSec SA is established fine* as displayed below but ping to the > host on the strongswan side is failing as "*blackholed packets*" > > CLIs logs > ================ > vpp# show ipsec sa > [0] sa 256349522 (0xf479552) spi 3475331116 (0xcf25582c) protocol:esp > flags:[anti-replay ] > [1] sa 256349523 (0xf479553) spi 305419899 (0x1234567b) protocol:esp > flags:[anti-replay inbound ] > vpp# > > NOTE > ============= > 20.200.75.1 is the host on the strongswan side, > while VirtualFuncEthernet0/7/0.1556 is the interface that is connected to > the Strongswan (this interface is pingable with the SS interface) > > vpp# show interface > Name Idx State MTU (L3/IP4/IP6/MPLS) Counter > Count > VirtualFuncEthernet0/7/0 3 up 1500/0/0/0 rx > packets 12 > rx > bytes 2432 > tx > packets 12 > tx > bytes 2408 > drops > 8 > VirtualFuncEthernet0/7/0.1556 14 up 1500/0/0/0 rx > packets 30 > rx > bytes 647112 > tx > packets 12 > tx > bytes 2408 > drops > 8 > ip4 > 8 > VirtualFuncEthernet0/9/0 4 down 9000/0/0/0 > ipip0 18 down 9000/0/0/0 > local0 0 down 0/0/0/0 > > > vpp# set interface ip address ipip0 20.200.76.2/32 > vpp# set interface state ipip0 up > vpp# ip route add 20.200.75.1/32 via ipip0 > vpp# set interface unnumbered ipip0 use VirtualFuncEthernet0/7/0.1556 > > vpp# show interface > Name Idx State MTU (L3/IP4/IP6/MPLS) > Counter Count > VirtualFuncEthernet0/7/0 3 up 1500/0/0/0 rx > packets 14 > rx > bytes 2618 > tx > packets 14 > tx > bytes 2594 > drops > 9 > VirtualFuncEthernet0/7/0.1556 14 up 1500/0/0/0 rx > packets 34 > rx > bytes 711766 > tx > packets 14 > tx > bytes 2594 > drops > 9 > ip4 > 9 > VirtualFuncEthernet0/9/0 4 down 9000/0/0/0 > ipip0 18 up 9000/0/0/0 > local0 0 down 0/0/0/0 > > > *ISSUE* > *=========* > All the ping traffic from SS are coming to VPP as ESP packets but the VPP > is dropping them as "*unknown ip protocol*". Also, for all the ping > packets triggered from VPP side are not being put onto the ipip0 IPSec > tunnel but they are dropped as "*blackholed packets*" > > *NOTE: -* > *==============* > On the VPP, after adding a route to the destination 20.200.75.1, the show > ip FIB output shows dpo-drop rather than send via > "VirtualFuncEthernet0/7/0.1556" as shown below. > > > *vpp# show if fib* > > > > > > *20.200.75.1/32 <http://20.200.75.1/32> unicast-ip4-chain [@0]: > dpo-load-balance: [proto:ip4 index:81 buckets:1 uRPF:109 to:[0:0]] [0] > [@6]: ipv4 via 0.0.0.0 ipip0: mtu:9000 next:16 > 450000000000000040048b9814146363141463d7 stacked-on entry:78: > [@1]: dpo-drop ip4* > > > vpp# show node counters > Count Node Reason > * 10 null-node blackholed packets* > 81 memif-input not ip packet > 2731 an_ppe_wfectrl wfectrl packets received > 2731 an_ppe_wfectrl wfectrl replies sent > 2181 an_ppe_wfectrl session stat request > received > 1 an_ppe_wfectrl service construct config > request received > 1 an_ppe_wfectrl service construct config > request success > 1 an_ppe_wfectrl service config request > received > 1 an_ppe_wfectrl service config request > success > 453 an_ppe_wfectrl dpi stats request > received > 453 an_ppe_wfectrl dpi stats request success > 19 an_ppe_wfectrl nat stats request > received > 19 an_ppe_wfectrl nat stats request success > 58 arp-reply ARP replies sent > 81 ip4-udp-lookup No error > * 14 ip4-local unknown ip protocol* > vpp# > vpp# > > > *NOTE* > *=============* > When I did a POC using VPP ikev2 plugin and VPP IPSec, I did not face this > issue. The ping traffic from SS would be successfully decrypted at VPP and > also the reply sent back to SS. In the POC, the route entry of the > destination was fine. It was not dpo-drop. > > > Please suggest if there is any way to debug the traffic drops as "Unknown > ip protocol" for incoming ESP traffic and traffic drops as "blackholed > packets" for outgoing traffic > > Any help is highly appreciated. > > > Regards, > Vijay Kumar N > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#18880): https://lists.fd.io/g/vpp-dev/message/18880 Mute This Topic: https://lists.fd.io/mt/81158278/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-