From 51394b775b1902fcf62021c5f549c3a7955d8f36 Mon Sep 17 00:00:00 2001 From: Anthony Timmins Date: Thu, 27 May 2021 16:11:04 -0400 Subject: [PATCH] Use local and ip address to create vxlan interface Attempting to terminate a vxlan on the lo interface with multiple ip addresses fails. This seems to be because only the first ip address on the interface is used. If this address is invalid for vxlan creation (ie. 127.0.0.1), the vxlan interface will be created, but will not have a source ip address, and will therefore be non-functional. To remedy this issue, when L2population is used, we can set the local argument to the local_ip, thus ensuring the intended ip address is configured. Closes-Bug: 1929998 Change-Id: I9c54a268fc4ef9705637556ecba161bd6523a047 Signed-off-by: Anthony Timmins (cherry picked from commit 4cd11f4dee494c5851318410c523dfcfbce4c824) Signed-off-by: Anthony Timmins --- .../drivers/linuxbridge/agent/linuxbridge_neutron_agent.py | 4 ++++ .../linuxbridge/agent/test_linuxbridge_neutron_agent.py | 1 + 2 files changed, 5 insertions(+) diff --git a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py index 92a243e6b06..e05b404a9c9 100644 --- a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py +++ b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py @@ -346,8 +346,12 @@ class LinuxBridgeManager(amb.CommonAgentManagerBase): if self.vxlan_mode == lconst.VXLAN_MCAST: args['group'] = self.get_vxlan_group(segmentation_id) + if cfg.CONF.VXLAN.l2_population: args['proxy'] = cfg.CONF.VXLAN.arp_responder + # L2population should set the local ip address to handle + # a source dev with multiple ip addresses configured. + args['local'] = self.local_ip try: int_vxlan = self.ip.add_vxlan(interface, segmentation_id, diff --git a/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py b/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py index 4e6747014c9..9c330c41e3b 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py +++ b/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py @@ -412,6 +412,7 @@ class TestLinuxBridgeManager(base.BaseTestCase): dstport=None, ttl=None, dev=self.lbm.local_int, + local=self.lbm.local_ip, proxy=expected_proxy) def test_ensure_vxlan_arp_responder_enabled(self):