Hi all,

we are using VPP with several FIB tables and when we use 'next-hop-table' the 
ip4-lookup results somehow in 'unknown ip protocol'. Can you please help?

Our setup:

  *   1 (out of 2) with VPP and a DPDK interface

The VPP version is (both nodes):

vpp# show version verbose
Version:                  v21.06-rc2~6-gf377e9545
Compiled by:              suse
Compile host:             SUSE
Compile date:             2021-06-24T14:02:01
Compile location:         /root/vpp-32298/vpp
Compiler:                 GCC 7.5.0
Current PID:              22527

The VPP config uses the DPDK interface (both nodes):

vpp# show hardware-interfaces NCIC-1-v1
              Name                Idx   Link  Hardware
NCIC-1-v1                          3     up   NCIC-1-v1
  Link speed: 40 Gbps
  RX Queues:
    queue thread         mode
    0     vpp_wk_0 (1)   polling
  Ethernet address 72:a6:1e:ae:cd:f1
  Intel iAVF
    carrier up full duplex mtu 9206
    flags: admin-up pmd maybe-multiseg subif tx-offload intel-phdr-cksum 
rx-ip4-cksum int-unmaskable
    Devargs:
    rx: queues 1 (max 256), desc 1024 (min 64 max 4096 align 32)
    tx: queues 3 (max 256), desc 1024 (min 64 max 4096 align 32)
    pci: device 8086:154c subsystem 1028:0000 address 0000:17:0e.01 numa 0
    max rx packet len: 9728
    promiscuous: unicast off all-multicast on
    vlan offload: strip off filter off qinq off
    rx offload avail:  vlan-strip ipv4-cksum udp-cksum tcp-cksum qinq-strip
                       outer-ipv4-cksum vlan-filter jumbo-frame scatter rss-hash
    rx offload active: ipv4-cksum jumbo-frame scatter
    tx offload avail:  vlan-insert ipv4-cksum udp-cksum tcp-cksum sctp-cksum
                       tcp-tso outer-ipv4-cksum qinq-insert vxlan-tnl-tso
                       gre-tnl-tso ipip-tnl-tso geneve-tnl-tso multi-segs
                       mbuf-fast-free
    tx offload active: udp-cksum tcp-cksum multi-segs
    rss avail:         ipv4-frag ipv4-tcp ipv4-udp ipv4-sctp ipv4-other ipv4
                       ipv6-frag ipv6-tcp ipv6-udp ipv6-sctp ipv6-other ipv6
    rss active:        none
    tx burst function: iavf_xmit_pkts
    rx burst function: iavf_recv_scattered_pkts_vec_avx2

The VPP config is (there is a veth-pair configured on the host):

create host-interface name Vpp2Host
set interface state host-Vpp2Host up

ip table add 4093
create sub-interfaces host-Vpp2Host 4093
set interface state host-Vpp2Host.4093 up
set interface ip table host-Vpp2Host.4093 4093
set interface ip address host-Vpp2Host.4093 198.19.255.249/29

set interface state NCIC-1-v1 up
ip table add 1
create sub-interfaces NCIC-1-v1 1
set interface state NCIC-1-v1.1 up
set interface ip table NCIC-1-v1.1 1
set interface ip address NCIC-1-v1.1 10.10.203.3/29
ip route add 198.19.255.248/29 table 1 via 198.19.255.249 next-hop-table 4093

When a packet is received (curl -k -vv https://198.19.255.253:8443/... ) we see 
the following trace on dpdk-input:
  NCIC-1-v1 rx queue 0
  buffer 0x14296: current data 0, length 78, buffer-pool 0, ref-count 1, 
totlen-nifb 0, trace handle 0x1000016
                  ext-hdr-valid
                  l4-cksum-computed l4-cksum-correct
  PKT MBUF: port 2, nb_segs 1, pkt_len 78
    buf_len 2176, data_len 78, ol_flags 0x180, data_off 128, phys_addr 0x50a600
    packet_type 0x191 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_TCP (0x0100) TCP packet
  IP4: 86:ca:f3:a1:20:fc -> 1e:a0:ab:00:2a:ea 802.1q vlan 1
  TCP: 172.17.41.8 -> 198.19.255.253
    tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
    fragment id 0x23ce, flags DONT_FRAGMENT
  TCP: 41834 -> 8443
    seq. 0xbd8844b4 ack 0x00000000
    flags 0x02 SYN, tcp header: 40 bytes
    window 29200, checksum 0xa704
18:41:55:850222: ethernet-input
  frame: flags 0x3, hw-if-index 3, sw-if-index 3
  IP4: 86:ca:f3:a1:20:fc -> 1e:a0:ab:00:2a:ea 802.1q vlan 1
18:41:55:850224: ip4-input
  TCP: 172.17.41.8 -> 198.19.255.253
    tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
    fragment id 0x23ce, flags DONT_FRAGMENT
  TCP: 41834 -> 8443
    seq. 0xbd8844b4 ack 0x00000000
    flags 0x02 SYN, tcp header: 40 bytes
    window 29200, checksum 0xa704
18:41:55:850225: ip4-lookup
  fib 4 dpo-idx 57 flow hash: 0x00000000
  TCP: 172.17.41.8 -> 198.19.255.253
    tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
    fragment id 0x23ce, flags DONT_FRAGMENT
  TCP: 41834 -> 8443
    seq. 0xbd8844b4 ack 0x00000000
    flags 0x02 SYN, tcp header: 40 bytes
    window 29200, checksum 0xa704
18:41:55:850226: ip4-load-balance
  fib 4 dpo-idx 18 flow hash: 0x00000000
  TCP: 172.17.41.8 -> 198.19.255.253
    tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
    fragment id 0x23ce, flags DONT_FRAGMENT
  TCP: 41834 -> 8443
    seq. 0xbd8844b4 ack 0x00000000
    flags 0x02 SYN, tcp header: 40 bytes
    window 29200, checksum 0xa704
18:41:55:850228: ip4-local
    TCP: 172.17.41.8 -> 198.19.255.253
      tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
      fragment id 0x23ce, flags DONT_FRAGMENT
    TCP: 41834 -> 8443
      seq. 0xbd8844b4 ack 0x00000000
      flags 0x02 SYN, tcp header: 40 bytes
      window 29200, checksum 0xa704
18:41:55:850230: ip4-punt
    TCP: 172.17.41.8 -> 198.19.255.253
      tos 0x00, ttl 64, length 60, checksum 0x7bc3 dscp CS0 ecn NON_ECN
      fragment id 0x23ce, flags DONT_FRAGMENT
    TCP: 41834 -> 8443
      seq. 0xbd8844b4 ack 0x00000000
      flags 0x02 SYN, tcp header: 40 bytes
      window 29200, checksum 0xa704
18:41:55:850231: error-punt
  rx:NCIC-1-v1.1
18:41:55:850232: punt
  ip4-local: unknown ip protocol

And the following is the relevant part in the FIB table:
vpp# show ip fib table 1
ipv4-VRF:1, fib_index:4, flow hash:[src dst sport dport proto ] epoch:0 
flags:none locks:[API:1, CLI:2, adjacency:1, recursive-resolution:1, ]
:
198.19.255.248/29
  unicast-ip4-chain
  [@0]: dpo-load-balance: [proto:ip4 index:67 buckets:1 uRPF:75 
to:[1447:116264]]
    [0] [@11]: dpo-load-balance: [proto:ip4 index:57 buckets:1 uRPF:65 
to:[6:576] via:[1447:116264]]
          [0] [@2]: dpo-receive: 198.19.255.249 on host-Vpp2Host.4093

The uRPF seems to be empty:
vpp# show fib uRPF
65@uPRF-list:65 len:0 itfs:[]

A ping was working fine but the curl command failed. Is there some additional 
configuration needed to allow ports via 'next-hop-table' or is this a bug in 
VPP?

Any hint on how to solve this is appreciated.

Thank you and best regards,

Mechthild Buescher

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#19660): https://lists.fd.io/g/vpp-dev/message/19660
Mute This Topic: https://lists.fd.io/mt/83895986/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to