一、 实验目的
熟悉Mininet自定义拓扑脚本的编写;
熟悉编写POX脚本动态改变转发规则
二、实验原理
在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为。在本实验中,基于Mininet脚本,编写POX脚本,动态改变交换机的转发规则。
三、实验任务
先看一下本次实验的拓扑图:
在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S2-S5。通过这个循环调度的例子动态地改变交换机的转发规则。
1.1在pox文件里面创建脚本lab_controller.py
1 from pox.core import core 2 3 import pox.openflow.libopenflow_01 as of 4 5 from pox.lib.util import dpidToStr 6 7 from pox.lib.addresses import IPAddr, EthAddr 8 9 from pox.lib.packet.arp import arp 10 11 from pox.lib.packet.ethernet import ethernet, ETHER_BROADCAST 12 13 from pox.lib.packet.packet_base import packet_base 14 15 from pox.lib.packet.packet_utils import * 16 17 import pox.lib.packet as pkt 18 19 from pox.lib.recoco import Timer 20 21 import time 22 23 24 25 log = core.getLogger() 26 27 28 29 s1_dpid=0 30 31 s2_dpid=0 32 33 s3_dpid=0 34 35 s4_dpid=0 36 37 s5_dpid=0 38 39 40 41 s1_p1=0 42 43 s1_p4=0 44 45 s1_p5=0 46 47 s1_p6=0 48 49 s2_p1=0 50 51 s3_p1=0 52 53 s4_p1=0 54 55 56 57 pre_s1_p1=0 58 59 pre_s1_p4=0 60 61 pre_s1_p5=0 62 63 pre_s1_p6=0 64 65 pre_s2_p1=0 66 67 pre_s3_p1=0 68 69 pre_s4_p1=0 70 71 72 73 turn=0 74 75 76 77 def getTheTime(): #fuction to create a timestamp 78 79 flock = time.localtime() 80 81 then = "[%s-%s-%s" %(str(flock.tm_year),str(flock.tm_mon),str(flock.tm_mday)) 82 83 84 85 if int(flock.tm_hour)<10: 86 87 hrs = "0%s" % (str(flock.tm_hour)) 88 89 else: 90 91 hrs = str(flock.tm_hour) 92 93 if int(flock.tm_min)<10: 94 95 mins = str(flock.tm_min) 96 97 secs = "0%s" % (str(flock.tm_sec)) 98 99 else: 100 101 secs = str(flock.tm_sec) 102 103 104 105 then +="]%s.%s.%s" % (hrs,mins,secs) 106 107 return then 108 109 110 111 112 113 def _timer_func (): 114 115 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid,turn 116 117 118 119 120 121 #print getTheTime(), "sent the port stats request to s1_dpid" 122 123 124 125 if turn==0: 126 127 msg = of.ofp_flow_mod() 128 129 msg.command=of.OFPFC_MODIFY_STRICT 130 131 msg.priority =100 132 133 msg.idle_timeout = 0 134 135 msg.hard_timeout = 0 136 137 msg.match.dl_type = 0x0800 138 139 msg.match.nw_dst = "10.0.0.4" 140 141 msg.actions.append(of.ofp_action_output(port = 5)) 142 143 core.openflow.getConnection(s1_dpid).send(msg) 144 145 turn=1 146 147 return 148 149 150 151 if turn==1: 152 153 msg = of.ofp_flow_mod() 154 155 msg.command=of.OFPFC_MODIFY_STRICT 156 157 msg.priority =100 158 159 msg.idle_timeout = 0 160 161 msg.hard_timeout = 0 162 163 msg.match.dl_type = 0x0800 164 165 msg.match.nw_dst = "10.0.0.4" 166 167 msg.actions.append(of.ofp_action_output(port = 6)) 168 169 core.openflow.getConnection(s1_dpid).send(msg) 170 171 turn=2 172 173 return 174 175 176 177 if turn==2: 178 179 msg = of.ofp_flow_mod() 180 181 msg.command=of.OFPFC_MODIFY_STRICT 182 183 msg.priority =100 184 185 msg.idle_timeout = 0 186 187 msg.hard_timeout = 0 188 189 msg.match.dl_type = 0x0800 190 191 msg.match.nw_dst = "10.0.0.4" 192 193 msg.actions.append(of.ofp_action_output(port = 4)) 194 195 turn=0 196 197 return 198 199 200 201 def _handle_portstats_received (event): 202 203 global s1_p1,s1_p4, s1_p5, s1_p6, s2_p1, s3_p1, s4_p1 204 205 global pre_s1_p1,pre_s1_p4, pre_s1_p5, pre_s1_p6, pre_s2_p1, pre_s3_p1, pre_s4_p1 206 207 208 209 if event.connection.dpid==s1_dpid: 210 211 for f in event.stats: 212 213 if int(f.port_no)<65534: 214 215 if f.port_no==1: 216 217 pre_s1_p1=s1_p1 218 219 s1_p1=f.rx_packets 220 221 222 if f.port_no==4: 223 224 pre_s1_p4=s1_p4 225 226 s1_p4=f.tx_packets 227 228 #s1_p4=f.tx_bytes 229 230 231 if f.port_no==5: 232 233 pre_s1_p5=s1_p5 234 235 s1_p5=f.tx_packets 236 237 if f.port_no==6: 238 239 pre_s1_p6=s1_p6 240 241 s1_p6=f.tx_packets 242 243 244 245 for f in event.stats: 246 247 if int(f.port_no)<65534: 248 249 if f.port_no==1: 250 251 pre_s2_p1=s2_p1 252 253 s2_p1=f.rx_packets 254 255 #s2_p1=f.rx_bytes 256 257 258 if event.connection.dpid==s3_dpid: 259 260 for f in event.stats: 261 262 if int(f.port_no)<65534: 263 264 if f.port_no==1: 265 266 pre_s3_p1=s3_p1 267 268 s3_p1=f.rx_packets 269 270 271 272 273 if event.connection.dpid==s4_dpid: 274 275 for f in event.stats: 276 277 if int(f.port_no)<65534: 278 279 if f.port_no==1: 280 281 pre_s4_p1=s4_p1 282 283 s4_p1=f.rx_packets 284 285 286 287 288 def _handle_ConnectionUp (event): 289 290 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid 291 292 print "ConnectionUp: ",dpidToStr(event.connection.dpid) 293 294 295 296 #remember the connection dpid for switch 297 298 for m in event.connection.features.ports: 299 300 if m.name == "s1-eth1": 301 302 s1_dpid = event.connection.dpid 303 304 print "s1_dpid=", s1_dpid 305 306 elif m.name == "s2-eth1": 307 308 s2_dpid = event.connection.dpid 309 310 print "s2_dpid=", s2_dpid 311 312 elif m.name == "s3-eth1": 313 314 s3_dpid = event.connection.dpid 315 316 elif m.name == "s4-eth1": 317 318 s4_dpid = event.connection.dpid 319 320 print "s4_dpid=", s4_dpid 321 322 elif m.name == "s5-eth1": 323 324 s5_dpid = event.connection.dpid 325 326 print "s5_dpid=", s5_dpid 327 328 329 330 if s1_dpid<>0 and s2_dpid<>0 and s3_dpid<>0 and s4_dpid<>0: 331 332 Timer(1, _timer_func, recurring=True) 333 334 335 336 def _handle_PacketIn(event): 337 338 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid 339 340 341 342 packet=event.parsed 343 344 345 346 347 if event.connection.dpid==s1_dpid: 348 349 a=packet.find('arp') 350 351 if a and a.protodst=="10.0.0.4": 352 353 msg = of.ofp_packet_out(data=event.ofp) 354 355 msg.actions.append(of.ofp_action_output(port=4)) 356 357 event.connection.send(msg) 358 359 360 361 if a and a.protodst=="10.0.0.5": 362 363 msg = of.ofp_packet_out(data=event.ofp) 364 365 msg.actions.append(of.ofp_action_output(port=5)) 366 367 event.connection.send(msg) 368 369 370 371 if a and a.protodst=="10.0.0.6": 372 373 msg = of.ofp_packet_out(data=event.ofp) 374 375 msg.actions.append(of.ofp_action_output(port=6)) 376 377 event.connection.send(msg) 378 379 380 381 if a and a.protodst=="10.0.0.1": 382 383 msg = of.ofp_packet_out(data=event.ofp) 384 385 msg.actions.append(of.ofp_action_output(port=1)) 386 387 event.connection.send(msg) 388 389 390 391 if a and a.protodst=="10.0.0.2": 392 393 msg = of.ofp_packet_out(data=event.ofp) 394 395 msg.actions.append(of.ofp_action_output(port=2)) 396 397 event.connection.send(msg) 398 399 400 401 if a and a.protodst=="10.0.0.3": 402 403 msg = of.ofp_packet_out(data=event.ofp) 404 405 msg.actions.append(of.ofp_action_output(port=3)) 406 407 event.connection.send(msg) 408 409 410 411 msg = of.ofp_flow_mod() 412 413 msg.priority =100 414 415 msg.idle_timeout = 0 416 417 msg.hard_timeout = 0 418 419 msg.match.dl_type = 0x0800 420 421 msg.match.nw_dst = "10.0.0.1" 422 423 msg.actions.append(of.ofp_action_output(port = 1)) 424 425 event.connection.send(msg) 426 427 428 429 msg = of.ofp_flow_mod() 430 431 msg.priority =100 432 433 msg.idle_timeout = 0 434 435 msg.hard_timeout = 0 436 437 msg.match.dl_type = 0x0800 438 439 msg.match.nw_dst = "10.0.0.2" 440 441 msg.actions.append(of.ofp_action_output(port = 2)) 442 443 event.connection.send(msg) 444 445 446 447 msg = of.ofp_flow_mod() 448 449 msg.priority =100 450 451 msg.idle_timeout = 0 452 453 msg.hard_timeout = 0 454 455 msg.match.dl_type = 0x0800 456 457 msg.match.nw_dst = "10.0.0.3" 458 459 msg.actions.append(of.ofp_action_output(port = 3)) 460 461 event.connection.send(msg) 462 463 464 465 msg = of.ofp_flow_mod() 466 467 msg.priority =100 468 469 msg.idle_timeout = 0 470 471 msg.hard_timeout = 1 472 473 msg.match.dl_type = 0x0800 474 475 msg.match.nw_dst = "10.0.0.4" 476 477 msg.actions.append(of.ofp_action_output(port = 4)) 478 479 event.connection.send(msg) 480 481 482 483 msg = of.ofp_flow_mod() 484 485 msg.priority =100 486 487 msg.idle_timeout = 0 488 489 msg.hard_timeout = 0 490 491 msg.match.dl_type = 0x0800 492 493 msg.match.nw_dst = "10.0.0.5" 494 495 msg.actions.append(of.ofp_action_output(port = 5)) 496 497 event.connection.send(msg) 498 499 500 501 msg = of.ofp_flow_mod() 502 503 msg.priority =100 504 505 msg.idle_timeout = 0 506 507 msg.hard_timeout = 0 508 509 msg.match.dl_type = 0x0800 510 511 msg.match.nw_dst = "10.0.0.6" 512 513 msg.actions.append(of.ofp_action_output(port = 6)) 514 515 event.connection.send(msg) 516 517 518 519 elif event.connection.dpid==s2_dpid: 520 521 msg = of.ofp_flow_mod() 522 523 msg.priority =10 524 525 msg.idle_timeout = 0 526 527 msg.hard_timeout = 0 528 529 msg.match.in_port = 1 530 531 msg.match.dl_type=0x0806 532 533 msg.actions.append(of.ofp_action_output(port = 2)) 534 535 event.connection.send(msg) 536 537 538 539 msg = of.ofp_flow_mod() 540 541 msg.priority =10 542 543 msg.idle_timeout = 0 544 545 msg.hard_timeout = 0 546 547 msg.match.in_port = 1 548 549 msg.match.dl_type=0x0800 550 551 msg.actions.append(of.ofp_action_output(port = 2)) 552 553 event.connection.send(msg) 554 555 556 557 msg = of.ofp_flow_mod() 558 559 msg.priority =10 560 561 msg.idle_timeout = 0 562 563 msg.hard_timeout = 0 564 565 msg.match.in_port = 2 566 567 msg.match.dl_type=0x0806 568 569 msg.actions.append(of.ofp_action_output(port = 1)) 570 571 event.connection.send(msg) 572 573 574 575 msg = of.ofp_flow_mod() 576 577 msg.priority =10 578 579 msg.idle_timeout = 0 580 581 msg.hard_timeout = 0 582 583 msg.match.in_port = 2 584 585 msg.match.dl_type=0x0800 586 587 msg.actions.append(of.ofp_action_output(port = 1)) 588 589 event.connection.send(msg) 590 591 592 593 elif event.connection.dpid==s3_dpid: 594 595 msg = of.ofp_flow_mod() 596 597 msg.priority =10 598 599 msg.idle_timeout = 0 600 601 msg.hard_timeout = 0 602 603 msg.match.in_port = 1 604 605 msg.match.dl_type=0x0806 606 607 msg.actions.append(of.ofp_action_output(port = 2)) 608 609 event.connection.send(msg) 610 611 612 613 msg = of.ofp_flow_mod() 614 615 msg.priority =10 616 617 msg.idle_timeout = 0 618 619 msg.hard_timeout = 0 620 621 msg.match.in_port = 1 622 623 msg.match.dl_type=0x0800 624 625 msg.actions.append(of.ofp_action_output(port = 2)) 626 627 event.connection.send(msg) 628 629 630 631 msg = of.ofp_flow_mod() 632 633 msg.priority =10 634 635 msg.idle_timeout = 0 636 637 msg.hard_timeout = 0 638 639 msg.match.in_port = 2 640 641 msg.match.dl_type=0x0806 642 643 msg.actions.append(of.ofp_action_output(port = 1)) 644 645 event.connection.send(msg) 646 647 648 649 msg = of.ofp_flow_mod() 650 651 msg.priority =10 652 653 msg.idle_timeout = 0 654 655 msg.hard_timeout = 0 656 657 msg.match.in_port = 2 658 659 msg.match.dl_type=0x0800 660 661 msg.actions.append(of.ofp_action_output(port = 1)) 662 663 event.connection.send(msg) 664 665 666 667 elif event.connection.dpid==s4_dpid: 668 669 msg = of.ofp_flow_mod() 670 671 msg.priority =10 672 673 msg.idle_timeout = 0 674 675 msg.hard_timeout = 0 676 677 msg.match.in_port = 1 678 679 msg.match.dl_type=0x0806 680 681 msg.actions.append(of.ofp_action_output(port = 2)) 682 683 event.connection.send(msg) 684 685 686 687 msg = of.ofp_flow_mod() 688 689 msg.priority =10 690 691 msg.idle_timeout = 0 692 693 msg.hard_timeout = 0 694 695 msg.match.in_port = 1 696 697 msg.match.dl_type=0x0800 698 699 msg.actions.append(of.ofp_action_output(port = 2)) 700 701 event.connection.send(msg) 702 703 704 705 msg = of.ofp_flow_mod() 706 707 msg.priority =10 708 709 msg.idle_timeout = 0 710 711 msg.hard_timeout = 0 712 713 msg.match.in_port = 2 714 715 msg.match.dl_type=0x0806 716 717 msg.actions.append(of.ofp_action_output(port = 1)) 718 719 event.connection.send(msg) 720 721 722 723 msg = of.ofp_flow_mod() 724 725 msg.priority =10 726 727 msg.idle_timeout = 0 728 729 msg.hard_timeout = 0 730 731 msg.match.in_port = 2 732 733 msg.match.dl_type=0x0800 734 735 msg.actions.append(of.ofp_action_output(port = 1)) 736 737 event.connection.send(msg) 738 739 740 741 elif event.connection.dpid==s5_dpid: 742 743 a=packet.find('arp') 744 745 if a and a.protodst=="10.0.0.4": 746 747 msg = of.ofp_packet_out(data=event.ofp) 748 749 msg.actions.append(of.ofp_action_output(port=4)) 750 751 event.connection.send(msg) 752 753 754 755 if a and a.protodst=="10.0.0.5": 756 757 msg = of.ofp_packet_out(data=event.ofp) 758 759 msg.actions.append(of.ofp_action_output(port=5)) 760 761 event.connection.send(msg) 762 763 764 765 if a and a.protodst=="10.0.0.6": 766 767 msg = of.ofp_packet_out(data=event.ofp) 768 769 msg.actions.append(of.ofp_action_output(port=6)) 770 771 event.connection.send(msg) 772 773 774 775 if a and a.protodst=="10.0.0.1": 776 777 msg = of.ofp_packet_out(data=event.ofp) 778 779 msg.actions.append(of.ofp_action_output(port=1)) 780 781 event.connection.send(msg) 782 783 784 785 if a and a.protodst=="10.0.0.2": 786 787 msg = of.ofp_packet_out(data=event.ofp) 788 789 msg.actions.append(of.ofp_action_output(port=2)) 790 791 event.connection.send(msg) 792 793 794 795 if a and a.protodst=="10.0.0.3": 796 797 msg = of.ofp_packet_out(data=event.ofp) 798 799 msg.actions.append(of.ofp_action_output(port=3)) 800 801 event.connection.send(msg) 802 803 804 805 806 807 808 msg = of.ofp_flow_mod() 809 810 msg.priority =100 811 812 msg.idle_timeout = 0 813 814 msg.hard_timeout = 0 815 816 msg.match.dl_type = 0x0800 817 818 msg.match.nw_dst = "10.0.0.1" 819 820 msg.actions.append(of.ofp_action_output(port = 1)) 821 822 event.connection.send(msg) 823 824 825 826 msg = of.ofp_flow_mod() 827 828 msg.priority =100 829 830 msg.idle_timeout = 0 831 832 msg.hard_timeout = 0 833 834 msg.match.dl_type = 0x0800 835 836 msg.match.nw_dst = "10.0.0.2" 837 838 msg.actions.append(of.ofp_action_output(port = 2)) 839 840 event.connection.send(msg) 841 842 843 844 msg = of.ofp_flow_mod() 845 846 msg.priority =100 847 848 msg.idle_timeout = 0 849 850 msg.hard_timeout = 0 851 852 msg.match.dl_type = 0x0800 853 854 msg.match.nw_dst = "10.0.0.3" 855 856 msg.actions.append(of.ofp_action_output(port = 3)) 857 858 event.connection.send(msg) 859 860 861 862 msg = of.ofp_flow_mod() 863 864 msg.priority =100 865 866 msg.idle_timeout = 0 867 868 msg.hard_timeout = 0 869 870 msg.match.dl_type = 0x0800 871 872 msg.match.nw_dst = "10.0.0.4" 873 874 msg.actions.append(of.ofp_action_output(port = 4)) 875 876 event.connection.send(msg) 877 878 879 880 msg = of.ofp_flow_mod() 881 882 msg.priority =100 883 884 msg.idle_timeout = 0 885 886 msg.hard_timeout = 0 887 888 msg.match.dl_type = 0x0800 889 890 msg.match.nw_dst = "10.0.0.5" 891 892 msg.actions.append(of.ofp_action_output(port = 5)) 893 894 event.connection.send(msg) 895 896 897 898 msg = of.ofp_flow_mod() 899 900 msg.priority =100 901 902 msg.idle_timeout = 0 903 904 msg.hard_timeout = 0 905 906 msg.match.dl_type = 0x0800 907 908 msg.match.nw_dst = "10.0.0.6" 909 910 msg.actions.append(of.ofp_action_output(port = 6)) 911 912 event.connection.send(msg) 913 914 915 916 def launch (): 917 918 global start_time 919 920 core.openflow.addListenerByName("PortStatsReceived",_handle_portstats_received) 921 922 core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp) 923 924 core.openflow.addListenerByName("PacketIn",_handle_PacketIn)
1.2查看流表项(做完步骤2再回来)
1 ./pox.py lab_controller web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk
然后再火狐里面搜索:http://pox-ip:8000/poxdesk然后点击TableViewer选择s1即00-00-00-00-01就会跳出下图(其中深蓝色的交换机的output的端口就是在5,6的切换,时而还会出现不存在(个人是这认为ox脚本的bug)说明了只有两种切换方式,而另一种(连向4的)不通,说明了网络运行的时候在s1的OUTPUT:4处出现了问题,这个待我日后分析lab_controller.py再说吧。
2.1在mininet文件夹里面创建脚本文件rulemininet.py
1 #!/usr/bin/python 2 3 # coding:utf -8 4 5 from mininet.topo import Topo 6 7 from mininet.net import Mininet 8 9 from mininet.node import CPULimitedHost 10 11 from mininet.link import TCLink 12 13 from mininet.util import dumpNodeConnections 14 15 from mininet.log import setLogLevel 16 17 from mininet.node import Controller 18 19 from mininet.cli import CLI 20 21 from functools import partial 22 23 from mininet.node import RemoteController 24 25 import os 26 27 28 # 创建一个基于拓扑类的MyTopo类使得多交换机连接多个主机和交换机的复杂拓扑 29 30 class MyTopo(Topo): 31 32 "Single switch connected to n hosts." 33 # 构造函数创建5个交换机和6个主机 34 35 def __init__(self): 36 37 Topo.__init__(self) 38 39 s1=self.addSwitch('s1') 40 41 s2=self.addSwitch('s2') 42 43 s3=self.addSwitch('s3') 44 45 s4=self.addSwitch('s4') 46 47 s5=self.addSwitch('s5') 48 49 h1=self.addHost('h1') 50 51 h2=self.addHost('h2') 52 53 h3=self.addHost('h3') 54 55 h4=self.addHost('h4') 56 57 h5=self.addHost('h5') 58 59 h6=self.addHost('h6') 60 61 # 主机1,2,3连接s1 62 63 self.addLink(h1, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 64 65 self.addLink(h2, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 66 67 self.addLink(h3, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 68 69 # 交换机2,3,4连接s1,所以说s1有6个接口 70 71 self.addLink(s1, s2, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 72 73 self.addLink(s1, s3, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 74 75 self.addLink(s1, s4, bw=1, delay='10ms', loss=0, max_queue_size=1000,use_htb=True) 76 77 # 交换机2,3,4连接s5,所以说s5也有6个接口,2,3,4各两个 78 79 self.addLink(s2, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 80 81 self.addLink(s3, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 82 83 self.addLink(s4, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 84 85 # 主机4,5,6连接s5 86 87 self.addLink(s5, h4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 88 89 self.addLink(s5, h5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 90 91 self.addLink(s5, h6, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 92 93 94 95 def perfTest(): 96 97 # 创建网络并运行简单性能测试 98 99 topo = MyTopo() 100 101 102 net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink, controller=partial(RemoteController, ip='10.0.0.13', port=6633)) 103 104 net.start() 105 106 print "Dumping host connections" 107 108 dumpNodeConnections(net.hosts) 109 110 h1,h2,h3=net.get('h1','h2','h3') 111 112 h4,h5,h6=net.get('h4','h5','h6') 113 114 h1.setMAC("0:0:0:0:0:1") 115 116 h2.setMAC("0:0:0:0:0:2") 117 118 h3.setMAC("0:0:0:0:0:3") 119 120 h4.setMAC("0:0:0:0:0:4") 121 122 h5.setMAC("0:0:0:0:0:5") 123 124 h6.setMAC("0:0:0:0:0:6") 125 126 CLI(net) 127 128 net.stop() 129 130 131 132 if __name__ == '__main__': 133 134 setLogLevel('info') 135 136 perfTest()
2.2 先打开脚本文件lab_controller.py然后打开rulemininet.py ,分别用两个程序
1 2 cd pox 3 4 ./pox.py lab_controller 5 6 cd mininet 7 8 ./rulemininet.py 9 10 h1 ping -i 0.1 h4
rulemininet.py脚本的显示情况:
然而,pox理论上应当显示的是:
而我的是。。
所以这应当是pox的脚本问题,于是我才使用查看流表项的方式来分析。
总结:
1.学会了使用查看流表项
2.理解这个动态拓扑的原理