#!/usr/bin/env python

"""
This example shows on how to create wireless link between two APs with mesh
The wireless mesh network is based on IEEE 802.11s
"""

from mininet.log import setLogLevel, info
from mn_wifi.link import wmediumd, mesh
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mn_wifi.wmediumdConnector import interference


def topology():
    "Create a network."
    net = Mininet_wifi(link=wmediumd, wmediumd_mode=interference)

    info("*** Creating nodes\n")
    sta1 = net.addStation('sta1', mac='00:00:00:00:00:11',ip='192.168.1.11/24', position='1,1,0')
    sta2 = net.addStation('sta2', mac='00:00:00:00:00:12',ip='192.168.1.12/24', position='31,11,0')
    ap1 = net.addAccessPoint('ap1', wlans=2, ip='192.168.1.1/24',ssid='ssid1', position='10,10,0')
    ap2 = net.addAccessPoint('ap2', wlans=2, ip='192.168.1.2/24',ssid='ssid2', position='30,10,0')
    c0 = net.addController('c0')

    info("*** Configuring nodes\n")
    net.configureNodes()


    protocols = ['batman_adv']
    kwargs = {} 
    for proto in protocols:
        kwargs['proto'] = proto
    
    info("*** Associating Stations\n")
    net.addLink(sta1, ap1)
    net.addLink(sta2, ap2)
    net.addLink(ap1, intf='ap1-wlan2', cls=mesh, ssid='mesh-ssid', channel=5, **kwargs)
    net.addLink(ap2, intf='ap2-wlan2', cls=mesh, ssid='mesh-ssid', channel=5, **kwargs)

    info("*** Starting network\n")
    net.build()
    c0.start()
    ap1.start([c0])
    ap2.start([c0])

    info("*** Running CLI\n")
    CLI(net)

    info("*** Stopping network\n")
    net.stop()


if __name__ == '__main__':
    setLogLevel('debug')
    topology()
