"keepalived_state_change" monitor does not use eventlet but normal Python threads. When "send_ip_addr_adv_notif" is called from inside the monitor, the arping command is never sent because the eventlet thread does not start. In order to be able to be called from this process, this method should also have an alternative implementation using "threading".
This should have been captured by "TestMonitorDaemon.test_new_fip_sends_garp", but there is a problem in the implementation of this test. This test created two namespaces with a veth interface connecting both. The "keepalived_state_change" monitor is set to capture the events in the first namespace and the interface created inside. The test expects the monitor to send a GARP when a new IP address is added to the monitored interface. But this agent does not send a GARP from the monitored interface if a new IP address is set but from any other interface in this namespace [1].
"keepalived_ state_change" monitor does not use eventlet but normal Python threads. When "send_ip_ addr_adv_ notif" is called from inside the monitor, the arping command is never sent because the eventlet thread does not start. In order to be able to be called from this process, this method should also have an alternative implementation using "threading".
This should have been captured by "TestMonitorDae mon.test_ new_fip_ sends_garp" , but there is a problem in the implementation of this test. This test created two namespaces with a veth interface connecting both. The "keepalived_ state_change" monitor is set to capture the events in the first namespace and the interface created inside. The test expects the monitor to send a GARP when a new IP address is added to the monitored interface. But this agent does not send a GARP from the monitored interface if a new IP address is set but from any other interface in this namespace [1].
[1] https:/ /github. com/openstack/ neutron/ blob/8ee34655b8 757086c03feecfd a100333f47ed810 /neutron/ agent/l3/ keepalived_ state_change. py#L90