Page MenuHomeVyOS Platform

Setting 'source-address' or `source-interface` on existing vxlan interface doesn't work
Closed, ResolvedPublicBUG

Description

Steps to reproduce:

  • Add a vxlan interface without source-address or source-interface options set:
set interfaces vxlan vxlan999 vni 999
set interfaces vxlan vxlan999 remote 192.168.100.100
commit
  • Then set source-address or source-interface:
set interfaces vxlan vxlan999 source-interface eth0
commit

Actual result:

Source address or source-interface are not set:

ip -d link show dev vxlan999
76: vxlan999: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
      link/ether 56:08:ba:4d:4e:a8 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535
      vxlan id 999 remote 192.168.100.100 srcport 0 0 dstport 8472 tos inherit ttl 16 ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addr
genmode none numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

Expected result:

77: vxlan999: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
       link/ether 9e:05:d9:58:1a:af brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535
       vxlan id 999 remote 192.168.100.100 dev eth0 srcport 0 0 dstport 8472 tos inherit ttl 16 ageing 300 udpcsum noudp6zerocsumtx noudp6zerocs
umrx addrgenmode none numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

Analysis

  • Fix **

A simple fix could be updating https://github.com/vyos/vyos-1x/blob/319102b7f9ea384127b685de7cfbef2a6ade52df/src/conf_mode/interfaces-vxlan.py#L57 to explicitly check if the return value is None:

-        if leaf_node_changed(conf, base + [ifname, cli_option]):
+        if leaf_node_changed(conf, base + [ifname, cli_option]) is not None:

Note
leaf_node_changed appears to be a function that returns a boolean but it is not. I saw leaf_node_changed is called elsewhere in vyos-1x without explicitly checking if the return value is None. This seems to be error-prone. I would like to recommend the community to review all usages of leaf_node_changed and maybe deprecate leaf_node_changed in the future to prevent this issue from happening again.

Details

Difficulty level
Easy (less than an hour)
Version
1.4
Why the issue appeared?
Will be filled on close
Is it a breaking change?
Perfectly compatible
Issue type
Bug (incorrect behavior)