On Thu, May 27, 2021 at 11:36:02AM +0200, Pim van Pelt wrote:
> Hoi Nate,
>
> further to what Andrew suggested, there are a few more hints I can offer:
> ....
> Then you should be able to consume the IPv4 and IPv6 DFZ in your router. I
> tested extensively with FRR and Bird2, and so far had good success.
Pim, thank you for those hints - I plan to be implementing a new core
routing infrastructure using VPP & FRR w/ linux-cp & linux-nl that will be
consuming full tables in the near future. Your hints will be invaluable I
susect.
However, in my testing, I discovered an interesting behaviour with regards
to routing. I have previously tried to reply with my findings to the list,
but I wasn't subscribed at the time of Neale's posts, and I wanted to
continue on his thread ... I composed a detailed report on the web interface
of the list, then managed to completely miss the "CC list" checkbox. So I
think Neale got it himself only. (Sorry Neale).
I digress... what I discovered was that if a route entry is created before a
neighbor entry with the next hop is established, no traffic flows:
root@vpp-test:~# ip netns exec dataplane bash
root@vpp-test:~# systemctl restart vpp.service
root@vpp-test:~# vppctl set interface mtu 1500 GigabitEthernet0/13/0
root@vpp-test:~# vppctl lcp create GigabitEthernet0/13/0 host-if vpp1 netns
dataplane
root@vpp-test:~# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode
DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
root@vpp-test:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
15: vpp1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen
1000
link/ether 32:dc:fa:93:9e:fe brd ff:ff:ff:ff:ff:ff
root@vpp-test:~# cat init50.sh
#!/bin/sh
ip link set up dev vpp1
ip link add link vpp1 vpp1.50 type vlan id 50
ip link set up dev vpp1.50
ip addr add 10.xxx.yyy.202/24 dev vpp1.50
root@vpp-test:~# ./init50.sh
root@vpp-test:~# ping 1.1.1.1
ping: connect: Network is unreachable
root@vpp-test:~# ip route add default via 10.xxx.yyy.254
root@vpp-test:~# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
^C
--- 1.1.1.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4077ms
root@vpp-test:~# ping 10.xxx.yyy.254
PING 10.xxx.yyy.254 (10.xxx.yyy.254) 56(84) bytes of data.
^C
--- 10.xxx.yyy.254 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3070ms
root@vpp-test:~# ip route delete default
root@vpp-test:~# ping 10.xxx.yyy.254
PING 10.xxx.yyy.254 (10.xxx.yyy.254) 56(84) bytes of data.
^C
--- 10.xxx.yyy.254 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms
No traffic passed... ping router before adding route:
root@vpp-test:~# systemctl restart vpp.service
root@vpp-test:~# ./init50.sh
root@vpp-test:~# ping 10.xxx.yyy.254
PING 10.xxx.yyy.254 (10.xxx.yyy.254) 56(84) bytes of data.
64 bytes from 10.xxx.yyy.254: icmp_seq=1 ttl=64 time=0.780 ms
64 bytes from 10.xxx.yyy.254: icmp_seq=2 ttl=64 time=0.306 ms
64 bytes from 10.xxx.yyy.254: icmp_seq=3 ttl=64 time=0.310 ms
^C
--- 10.xxx.yyy.254 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2038ms
rtt min/avg/max/mdev = 0.306/0.465/0.780/0.222 ms
root@vpp-test:~# ip route add default via 10.xxx.yyy.254
root@vpp-test:~# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=60 time=23.5 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=60 time=23.9 ms
^C
--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 23.541/23.710/23.879/0.169 ms
root@vpp-test:~#
Traffic passes fine.
This is a basic VPP installation built with
https://gerrit.fd.io/r/c/vpp/+/31122 rebased onto master of a couple weeks
ago (fd77f8c00). Ping plugin disabled, linux-cp and linux-nl enabled, with
linux-cp config of:
linux-cp {
default netns dataplane
interface-auto-create
}
Normally, this behaviour wouldn't be an issue, as a neighbor relationship
with the nexthop will be created with the BGP converstion that would cause
routes to be created that use that nexthop - however, that's not the case
with Route Reflectors that I plan on implementing. OSPF will be used in the
implementation which might mitigate the problem - I hadn't gotten that far
in testing. However, I figured that if this is a real bug, then it's worth
fixing.
There were a couple of other feedback items for the linux-nl plugin that I'd
written to Neale in the web form for the list, but I can only recall one of
them - the default netns has to be specified in the config file, you can't
use the command:
# vppctl lcp default netns dataplane
As the netlink listener doesn't appear to be re-created in that netns
dynamically.
Of course, I'm new to VPP as well, so if I'm doing something stupid, please
let me know!
Mike.
--
Mike Beattie <[email protected]>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#19492): https://lists.fd.io/g/vpp-dev/message/19492
Mute This Topic: https://lists.fd.io/mt/83138237/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-