Skip to content

Latest commit

 

History

History
128 lines (89 loc) · 3.27 KB

switches.rst

File metadata and controls

128 lines (89 loc) · 3.27 KB

Configuring a LAN

By default, IPMininet uses :class:`~ipmininet.ipswitch.IPSwitch` to create regular switches (not Openflow switches) and hubs. The switches use the Spanning Tree Protocol by default to break the loops. The hubs are switches that do not maintain a MAC address table and always broadcast any received frame on all its interfaces.

Here is an example of a LAN with a few switches and one hub.

.. testcode:: lan

    from ipmininet.iptopo import IPTopo

    class MyTopology(IPTopo):

        def build(self, *args, **kwargs):

            # Switches
            s1 = self.addSwitch("s1")
            s2 = self.addSwitch("s2")
            s3 = self.addSwitch("s3")
            s4 = self.addSwitch("s4")

            # Hub
            hub1 = self.addHub("hub1")

            # Links
            self.addLink(s1, s2)
            self.addLink(s1, hub1)
            self.addLink(hub1, s3)
            self.addLink(hub1, s4)

            super().build(*args, **kwargs)

The Spanning Tree Protocol can be configured by changing the `stp_cost` on the links (or directly on each interface). The default cost is 1.

.. testcode:: stp

    from ipmininet.iptopo import IPTopo

    class MyTopology(IPTopo):

        def build(self, *args, **kwargs):

            # Switches
            s1 = self.addSwitch("s1")
            s2 = self.addSwitch("s2")
            s3 = self.addSwitch("s3")
            s4 = self.addSwitch("s4")

            # Hub
            hub1 = self.addHub("hub1")

            # Links
            self.addLink(s1, s2, stp_cost=2)  # Cost changed for both interfaces
            self.addLink(s1, hub1)
            ls3 = self.addLink(hub1, s3)
            ls3[s3].addParams(stp_cost=2)  # Cost changed on a single interface
            self.addLink(hub1, s4)

            super().build(*args, **kwargs)

In the Spanning Tree Protocol, each switch has a priority. The lowest priority switch becomes the root of the spanning tree. By default, switches declared first have a lower priority number. You can manually set this value when you create the switch.

.. testcode:: stp

    from ipmininet.iptopo import IPTopo

    class MyTopology(IPTopo):

        def build(self, *args, **kwargs):

            # Switches with manually set STP priority
            s1 = self.addSwitch("s1", prio=1)
            s2 = self.addSwitch("s2", prio=2)
            s3 = self.addSwitch("s3", prio=3)
            s4 = self.addSwitch("s4", prio=4)

            # Hub
            hub1 = self.addHub("hub1")

            # Links
            self.addLink(s1, s2, stp_cost=2)  # Cost changed for both interfaces
            self.addLink(s1, hub1)
            ls3 = self.addLink(hub1, s3)
            ls3[s3].addParams(stp_cost=2)  # Cost changed on a single interface
            self.addLink(hub1, s4)

            super().build(*args, **kwargs)

.. testsetup:: *

    from ipmininet.clean import cleanup
    cleanup(level='warning')

.. testcode:: *
    :hide:

    try:
        MyTopology
    except NameError:
        MyTopology = None

    if MyTopology is not None:
        from ipmininet.ipnet import IPNet
        net = IPNet(topo=MyTopology())
        net.start()

.. testcleanup:: *

    try:
        net
    except NameError:
        net = None

    if net is not None:
        net.stop()