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

BUG: srv6 ad failed to create ip neighbor #1880

Open
scottlx opened this issue Oct 18, 2022 · 1 comment
Open

BUG: srv6 ad failed to create ip neighbor #1880

scottlx opened this issue Oct 18, 2022 · 1 comment
Labels

Comments

@scottlx
Copy link

scottlx commented Oct 18, 2022

Test case

restful config

{
  "vppConfig": {
    "routes": [
      {
        "dst_network": "fc01::1a/128",
        "next_hop_addr": "fdab::10",
        "weight": 1
      },
      {
        "dst_network": "fc03::1a/128",
        "next_hop_addr": "fdab::30",
        "weight": 1
      },
      {
        "dst_network": "192.168.1.0/24",
        "outgoing_interface": "GigabitEthernet0/5/0",
        "weight": 1
      },
      {
        "dst_network": "192.168.3.0/24",
        "outgoing_interface": "GigabitEthernet0/6/0",
        "weight": 1
      }
    ],
    "interfaces": [
      {
        "name": "GigabitEthernet0/5/0",
        "type": "DPDK",
        "enabled": true,
        "ipAddresses": [
          "192.168.100.100/24"
        ]
      },
      {
        "name": "GigabitEthernet0/6/0",
        "type": "DPDK",
        "enabled": true,
        "ipAddresses": [
          "192.168.101.100/24"
        ]
      },
      {
        "name": "GigabitEthernet0/f/0",
        "type": "DPDK",
        "enabled": true,
        "ipAddresses": [
          "fdab::20/64"
        ]
      },
      {
        "name": "loop0",
        "type": "SOFTWARE_LOOPBACK",
        "enabled": true,
        "ipAddresses": [
          "fc02::1/64"
        ]
      }
    ],
    "srv6_localsids": [
      {
        "sid": "fc02::1a",
        "installation_vrf_id": 0,
        "end_function_ad": {
          "outgoing_interface": "GigabitEthernet0/5/0",
          "incoming_interface": "GigabitEthernet0/5/0",
          "l3_service_address": "192.168.100.227"
        }
      },
      {
        "sid": "fc02::2a",
        "installation_vrf_id": 0,
        "end_function_ad": {
          "outgoing_interface": "GigabitEthernet0/6/0",
          "incoming_interface": "GigabitEthernet0/6/0",
          "l3_service_address": "192.168.101.162"
        }
      }
    ]
  }
}

vpp

vpp# show sr localsids 
SRv6 - My LocalSID Table:
=========================
	Address: 	fc02::1a/128
	Behavior: 	End.AD (Endpoint with dynamic proxy to SR-unaware appliance)
	Next-hop:	192.168.100.227
	Outgoing iface:	GigabitEthernet0/5/0
	Incoming iface:	GigabitEthernet0/5/0
	Good rewrite traffic: 	[0 packets : 0 bytes]
	Bad rewrite traffic:  	[0 packets : 0 bytes]
	Good traffic: 	[0 packets : 0 bytes]
	Bad traffic:  	[0 packets : 0 bytes]
--------------------
	Address: 	fc02::2a/128
	Behavior: 	End.AD (Endpoint with dynamic proxy to SR-unaware appliance)
	Next-hop:	192.168.101.162
	Outgoing iface:	GigabitEthernet0/6/0
	Incoming iface:	GigabitEthernet0/6/0
	Good rewrite traffic: 	[0 packets : 0 bytes]
	Bad rewrite traffic:  	[0 packets : 0 bytes]
	Good traffic: 	[0 packets : 0 bytes]
	Bad traffic:  	[0 packets : 0 bytes]
--------------------
vpp# show ip neighbors
    Time                       IP                    Flags      Ethernet              Interface       
      4.8595                fdab::30                   D    fa:93:ec:db:33:02 GigabitEthernet0/f/0
      4.8592                fdab::10                   D    fa:b4:8e:3b:e5:02 GigabitEthernet0/f/0

vpp failed to create nh address in adjacency table! !

Reason

Key: interfaces.InterfaceKey(ef.EndFunctionAd.OutgoingInterface),

The dependency is InterfaceKey rather than InterfaceAddressKey, which cause ad localsid cli running before the interface has ip address.

time="2022-10-18 16:07:21.43811" level=debug msg="Adding/deleting Local SIDfc02::1a" delete=false end function="AD{L3ServiceAddress: 192.168.100.227, OutgoingInterface: Gi
gabitEthernet0/5/0, IncomingInterface: GigabitEthernet0/5/0}" installationVrfID=0 localSID="fc02::1a" logger=vpp-srplugin
time="2022-10-18 16:07:21.43897" level=debug msg="Interface 1 set to VRF 0" logger=vpp-ifplugin
Running Linux cmd:ps ux | awk '/\/usr\/bin\/vpp/ && !/awk/ {print $2}'
time="2022-10-18 16:07:21.44964" level=info msg="send cli ready signal(USR1) to vpp, pid: 23913" logger=vpp-ifplugin.if-descriptor
time="2022-10-18 16:07:21.44970" level=debug msg="publish add to ifplugin_ifstate{{GigabitEthernet0/6/0 false false vpp-interface-index} 0xc000423540}" logger=vpp-ifplugin
.if-descriptor
time="2022-10-18 16:07:21.44980" level=debug msg="Adding/deleting Local SIDfc02::2a" delete=false end function="AD{L3ServiceAddress: 192.168.101.162, OutgoingInterface: Gi
gabitEthernet0/6/0, IncomingInterface: GigabitEthernet0/6/0}" installationVrfID=0 localSID="fc02::2a" logger=vpp-srplugin
time="2022-10-18 16:07:21.45072" level=debug msg="Interface 2 set to VRF 0" logger=vpp-ifplugin
Running Linux cmd:ps ux | awk '/\/usr\/bin\/vpp/ && !/awk/ {print $2}'
time="2022-10-18 16:07:21.46198" level=info msg="send cli ready signal(USR1) to vpp, pid: 23913" logger=vpp-ifplugin.if-descriptor
time="2022-10-18 16:07:21.46206" level=debug msg="publish add to ifplugin_ifstate{{GigabitEthernet0/f/0 false false vpp-interface-index} 0xc000b58190}" logger=vpp-ifplugin
.if-descriptor
time="2022-10-18 16:07:21.46251" level=debug msg="Interface 3 set to VRF 0" logger=vpp-ifplugin
Running Linux cmd:ps ux | awk '/\/usr\/bin\/vpp/ && !/awk/ {print $2}'
time="2022-10-18 16:07:21.47733" level=info msg="send cli ready signal(USR1) to vpp, pid: 23913" logger=vpp-ifplugin.if-descriptor
time="2022-10-18 16:07:21.47739" level=debug msg="publish add to ifplugin_ifstate{{loop0 false false vpp-interface-index} 0xc000ca43c0}" logger=vpp-ifplugin.if-descriptor
time="2022-10-18 16:07:21.47771" level=debug msg="Interface 5 set to VRF 0" logger=vpp-ifplugin
o----------------------------------------------------------------------------------------------------------------------o
  * executed operations (2022-10-18 16:07:21.414 +0800 CST -> 2022-10-18 16:07:21.48 +0800 CST, dur: 66ms):
      1. CREATE:
          - key: config/vpp/v2/interfaces/GigabitEthernet0/5/0
          - value: { name:"GigabitEthernet0/5/0" type:DPDK enabled:true ip_addresses:"192.168.100.100/24" }
      2. CREATE:
          - key: config/vpp/srv6/v2/localsid/fc02::1a
          - value: { sid:"fc02::1a" end_function_ad:{outgoing_interface:"GigabitEthernet0/5/0" incoming_interface:"GigabitEthernet0/5/0" l3_service_address:"192.168.100.22
7"} }
      3. CREATE [DERIVED]:
          - key: vpp/interface/GigabitEthernet0/5/0/vrf/0/ip-version/v4
          - value: <EMPTY>
      4. CREATE [DERIVED]:
          - key: vpp/interface/GigabitEthernet0/5/0/address/static/192.168.100.100/24
          - value: <EMPTY>
      5. CREATE [DERIVED]:
          - key: vpp/interface/GigabitEthernet0/5/0/has-IP-address
          - value: <EMPTY>

vpp add xconnect adjacency on the first step
https://github.com/FDio/vpp/blob/f284c14c7bd8731367ba3527cdfffa610a8c6de4/src/plugins/srv6-ad/ad.c#L57

@Giluerre
Copy link
Contributor

Hi, I'd like to solve your problem but I can't completely reproduce the scenario and I'm not fully versed in Srv6.
Can you try PR below, please?
#1933

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

No branches or pull requests

3 participants