noxrepo / pox

The POX network software platform
https://noxrepo.github.io/pox-doc/html/
Apache License 2.0
619 stars 470 forks source link

ip_loadbalancer pseudo-MAC should be adjustable / limitation should be documented #294

Open MurphyMc opened 9 months ago

MurphyMc commented 9 months ago

Issue #293 showed a real-world example of ip_loadbalancer not working. The reason is this:

  1. ip_loadbalancer uses the Ethernet address derived from the switch's DPID as the source of the ARP probes it sends to servers.
  2. In the case of OVS, the default DPID is derived from the switch's local port (often "br0"), so ip_loadbalancer ends up sending its ARP probes from the Ethernet address of br0 (and expecting responses targeting that address).
  3. When OVS is in in-band control mode, it needs to answer ARPs, so it eats ARP packets sent to the local port via hidden table entries.

Because of the third item, POX never sees responses to the ARP probes it sends, and ip_loadbalancer does not work.

This is not really a bug. What POX is doing is logical and should work fine with any switch that doesn't steal the ARP packets. It even works with OVS if OVS has in-band control turned off. But it does keep it from working in a sort of confusing way in a not particularly unusual configuration (in-band control is enabled by default in OVS, after all).

I think we should probably do two things:

  1. Make it easy to override the address that ip_loadbalancer uses. This could just be another launcher option for ip_loadbalancer. This way even if OVS was in in-band mode, you could just override the address iplb uses and things should work.
  2. Document the issue with in-band control. This could just be a docstring comment in ip_loadbalancer.

A thing I think we should not do is change the default behavior of POX, since using the local port's MAC is the most logical choice, and I cannot think of an intelligent default alternative.