51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1277|回复: 0
打印 上一主题 下一主题

多控制器配置L2网络

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-9-17 13:04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本例子主要演示通过VTN协调器及两个VTN管理器配置L2网络,利用mininet虚拟出openflow交换机,并对其进行控制,mininet交换机拓扑图如下:


    拓扑图创建:
    其中multitree.py如下:
    Shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106

    #!/usr/bin/python
    """
    Run Mininet network using tree topology per remote controller.
    """
    from mininet.cli import CLI
    from mininet.log import info, setLogLevel
    from mininet.net import Mininet
    from mininet.node import Host, OVSKernelSwitch, RemoteController
    from mininet.topo import Topo
    TreeDepth = 2
    FanOut = 2
    ControllerAddress = ["172.31.2.70", "172.31.2.72"]
    class MultiTreeTopo(Topo):
    """Topology for multiple tree network using remote controllers.
    A tree network is assigned to a remote controller."""
    def __init__(self):
    Topo.__init__(self)
    self.hostSize = 1
    self.switchSize = 1
    self.treeSwitches =
    prev = None
    for cidx in range(len(ControllerAddress)):
    switches =
    self.treeSwitches.append(switches)
    root = self.addTree(switches, TreeDepth, FanOut)
    if prev:
    self.addLink(prev, root)
    prev = root
    def addTree(self, switches, depth, fanout):
    """Add a tree node."""
    if depth > 0:
    node = self.addSwitch('s%u' % self.switchSize)
    self.switchSize += 1
    switches.append(node)
    for i in range(fanout):
    child = self.addTree(switches, depth - 1, fanout)
    self.addLink(node, child)
    else:
    node = self.addHost('h%u' % self.hostSize)
    self.hostSize += 1
    return node
    def start(self, net):
    """Start all controllers and switches in the network."""
    cidx = 0
    for c in net.controllers:
    info("*** Starting controller: %s\n" % c)
    info("+ Starting switches ... ")
    switches = self.treeSwitches[cidx]
    for sname in switches:
    s = net.getNodeByName(sname)
    info(" %s" % s)
    s.start([c])
    cidx += 1
    info("\n")
    self.treeSwitches = None
    class MultiTreeNet(Mininet):
    """Mininet network environment with multiple tree network using remote
    controllers."""
    def __init__(self, **args):
    args['topo'] = MultiTreeTopo
    args['switch'] = OVSKernelSwitch
    args['controller'] = RemoteController
    args['build'] = False
    Mininet.__init__(self, **args)
    idx = 1
    for addr in ControllerAddress:
    name = 'c%d' % idx
    info('*** Creating remote controller: %s (%s)\n' % (name, addr))
    self.addController(name, ip=addr, port=6633)
    idx = idx + 1
    def start(self):
    "Start controller and switches."
    if not self.built:
    self.build
    self.topo.start(self)
    if __name__ == '__main__':
    setLogLevel('info')# for CLI output
    net = MultiTreeNet
    net.build
    print "*** Starting network"
    net.start
    print "*** Running CLI"
    CLI(net)
    print "*** Stopping network"
    net.stop

    测试连通性:
    Shell
    mininet> h2 ping h6
    PING 10.0.0.6 (10.0.0.6) 56(84) bytes of data.
    From 10.0.0.2 icmp_seq=1 Destination Host Unreachable
    From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
    From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
    下面通过vtn规则,使得h2与h6可以通信,调用接口创建相关资源:
    创建vtn
    Shell
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vtn" : {"vtn_name":"vtn_one","description":"test VTN" }}' http://172.31.2.70:8083/vtn-webapi/vtns
    HTTP/1.1 201 Created
    创建两个控制器
    Shell
    curl-i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controller1", "ipaddr":"172.31.2.70", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://172.31.2.70:8083/vtn-webapi/controllers
    HTTP/1.1 201 Created
    curl-i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"controller": {"controller_id": "controller2", "ipaddr":"172.31.2.72", "type": "odc", "version": "1.0", "auditstatus":"enable"}}' http://172.31.2.70:8083/vtn-webapi/controllers
    HTTP/1.1 201 Created
    创建虚拟桥
    分别在Controller1中创建vBridge1,Controller2中创建vBridge2。
    Shell
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vbr1","controller_id":"controller1","domain_id":"(DEFAULT)" }}'http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges
    HTTP/1.1 201 Created
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vbridge" : {"vbr_name":"vbr2","controller_id":"controller2","domain_id":"(DEFAULT)" }}'http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges
    HTTP/1.1 201 Created
    创建接口
    创建4个接口,vbr1中if1,if2,vbr2中if1,if2,其中两个if2做boundary的接口,if1做h2和h6的接口。
    Shell
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr1/interfaces
    HTTP/1.1 201 Created
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if2","description": "if_desc2"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr1/interfaces
    HTTP/1.1 201 Created
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if1","description": "if_desc1"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr2/interfaces
    HTTP/1.1 201 Created
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"interface": {"if_name": "if2","description": "if_desc2"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr2/interfaces
    HTTP/1.1 201 Created
    创建boundary和vLink
    Shell
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"boundary": {"boundary_id": "b1", "link": {"controller1_id": "controller1", "domain1_id": "(DEFAULT)","logical_port1_id": "PP-OF:openflow:1-s1-eth3", "controller2_id": "controller2", "domain2_id": "(DEFAULT)", "logical_port2_id": "PP-OF:openflow:4-s4-eth3"}}}' http://172.31.2.70:8083/vtn-webapi/boundaries
    HTTP/1.1 201 Created
    curl -i --user admin:adminpass -H 'content-type: application/json' -X POST -d '{"vlink": {"vlk_name": "vlink1" , "vnode1_name": "vbr1", "if1_name":"if2", "vnode2_name": "vbr2", "if2_name": "if2", "boundary_map": {"boundary_id":"b1","vlan_id": "50"}}}' http://127.0.0.1:8083/vtn-webapi/vtns/vtn_one/vlinks.json
    HTTP/1.1 201 Created
    配置端口映射关系
    Shell
    curl -i --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:openflow:2-s2-eth2"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr1/interfaces/if1/portmap
    HTTP/1.1 204 No Content
    curl -i --user admin:adminpass -H 'content-type: application/json' -X PUT -d '{"portmap":{"logical_port_id": "PP-OF:openflow:5-s5-eth2"}}' http://172.31.2.70:8083/vtn-webapi/vtns/vtn_one/vbridges/vbr2/interfaces/if1/portmap
    HTTP/1.1 204 No Content
    监测是否可以通信:
    64 bytes from 10.0.0.6: icmp_seq=1 ttl=64 time=12.2 ms
    64 bytes from 10.0.0.6: icmp_seq=2 ttl=64 time=0.184 ms
    64 bytes from 10.0.0.6: icmp_seq=3 ttl=64 time=0.042 ms
    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 16:44 , Processed in 0.084870 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表