Discussion:
[pox-dev] : ARP in loop topology
Murphy McCauley
2013-12-11 21:38:41 UTC
Permalink
The problem with using ARP in a looped topology is that ARP is usually broadcast and a simple-minded implementation of broadcast will lead to the broadcast getting caught in the loop.

One simple solution here is to remove the loop. This is what the traditional Spanning Tree Protocol does, and broadcast ARPs are used in networks with loops and STP every day. You can do basically the same thing with OpenFlow. POX comes with a component which attempts to do this for broadcast/multicast traffic by dynamically learning the topology (using the openflow.discovery component) and then disabling the flood bit on ports that aren't on a tree. Running POX with l2_pairs, spanning_tree, and discovery components demonstrates this, and certainly works with ARP. There's more information about this in the POX manual.

There are other solutions too. For example, l2_flowvisor never actually floods packets, and instead just sends packets along a tree to begin with. Or you might fake ARP altogether. l3_learning mostly does this, except when it doesn't know the answer, it floods the request. Instead of actually flooding, it could simply send ARP requests out each port which it knows doesn't connect to another switch (openflow.discovery can be queried to find these ports).

-- Murphy
Dear Murphy,
h1------------------------sw1--------------sw4-------------------h4
| |
h2-------------------------sw2--------------sw3-------------------h3
a Controller (POX) is connected to sw1,sw2,sw3,sw4.
i want to get host's MAC address, so Could you give me some ideas or recommend reference to solve this answer? Some reference use ARP to get host's MAC, but i think it's impossible in a loop topology?
Thanks for your help.
Viet
Murphy McCauley
2013-12-11 21:38:41 UTC
Permalink
The problem with using ARP in a looped topology is that ARP is usually broadcast and a simple-minded implementation of broadcast will lead to the broadcast getting caught in the loop.

One simple solution here is to remove the loop. This is what the traditional Spanning Tree Protocol does, and broadcast ARPs are used in networks with loops and STP every day. You can do basically the same thing with OpenFlow. POX comes with a component which attempts to do this for broadcast/multicast traffic by dynamically learning the topology (using the openflow.discovery component) and then disabling the flood bit on ports that aren't on a tree. Running POX with l2_pairs, spanning_tree, and discovery components demonstrates this, and certainly works with ARP. There's more information about this in the POX manual.

There are other solutions too. For example, l2_flowvisor never actually floods packets, and instead just sends packets along a tree to begin with. Or you might fake ARP altogether. l3_learning mostly does this, except when it doesn't know the answer, it floods the request. Instead of actually flooding, it could simply send ARP requests out each port which it knows doesn't connect to another switch (openflow.discovery can be queried to find these ports).

-- Murphy
Dear Murphy,
h1------------------------sw1--------------sw4-------------------h4
| |
h2-------------------------sw2--------------sw3-------------------h3
a Controller (POX) is connected to sw1,sw2,sw3,sw4.
i want to get host's MAC address, so Could you give me some ideas or recommend reference to solve this answer? Some reference use ARP to get host's MAC, but i think it's impossible in a loop topology?
Thanks for your help.
Viet
Continue reading on narkive:
Loading...