Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VPP-455] arp doesn't work when ip4 classifier configured with fib 2.0 #1807

Closed
vvalderrv opened this issue Jan 31, 2025 · 0 comments
Closed

Comments

@vvalderrv
Copy link
Contributor

Description

Configuring ip4 classifier adds table entry to fib for interface. Vpp then fails to reply to incoming ARP.

It used to work with old version. Not sure whether its bug or I need to configure something differently.

DBGvpp# classify table mask l3 ip4 src

DBGvpp# sh classify tables

TableIdx Sessions NextTbl NextNode

     0         0        -1        -1

Heap: 1 objects, 64 of 2k used, 48 free, 0 reclaimed, 1k overhead, 2044k capacity

nbuckets 2, skip 1 match 1

mask 00000000000000000000ffffffff0000

DBGvpp# classify session hit-next node li-hit-ip4 table-index 0 match l3 ip4 src 192.168.1.14

DBGvpp# sh classify tables

TableIdx Sessions NextTbl NextNode

     0         1        -1        -1

Heap: 3 objects, 176 of 2k used, 72 free, 0 reclaimed, 1k overhead, 2044k capacity

nbuckets 2, skip 1 match 1

mask 00000000000000000000ffffffff0000

DBGvpp# set ip classify intfc GigabitEthernet0/10/0 table-index 0

DBGvpp# set interface ip address GigabitEthernet0/10/0 192.168.1.13/24

DBGvpp# set interface state GigabitEthernet0/10/0 up

DBGvpp# set interface ip address GigabitEthernet0/11/0 192.168.2.13/24

DBGvpp# set interface state GigabitEthernet0/11/0 up

DBGvpp# show interface address

GigabitEthernet0/10/0 (up):

192.168.1.13/24

GigabitEthernet0/11/0 (up):

192.168.2.13/24

GigabitEthernet0/9/0 (dn):

GigabitEthernet0/a/0 (dn):

local0 (dn):

DBGvpp# sh ip fib

ipv4-VRF:0, fib_index 0, flow hash: src dst sport dport proto

0.0.0.0/0

unicast-ip4-chain

[@0]: dpo-load-balance: [index:0 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@0]</span>: dpo-drop

0.0.0.0/32

unicast-ip4-chain

[@0]: dpo-load-balance: [index:1 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@0]</span>: dpo-drop

192.168.1.0/24

unicast-ip4-chain

[@0]: dpo-load-balance: [index:12 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@4]</span>:  glean: GigabitEthernet0/10/0

192.168.1.13/32

unicast-ip4-chain

[@0]: dpo-load-balance: [index:13 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@11]</span>: **classify:<span class="error">[0]</span>:table:0**

192.168.2.0/24

unicast-ip4-chain

[@0]: dpo-load-balance: [index:14 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@4]</span>:  glean: GigabitEthernet0/11/0

192.168.2.13/32

unicast-ip4-chain

[@0]: dpo-load-balance: [index:15 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@2]</span>: dpo-receive: 192.168.2.13 on GigabitEthernet0/11/0

224.0.0.0/8

unicast-ip4-chain

[@0]: dpo-load-balance: [index:3 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@0]</span>: dpo-drop

240.0.0.0/8

unicast-ip4-chain

[@0]: dpo-load-balance: [index:2 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@0]</span>: dpo-drop

255.255.255.255/32

unicast-ip4-chain

[@0]: dpo-load-balance: [index:4 buckets:1 locks:1 to:[0:0]]

<span class="error">[0]</span> <span class="error">[@0]</span>: dpo-drop

DBGvpp# trace add dpdk-input 1000

DBGvpp# sh trace

------------------- Start of thread 0 vpp_main -------------------

No packets in trace buffer

ping 192.168.1.13 (from other device with local ip 192.168.1.14)

Packet 1/3

00:00:14:141068: dpdk-input

GigabitEthernet0/10/0 rx queue 0

buffer 0x4e03: current data 0, length 60, free-list 0, totlen-nifb 0, trace 0x0

PKT MBUF: port 2, nb_segs 1, pkt_len 60

buf_len 2176, data_len 60, ol_flags 0x0, data_off 128, phys_addr 0x10e38100

packet_type 0x0

ARP: 08:00:27:f9:c7:19 -> ff:ff:ff:ff:ff:ff

request, type ethernet/IP4, address size 6/4

08:00:27:f9:c7:19/192.168.1.14 -> 00:00:00:00:00:00/192.168.1.13

00:00:14:141132: ethernet-input

ARP: 08:00:27:f9:c7:19 -> ff:ff:ff:ff:ff:ff

00:00:14:141169: arp-input

request, type ethernet/IP4, address size 6/4

08:00:27:f9:c7:19/192.168.1.14 -> 00:00:00:00:00:00/192.168.1.13

00:00:14:141391:* error-drop

arp-input: IP4 destination address not local to subnet*

code in vnet/vnet/Ethernet/arp.c:916

fib_index0 = ip4_fib_table_get_index_for_sw_if_index (sw_if_index0);

     if (~0 == fib_index0)</p>
       {
         error0 = ETHERNET_ARP_ERROR_interface_no_table;
         goto drop2;

       }

dst_fei = ip4_fib_table_lookup (ip4_fib_get (fib_index0),

                               &arp0->ip4_over_ethernet<span class="error">[1]</span>.ip4,

                               32);

     dst_flags = fib_entry_get_flags (dst_fei);</p>

     conn_sw_if_index0 = fib_entry_get_resolving_interface (dst_fei);

clib_warning(">> ip %U, flags: %x, fib_node_idx %u (%U), out-if %u",

             format_ip4_address, &arp0->ip4_over_ethernet<span class="error">[1]</span>.ip4,

             dst_flags,

             dst_fei, format_fib_entry, dst_fei, FIB_ENTRY_FORMAT_DETAIL,

             conn_sw_if_index0);</font></p>

     if (!(FIB_ENTRY_FLAG_CONNECTED & dst_flags))

       {
         *error0 = ETHERNET_ARP_ERROR_l3_dst_address_not_local*;
         goto drop1;
       }

Dumps this:

Sep 30 08:34:34 dut1 vnet[24925]: arp_input:934: >> **ip 192.168.1.13, flags: 0**, fib_node_idx 12 (192.168.1.13/32 fib:0 index:12 locks:3#012 src:classify refs:1 #12 index:12

locks:2 proto:ipv4 index:12 pl-index:12 ipv4 weight=1 exclusive: oper-flags:resolved,#12 [@0]: classify:[0]:table:0#012#012 src:interface cover:-1 refs:1 flags:co

nnected,local,#12 index:13 locks:1 proto:ipv4 index:13 pl-index:13 ipv4 weight=1 attached-nexthop: oper-flags:resolved,#12 192.168.1.13 GigabitEthernet0/10/0#01

2 [@0]: arp-ipv4: via 192.168.1.13 GigabitEthernet0/10/0#012#012 forwarding: unicast-ip4-chain#012 [@0]: dpo-load-balance: [index:13 buckets:1 locks:1 to:[0:0]]#12

[0] [@11]: classify:[0]:table:0#012), out-if 4294967295

Assignee

Neale Ranns

Reporter

marek zavodsky

Comments

No comments.

Original issue: https://jira.fd.io/browse/VPP-455

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant