]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commit
Configure IPv6 LLADDR only on master L3 HA instance
authorAssaf Muller <amuller@redhat.com>
Thu, 18 Dec 2014 14:25:54 +0000 (16:25 +0200)
committerAssaf Muller <amuller@redhat.com>
Fri, 23 Jan 2015 16:36:32 +0000 (11:36 -0500)
commitc9698ca0f7a6ae5e55b8b95f900e859581046c6b
tree5bf7b6d0d11645c4e10b0343e43f9095a3f41b11
parentb380b419f0674bc8cb02953112367f83834c0175
Configure IPv6 LLADDR only on master L3 HA instance

HA standby routers must never transmit traffic from
any of their ports. This is because we allocate the same
port on all agents. For example, for a given external interface,
we place the same port with the same IP/MAC on every agent
the HA router is scheduled on. Thus, if a standby router
transmits data out of that interface, the physical switches
in the datacenter will re-learn the MAC address of the external
port, and place it on a port that's looking at a standby and
not at the master. This causes 100% packet loss for any incoming
traffic that should be going through the master instance of the
router.

Keepalived manages addresses on the router interfaces, and makes
sure that these addresses only live on the master. However, we
forgot about IPv6 link local addresses. They are generated
from the MAC address of the interface, and thus are identical on
all agents.

This patch tries to treat IPv6 link local addresses the same
as IPv4 addresses - define them as VIPs and let keepalived
move them around.

Closes-Bug: #1403860
Change-Id: Ia5071552239c9444c5105a150b268fb0437e4b85
neutron/agent/l3/agent.py
neutron/agent/l3/ha.py
neutron/agent/linux/keepalived.py
neutron/tests/functional/agent/test_l3_agent.py
neutron/tests/unit/agent/linux/test_keepalived.py
neutron/tests/unit/test_l3_agent.py