1. 程式人生 > >Mininet實驗 動態改變轉發規則

Mininet實驗 動態改變轉發規則

介紹

拓撲如下:

在該環境下,假設H1 ping H4,初始的路由規則是S1-S2-S5,一秒後,路由轉發規則變為S1-S3-S5,再過一秒,規則變為S1-S4-S5,然後再回到最初的轉發規則S1-S2-S5。通過這個迴圈排程的例子動態地改變交換機的轉發規則。


pox指令碼

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 log = core.getLogger() 24 25 s1_dpid = 0 26 27 s2_dpid = 0 28 29 s3_dpid = 0 30 31 s4_dpid = 0 32 33 s5_dpid = 0 34 35 s1_p1 = 0 36 37 s1_p4 = 0 38 39 s1_p5 = 0
40 41 s1_p6 = 0 42 43 s2_p1 = 0 44 45 s3_p1 = 0 46 47 s4_p1 = 0 48 49 pre_s1_p1 = 0 50 51 pre_s1_p4 = 0 52 53 pre_s1_p5 = 0 54 55 pre_s1_p6 = 0 56 57 pre_s2_p1 = 0 58 59 pre_s3_p1 = 0 60 61 pre_s4_p1 = 0 62 63 turn = 0 64 65 66 def getTheTime(): # fuction to create a timestamp 67 68 flock = time.localtime() 69 70 then = "[%s-%s-%s" % (str(flock.tm_year), 71 str(flock.tm_mon), str(flock.tm_mday)) 72 73 if int(flock.tm_hour) < 10: 74 75 hrs = "0%s" % (str(flock.tm_hour)) 76 77 else: 78 79 hrs = str(flock.tm_hour) 80 81 if int(flock.tm_min) < 10: 82 83 mins = str(flock.tm_min) 84 85 secs = "0%s" % (str(flock.tm_sec)) 86 87 else: 88 89 secs = str(flock.tm_sec) 90 91 then += "]%s.%s.%s" % (hrs, mins, secs) 92 93 return then 94 95 96 def _timer_func(): 97 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid, turn 98 99 # print getTheTime(), "sent the port stats request to s1_dpid" 100 101 if turn == 0: 102 msg = of.ofp_flow_mod() 103 104 msg.command = of.OFPFC_MODIFY_STRICT 105 106 msg.priority = 100 107 108 msg.idle_timeout = 0 109 110 msg.hard_timeout = 0 111 112 msg.match.dl_type = 0x0800 113 114 msg.match.nw_dst = "10.0.0.4" 115 116 msg.actions.append(of.ofp_action_output(port=5)) 117 118 core.openflow.getConnection(s1_dpid).send(msg) 119 120 turn = 1 121 122 return 123 124 if turn == 1: 125 msg = of.ofp_flow_mod() 126 127 msg.command = of.OFPFC_MODIFY_STRICT 128 129 msg.priority = 100 130 131 msg.idle_timeout = 0 132 133 msg.hard_timeout = 0 134 135 msg.match.dl_type = 0x0800 136 137 msg.match.nw_dst = "10.0.0.4" 138 139 msg.actions.append(of.ofp_action_output(port=6)) 140 141 core.openflow.getConnection(s1_dpid).send(msg) 142 143 turn = 2 144 return 145 146 if turn == 2: 147 msg = of.ofp_flow_mod() 148 149 msg.command = of.OFPFC_MODIFY_STRICT 150 151 msg.priority = 100 152 153 msg.idle_timeout = 0 154 155 msg.hard_timeout = 0 156 157 msg.match.dl_type = 0x0800 158 159 msg.match.nw_dst = "10.0.0.4" 160 161 msg.actions.append(of.ofp_action_output(port=4)) 162 163 turn = 0 164 165 return 166 167 168 def _handle_portstats_received(event): 169 global s1_p1, s1_p4, s1_p5, s1_p6, s2_p1, s3_p1, s4_p1 170 171 global pre_s1_p1, pre_s1_p4, pre_s1_p5, pre_s1_p6, pre_s2_p1, pre_s3_p1, pre_s4_p1 172 173 if event.connection.dpid == s1_dpid: 174 175 for f in event.stats: 176 177 if int(f.port_no) < 65534: 178 179 if f.port_no == 1: 180 pre_s1_p1 = s1_p1 181 182 s1_p1 = f.rx_packets 183 184 if f.port_no == 4: 185 pre_s1_p4 = s1_p4 186 187 s1_p4 = f.tx_packets 188 189 # s1_p4=f.tx_bytes 190 191 if f.port_no == 5: 192 pre_s1_p5 = s1_p5 193 194 s1_p5 = f.tx_packets 195 196 if f.port_no == 6: 197 pre_s1_p6 = s1_p6 198 199 s1_p6 = f.tx_packets 200 201 for f in event.stats: 202 203 if int(f.port_no) < 65534: 204 205 if f.port_no == 1: 206 pre_s2_p1 = s2_p1 207 208 s2_p1 = f.rx_packets 209 210 # s2_p1=f.rx_bytes 211 212 if event.connection.dpid == s3_dpid: 213 214 for f in event.stats: 215 216 if int(f.port_no) < 65534: 217 218 if f.port_no == 1: 219 pre_s3_p1 = s3_p1 220 221 s3_p1 = f.rx_packets 222 223 if event.connection.dpid == s4_dpid: 224 225 for f in event.stats: 226 227 if int(f.port_no) < 65534: 228 229 if f.port_no == 1: 230 pre_s4_p1 = s4_p1 231 232 s4_p1 = f.rx_packets 233 234 235 def _handle_ConnectionUp(event): 236 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid 237 238 print "ConnectionUp: ", dpidToStr(event.connection.dpid) 239 240 # remember the connection dpid for switch 241 242 for m in event.connection.features.ports: 243 244 if m.name == "s1-eth1": 245 246 s1_dpid = event.connection.dpid 247 248 print "s1_dpid=", s1_dpid 249 250 elif m.name == "s2-eth1": 251 252 s2_dpid = event.connection.dpid 253 254 print "s2_dpid=", s2_dpid 255 256 elif m.name == "s3-eth1": 257 258 s3_dpid = event.connection.dpid 259 260 print "s3_dpid=", s3_dpid 261 262 elif m.name == "s4-eth1": 263 264 s4_dpid = event.connection.dpid 265 266 print "s4_dpid=", s4_dpid 267 268 elif m.name == "s5-eth1": 269 270 s5_dpid = event.connection.dpid 271 272 print "s5_dpid=", s5_dpid 273 274 if s1_dpid <> 0 and s2_dpid <> 0 and s3_dpid <> 0 and s4_dpid <> 0: 275 Timer(1, _timer_func, recurring=True) 276 277 278 def _handle_PacketIn(event): 279 global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid 280 281 packet = event.parsed 282 283 if event.connection.dpid == s1_dpid: 284 285 a = packet.find('arp') 286 287 if a and a.protodst == "10.0.0.4": 288 msg = of.ofp_packet_out(data=event.ofp) 289 290 msg.actions.append(of.ofp_action_output(port=4)) 291 292 event.connection.send(msg) 293 294 if a and a.protodst == "10.0.0.5": 295 msg = of.ofp_packet_out(data=event.ofp) 296 297 msg.actions.append(of.ofp_action_output(port=5)) 298 299 event.connection.send(msg) 300 301 if a and a.protodst == "10.0.0.6": 302 msg = of.ofp_packet_out(data=event.ofp) 303 304 msg.actions.append(of.ofp_action_output(port=6)) 305 306 event.connection.send(msg) 307 308 if a and a.protodst == "10.0.0.1": 309 msg = of.ofp_packet_out(data=event.ofp) 310 311 msg.actions.append(of.ofp_action_output(port=1)) 312 313 event.connection.send(msg) 314 315 if a and a.protodst == "10.0.0.2": 316 msg = of.ofp_packet_out(data=event.ofp) 317 318 msg.actions.append(of.ofp_action_output(port=2)) 319 320 event.connection.send(msg) 321 322 if a and a.protodst == "10.0.0.3": 323 msg = of.ofp_packet_out(data=event.ofp) 324 325 msg.actions.append(of.ofp_action_output(port=3)) 326 327 event.connection.send(msg) 328 329 msg = of.ofp_flow_mod() 330 331 msg.priority = 100 332 333 msg.idle_timeout = 0 334 335 msg.hard_timeout = 0 336 337 msg.match.dl_type = 0x0800 338 339 msg.match.nw_dst = "10.0.0.1" 340 341 msg.actions.append(of.ofp_action_output(port=1)) 342 343 event.connection.send(msg) 344 345 msg = of.ofp_flow_mod() 346 347 msg.priority = 100 348 349 msg.idle_timeout = 0 350 351 msg.hard_timeout = 0 352 353 msg.match.dl_type = 0x0800 354 355 msg.match.nw_dst = "10.0.0.2" 356 357 msg.actions.append(of.ofp_action_output(port=2)) 358 359 event.connection.send(msg) 360 361 msg = of.ofp_flow_mod() 362 363 msg.priority = 100 364 365 msg.idle_timeout = 0 366 367 msg.hard_timeout = 0 368 369 msg.match.dl_type = 0x0800 370 371 msg.match.nw_dst = "10.0.0.3" 372 373 msg.actions.append(of.ofp_action_output(port=3)) 374 375 event.connection.send(msg) 376 377 msg = of.ofp_flow_mod() 378 379 msg.priority = 100 380 381 msg.idle_timeout = 0 382 383 msg.hard_timeout = 1 384 385 msg.match.dl_type = 0x0800 386 387 msg.match.nw_dst = "10.0.0.4" 388 389 msg.actions.append(of.ofp_action_output(port=4)) 390 391 event.connection.send(msg) 392 393 msg = of.ofp_flow_mod() 394 395 msg.priority = 100 396 397 msg.idle_timeout = 0 398 399 msg.hard_timeout = 0 400 401 msg.match.dl_type = 0x0800 402 403 msg.match.nw_dst = "10.0.0.5" 404 405 msg.actions.append(of.ofp_action_output(port=5)) 406 407 event.connection.send(msg) 408 409 msg = of.ofp_flow_mod() 410 411 msg.priority = 100 412 413 msg.idle_timeout = 0 414 415 msg.hard_timeout = 0 416 417 msg.match.dl_type = 0x0800 418 419 msg.match.nw_dst = "10.0.0.6" 420 421 msg.actions.append(of.ofp_action_output(port=6)) 422 423 event.connection.send(msg) 424 425 426 427 elif event.connection.dpid == s2_dpid: 428 429 msg = of.ofp_flow_mod() 430 431 msg.priority = 10 432 433 msg.idle_timeout = 0 434 435 msg.hard_timeout = 0 436 437 msg.match.in_port = 1 438 439 msg.match.dl_type = 0x0806 440 441 msg.actions.append(of.ofp_action_output(port=2)) 442 443 event.connection.send(msg) 444 445 msg = of.ofp_flow_mod() 446 447 msg.priority = 10 448 449 msg.idle_timeout = 0 450 451 msg.hard_timeout = 0 452 453 msg.match.in_port = 1 454 455 msg.match.dl_type = 0x0800 456 457 msg.actions.append(of.ofp_action_output(port=2)) 458 459 event.connection.send(msg) 460 461 msg = of.ofp_flow_mod() 462 463 msg.priority = 10 464 465 msg.idle_timeout = 0 466 467 msg.hard_timeout = 0 468 469 msg.match.in_port = 2 470 471 msg.match.dl_type = 0x0806 472 473 msg.actions.append(of.ofp_action_output(port=1)) 474 475 event.connection.send(msg) 476 477 msg = of.ofp_flow_mod() 478 479 msg.priority = 10 480 481 msg.idle_timeout = 0 482 483 msg.hard_timeout = 0 484 485 msg.match.in_port = 2 486 487 msg.match.dl_type = 0x0800 488 489 msg.actions.append(of.ofp_action_output(port=1)) 490 491 event.connection.send(msg) 492 493 494 495 elif event.connection.dpid == s3_dpid: 496 497 msg = of.ofp_flow_mod() 498 499 msg.priority = 10 500 501 msg.idle_timeout = 0 502 503 msg.hard_timeout = 0 504 505 msg.match.in_port = 1 506 507 msg.match.dl_type = 0x0806 508 509 msg.actions.append(of.ofp_action_output(port=2)) 510 511 event.connection.send(msg) 512 513 msg = of.ofp_flow_mod() 514 515 msg.priority = 10 516 517 msg.idle_timeout = 0 518 519 msg.hard_timeout = 0 520 521 msg.match.in_port = 1 522 523 msg.match.dl_type = 0x0800 524 525 msg.actions.append(of.ofp_action_output(port=2)) 526 527 event.connection.send(msg) 528 529 msg = of.ofp_flow_mod() 530 531 msg.priority = 10 532 533 msg.idle_timeout = 0 534 535 msg.hard_timeout = 0 536 537 msg.match.in_port = 2 538 539 msg.match.dl_type = 0x0806 540 541 msg.actions.append(of.ofp_action_output(port=1)) 542 543 event.connection.send(msg) 544 545 msg = of.ofp_flow_mod() 546 547 msg.priority = 10 548 549 msg.idle_timeout = 0 550 551 msg.hard_timeout = 0 552 553 msg.match.in_port = 2 554 555 msg.match.dl_type = 0x0800 556 557 msg.actions.append(of.ofp_action_output(port=1)) 558 559 event.connection.send(msg) 560 561 562 563 elif event.connection.dpid == s4_dpid: 564 565 msg = of.ofp_flow_mod() 566 567 msg.priority = 10 568 569 msg.idle_timeout = 0 570 571 msg.hard_timeout = 0 572 573 msg.match.in_port = 1 574 575 msg.match.dl_type = 0x0806 576 577 msg.actions.append(of.ofp_action_output(port=2)) 578 579 event.connection.send(msg) 580 581 msg = of.ofp_flow_mod() 582 583 msg.priority = 10 584 585 msg.idle_timeout = 0 586 587 msg.hard_timeout = 0 588 589 msg.match.in_port = 1 590 591 msg.match.dl_type = 0x0800 592 593 msg.actions.append(of.ofp_action_output(port=2)) 594 595 event.connection.send(msg) 596 597 msg = of.ofp_flow_mod() 598 599 msg.priority = 10 600 601 msg.idle_timeout = 0 602 603 msg.hard_timeout = 0 604 605 msg.match.in_port = 2 606 607 msg.match.dl_type = 0x0806 608 609 msg.actions.append(of.ofp_action_output(port=1)) 610 611 event.connection.send(msg) 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 = 2 622 623 msg.match.dl_type = 0x0800 624 625 msg.actions.append(of.ofp_action_output(port=1)) 626 627 event.connection.send(msg) 628 629 630 631 elif event.connection.dpid == s5_dpid: 632 633 a = packet.find('arp') 634 635 if a and a.protodst == "10.0.0.4": 636 msg = of.ofp_packet_out(data=event.ofp) 637 638 msg.actions.append(of.ofp_action_output(port=4)) 639 640 event.connection.send(msg) 641 642 if a and a.protodst == "10.0.0.5": 643 msg = of.ofp_packet_out(data=event.ofp) 644 645 msg.actions.append(of.ofp_action_output(port=5)) 646 647 event.connection.send(msg) 648 649 if a and a.protodst == "10.0.0.6": 650 msg = of.ofp_packet_out(data=event.ofp) 651 652 msg.actions.append(of.ofp_action_output(port=6)) 653 654 event.connection.send(msg) 655 656 if a and a.protodst == "10.0.0.1": 657 msg = of.ofp_packet_out(data=event.ofp) 658 659 msg.actions.append(of.ofp_action_output(port=1)) 660 661 event.connection.send(msg) 662 663 if a and a.protodst == "10.0.0.2": 664 msg = of.ofp_packet_out(data=event.ofp) 665 666 msg.actions.append(of.ofp_action_output(port=2)) 667 668 event.connection.send(msg) 669 670 if a and a.protodst == "10.0.0.3": 671 msg = of.ofp_packet_out(data=event.ofp) 672 673 msg.actions.append(of.ofp_action_output(port=3)) 674 675 event.connection.send(msg) 676 677 msg = of.ofp_flow_mod() 678 679 msg.priority = 100 680 681 msg.idle_timeout = 0 682 683 msg.hard_timeout = 0 684 685 msg.match.dl_type = 0x0800 686 687 msg.match.nw_dst = "10.0.0.1" 688 689 msg.actions.append(of.ofp_action_output(port=1)) 690 691 event.connection.send(msg) 692 693 msg = of.ofp_flow_mod() 694 695 msg.priority = 100 696 697 msg.idle_timeout = 0 698 699 msg.hard_timeout = 0 700 701 msg.match.dl_type = 0x0800 702 703 msg.match.nw_dst = "10.0.0.2" 704 705 msg.actions.append(of.ofp_action_output(port=2)) 706 707 event.connection.send(msg) 708 709 msg = of.ofp_flow_mod() 710 711 msg.priority = 100 712 713 msg.idle_timeout = 0 714 715 msg.hard_timeout = 0 716 717 msg.match.dl_type = 0x0800 718 719 msg.match.nw_dst = "10.0.0.3" 720 721 msg.actions.append(of.ofp_action_output(port=3)) 722 723 event.connection.send(msg) 724 725 msg = of.ofp_flow_mod() 726 727 msg.priority = 100 728 729 msg.idle_timeout = 0 730 731 msg.hard_timeout = 0 732 733 msg.match.dl_type = 0x0800 734 735 msg.match.nw_dst = "10.0.0.4" 736 737 msg.actions.append(of.ofp_action_output(port=4)) 738 739 event.connection.send(msg) 740 741 msg = of.ofp_flow_mod() 742 743 msg.priority = 100 744 745 msg.idle_timeout = 0 746 747 msg.hard_timeout = 0 748 749 msg.match.dl_type = 0x0800 750 751 msg.match.nw_dst = "10.0.0.5" 752 753 msg.actions.append(of.ofp_action_output(port=5)) 754 755 event.connection.send(msg) 756 757 msg = of.ofp_flow_mod() 758 759 msg.priority = 100 760 761 msg.idle_timeout = 0 762 763 msg.hard_timeout = 0 764 765 msg.match.dl_type = 0x0800 766 767 msg.match.nw_dst = "10.0.0.6" 768 769 msg.actions.append(of.ofp_action_output(port=6)) 770 771 event.connection.send(msg) 772 773 774 def launch(): 775 global start_time 776 777 core.openflow.addListenerByName("PortStatsReceived", _handle_portstats_received) 778 779 core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp) 780 781 core.openflow.addListenerByName("PacketIn", _handle_PacketIn)

 


mininet指令碼

  1 #!/usr/bin/python
  2  
  3  
  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  
 29  
 30  
 31 class MyTopo(Topo):
 32  
 33     "Single switch connected to n hosts."
 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          
 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         self.addLink(s1, s2, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 70  
 71         self.addLink(s1, s3, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 72  
 73         self.addLink(s1, s4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 74  
 75         self.addLink(s2, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 76  
 77         self.addLink(s3, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)  
 78  
 79         self.addLink(s4, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 80  
 81         self.addLink(s5, h4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 82  
 83         self.addLink(s5, h5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 84  
 85         self.addLink(s5, h6, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True) 
 86  
 87  
 88  
 89 def perfTest():
 90  
 91     "Create network and run simple performance test"
 92  
 93     topo = MyTopo()
 94  
 95  
 96     net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink, controller=partial(RemoteController, ip='127.0.0.1', port=6633))
 97  
 98     net.start()
 99  
100     print "Dumping host connections"
101  
102     dumpNodeConnections(net.hosts)
103  
104     h1,h2,h3=net.get('h1','h2','h3')
105  
106     h4,h5,h6=net.get('h4','h5','h6')
107  
108     h1.setMAC("0:0:0:0:0:1")
109  
110     h2.setMAC("0:0:0:0:0:2")
111  
112     h3.setMAC("0:0:0:0:0:3")
113  
114     h4.setMAC("0:0:0:0:0:4")
115  
116     h5.setMAC("0:0:0:0:0:5")
117  
118     h6.setMAC("0:0:0:0:0:6")
119  
120     CLI(net)
121  
122     net.stop()
123  
124  
125  
126 if __name__ == '__main__':
127  
128     setLogLevel('info')
129  
130     perfTest()

 

 

如果是在不同的機器使用的pox將控制器ip修改到對應pox所在的ip,我使用的是同一臺計算機上的就直接修改成了127.0.0.1。


然後執行pox指令碼再執行mininet指令碼,得到下圖:

mininet執行沒啥問題,不過提示0丟包率是非法的emmmmm。 然後pox的內容有些奇怪,咋感覺少了一句的感覺。強迫症,到腳本里填上。在第260行填上一行輸出。得到下圖:

鑑於有人說,h1 ping不到 h4,就先pingall一下,得到下圖:

一切正常。 然後繼續實驗,在mininet輸入h1 ping -i 0.1 h4 每秒從h1傳送10個包到h4。

mininet介面到時挺正常的,但是pox介面emmm一片死寂,所以我反覆了幾次,結果沒有變化。估計不是pox出問題了,就是pox指令碼寫的有問題吧,難不成是我實驗環境有問題?

由於對指令碼內容瞭解的不夠,所以我先嚐試了一下使用poxdesk圖形介面來顯示結果。先安裝一下。

1 cd ./pox/ext
2 git clone https://github.com/MurphyMc/poxdesk
3 cd poxdesk
4 wget http://downloads.sourceforge.net/qooxdoo/qooxdoo-2.0.2-sdk.zip
5 unzip qooxdoo-2.0.2-sdk.zip
6 mv qooxdoo-2.0.2-sdk qx
7 cd poxdesk
8 ./generate.py

我的小水管算是把我卡死了

然後通過命令執行:

1 ./pox.py 指令碼名 web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk

 

然後進入瀏覽器檢視:http://pox-ip:8000/poxdesk。這裡pox-ip是pox所在的ip,如果本地就直接使用127.0.0.1就行。

觀察s1目標為h4的,發現output一直在5和6之間變化,但是理論來說應該有三種不同的路由規則。結果很尷尬。。。