def setUp(self): self.h1 = BasicHost.create('h1') self.h2 = BasicHost.create('h2') self.s1 = RIPRouter.create('s1') self.s2 = RIPRouter.create('s2') # connect switches to host self.s1.linkTo(self.h1) self.s2.linkTo(self.h2) # connect switches together self.s1.linkTo(self.s2) dp_h1 = DiscoveryPacket(self.h1, 1) dp_h2 = DiscoveryPacket(self.h2, 1) dp_s1 = DiscoveryPacket(self.s1, 1) dp_s2 = DiscoveryPacket(self.s2, 1) # send discovery packet between h1 -- s1 on port 0 self.h1.handle_rx(dp_s1, 0) self.s1.handle_rx(dp_h1, 0) # send discovery packet between h2 -- s2 on port 0 self.h2.handle_rx(dp_s2, 0) self.s2.handle_rx(dp_h2, 0) # send discovery packet between s1 -- s2 on port 1 self.s1.handle_rx(dp_s2, 1) self.s2.handle_rx(dp_s1, 1) self.entities = [self.h1, self.h2, self.s1, self.s2]
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): RIPRouter.create('student') BasicHost.create('dest') FakeEntity.create('announcer', None, [dest, 7]) FakeEntity.create('listener', [dest, 8], None) topo.link(student, announcer) topo.link(student, listener)
def create(switch_type=FakeEntity, host_type=FakeEntity, n=2): RIPRouter.create('student') BasicHost.create('dest') FakeEntity.create('announcer', None, [dest, 7]) FakeEntity.create('listener', [dest, 8], None) topo.link(student, announcer) topo.link(student, listener)
def testNaivePoisonReverse(self): r1 = RIPRouter() r1.name = "r1" r2 = RIPRouter() r2.name = "r2" r3 = RIPRouter() r3.name = "r3" r1.handle_rx(DiscoveryPacket(r2,0),0) packetOne = RoutingUpdate packetOne.paths = {r1:1, r3:1} packetOne.src = r2 r1.handle_rx(RoutingUpdate, 0) self.failUnless(r1.distance_vector.get_routing_packet(r2).paths == {})
def testDiscoveryPacket(self): r1 = RIPRouter() r1.name = "r1" r2 = RIPRouter() r2.name = "r2" r3 = RIPRouter() r3.name = "r3" r1.handle_rx(DiscoveryPacket(r2, 0), 1) r1.handle_rx(DiscoveryPacket(r3, 0), 2) self.failUnless(r1.distance_vector.dest_via_nbors == {r2:{None:0},r3:{None:0}}) self.failUnless(r1.neighbor_ports == {r2:1, r3:2})
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): RIPRouter.create('A') RIPRouter.create('B') #RIPRouter.create('C') #RIPRouter.create('D') RIPRouter.create('E') FakeEntity.create('Z', {A: 1}, {}) topo.link(A, B) #topo.link(B, C) #topo.link(C, D) #topo.link(D, E) topo.link(B, E) topo.link(B, Z)
def __init__(self): RIPRouter.__init__(self) self.convergencedTable = None self.upDone = False self.downDone = False
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): global expectedUpdate1 global expectedSender1 global waittime print "Creating routers..." RIPRouter.create('A') RIPRouter.create('B') RIPRouter.create('C') RIPRouter.create('D') RIPRouter.create('E') RIPRouter.create('F') RIPRouter.create('G') RIPRouter.create('H') RIPRouter.create('I') RIPRouter.create('J') createExpectedDict() FakeEntity.create('Z', expectedUpdate1, expectedSender1, {}) print "Case 1: A-B-Z" topo.link(A, B) #A - B - Z topo.link(B, Z) time.sleep(waittime) if(failed): return print "Case 2: A B-Z" topo.unlink(A, B) #A B - Z time.sleep(waittime) if(failed): return print "Case 3: A-B Z" topo.unlink(B, Z) time.sleep(waittime/2) topo.link(A, B) #A - B Z time.sleep(waittime) if(failed): return print "Case 4: A-B-C-D-E-Z" topo.link(E, Z) #A - B - C - D - E - Z topo.link(B, C) topo.link(C, D) time.sleep(waittime) topo.link(D, E) time.sleep(waittime) if(failed): return print "Case 5: Circle(A,E)-Z" topo.link(E, A) #A - B - C - D - E - Z time.sleep(waittime) # \_____________/ if(failed): return print "Case 6: Clique(A,E)-Z" #topo.link(A, B) topo.link(A, C) topo.link(A, D) #topo.link(A, E) #topo.link(B, C) topo.link(B, D) # ---A--- topo.link(B, E) # / / \ \ time.sleep(waittime) # B--|---|-E -- Z #topo.link(C, D) # \ |/ \| / topo.link(C, E) # C-----D #topo.link(D, E) # Clique time.sleep(waittime) if(failed): return print "Case 7: Centralize(A,{B,C,D,E,Z}" #topo.unlink(A, B) #topo.unlink(A, C) #topo.unlink(A, D) #topo.unlink(A, E) topo.unlink(E, Z) topo.unlink(B, C) topo.unlink(B, D) # Z topo.unlink(B, E) # | topo.unlink(C, D) # B -- A -- E topo.unlink(C, E) # / \ topo.unlink(D, E) # C D time.sleep(waittime) topo.link(A, Z) time.sleep(waittime) if(failed): return print "Case 8: Centralize(A,Circle(B-E,Z))" topo.link(B, C) topo.link(C, D) topo.link(D, E) time.sleep(waittime) # ---Z--- topo.link(E, Z) # / | \ time.sleep(waittime/2) # B -- A -- E topo.link(Z, B) # \ / \ / time.sleep(waittime) # C-----D if(failed): return print "Case 9: A-B-Branch(Z, C-D-E, F-G)" topo.unlink(A, Z) topo.unlink(E, Z) topo.unlink(B, Z) #topo.unlink(A, B) topo.unlink(A, C) topo.unlink(A, D) topo.unlink(A, E) topo.unlink(B, C) topo.link(F, G) #print "REM" #topo.unlink(C, D) #topo.unlink(D, E) time.sleep(waittime) topo.link(B, Z) time.sleep(waittime/2) Z.send_specific_announce({F: 1, G: 2, C: 1, D: 2, E: 3}) time.sleep(waittime/2) topo.unlink(B, Z) topo.link(Z, C) time.sleep(waittime/2) Z.send_specific_announce({F: 1, G: 2, B: 1, A: 2}) time.sleep(waittime/2) # topo.unlink(C, Z) # F - G topo.link(Z, F) # | time.sleep(waittime/2) # A - B - Z - C - D - E Z.send_specific_announce({B: 1, A: 2, C: 1, D: 2, E: 3}) time.sleep(waittime/2) topo.unlink(F, G) Z.send_specific_announce({B: 1, A: 2, C: 1, D: 2, E: 3, G: 100}) #print "NIM" time.sleep(waittime/2) topo.link(F, G) time.sleep(waittime) if(failed): return print "Case 10: EShaped(ABC,EHD,FGZ)" #topo.unlink(B, Z) #topo.unlink(Z, C) topo.unlink(Z, F) #topo.unlink(A, B) topo.unlink(C, D) topo.unlink(D, E) #topo.unlink(F, G) topo.link(B, C) topo.link(A, E) # A ------B------C topo.link(E, H) # | topo.link(H, D) # E ------H------D topo.link(A, F) # | time.sleep(waittime) # F-------G------Z topo.link(G, Z) time.sleep(waittime/2) topo.disconnect(H) time.sleep(waittime) if(failed): return A.remove() B.remove() C.remove() D.remove() E.remove() F.remove() G.remove() H.remove() I.remove() J.remove() Z.remove()
def testDistanceVectorTable(self): r1 = RIPRouter() r1.name = "r1" r2 = RIPRouter() r2.name = "r2" r3 = RIPRouter() r3.name = "r3" r4 = RIPRouter() r4.name = "r4" r5 = RIPRouter() r5.name = "r5" r3.handle_rx(DiscoveryPacket(r1,1), None) r3.handle_rx(DiscoveryPacket(r4,4), None) r3.handle_rx(DiscoveryPacket(r5,5), None) packetOne = RoutingUpdate() packetOne.src = r1 packetOne.paths = {r2:1,r3:1,r4:2,r5:2} packetFour = RoutingUpdate() packetFour.src = r4 packetFour.paths = {r1:2,r2:1,r3:1,r5:1} packetFive = RoutingUpdate() packetFive.src = r5 packetFive.paths = {r1:2,r2:2,r3:1,r4:1} r3.handle_rx(packetOne, 1) r3.handle_rx(packetFour, 4) r3.handle_rx(packetFive, 5) r3_table = {r1:{None:0,r4:2,r5:2},r2:{r1:1,r4:1,r5:2},r4:{r1:2,None:0,r5:1},r5:{r1:2,r4:1,None:0}} self.failUnless(r3.distance_vector.dest_via_nbors == r3_table)
def testDistanceVectorRouteDeletion(self): r1 = RIPRouter() r1.name = "r1" r2 = RIPRouter() r2.name = "r2" r3 = RIPRouter() r3.name = "r3" r4 = RIPRouter() r4.name = "r4" r5 = RIPRouter() r5.name = "r5" r5.handle_rx(DiscoveryPacket(r3,0), 3) r5.handle_rx(DiscoveryPacket(r4,0), 4) packetThree = RoutingUpdate() packetThree.src = r3 packetThree.paths = {r1:1,r2:2,r4:1,r5:1} r5.handle_rx(packetThree, 3) packetFour = RoutingUpdate() packetFour.src = r4 packetFour.paths = {r1:2,r2:1,r3:1,r5:1} r5.handle_rx(packetFour, 4) r5_table = {r1:{r3:1,r4:2},r2:{r3:2,r4:1},r3:{None:0,r4:1},r4:{r3:1,None:0}} self.failUnless(r5.distance_vector.dest_via_nbors == r5_table) self.failUnless(r5.neighbor_ports == {r3:3,r4:4}) self.failUnless(r5.distance_vector.delete_link(r3)) r5_table = {r1:{r4:2},r2:{r4:1},r3:{r4:1},r4:{None:0}} self.failUnless(r5.distance_vector.dest_via_nbors == r5_table)
def create(switch_type=FakeEntity, host_type=FakeEntity, n=2): RIPRouter.create('A') RIPRouter.create('B') FakeEntity.create('C', {A: 1}, {}) topo.link(A, B) topo.link(B, C)
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): RIPRouter.create('A') RIPRouter.create('B') FakeEntity.create('C', {A: 1}, {}) topo.link(A, B) topo.link(B, C)
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): global expectedUpdate1 global expectedSender1 global waittime print "Creating routers..." RIPRouter.create('A') RIPRouter.create('B') RIPRouter.create('C') RIPRouter.create('D') RIPRouter.create('E') RIPRouter.create('F') RIPRouter.create('G') RIPRouter.create('H') RIPRouter.create('I') RIPRouter.create('J') createExpectedDict() FakeEntity.create('Z', expectedUpdate1, expectedSender1, {}) ''' print "Case 1: A-B-Z" topo.link(A, B) #A - B - Z topo.link(B, Z) time.sleep(waittime) if(failed): return print "Case 2: A B-Z" topo.unlink(A, B) #A B - Z time.sleep(waittime) if(failed): return print "Case 3: A-B Z" topo.unlink(B, Z) time.sleep(waittime/2) topo.link(A, B) #A - B Z time.sleep(waittime) if(failed): return print "Case 4: A-B-C-D-E-Z" topo.link(E, Z) #A - B - C - D - E - Z topo.link(B, C) topo.link(C, D) time.sleep(waittime) topo.link(D, E) time.sleep(waittime) if(failed): return print "Case 5: Circle(A,E)-Z" topo.link(E, A) #A - B - C - D - E - Z time.sleep(waittime) # \_____________/ if(failed): return print "Case 6: Clique(A,E)-Z" #topo.link(A, B) topo.link(A, C) topo.link(A, D) #topo.link(A, E) #topo.link(B, C) topo.link(B, D) # ---A--- topo.link(B, E) # / / \ \ time.sleep(waittime) # B--|---|-E -- Z #topo.link(C, D) # \ |/ \| / topo.link(C, E) # C-----D #topo.link(D, E) # Clique time.sleep(waittime) if(failed): return print "Case 7: Centralize(A,{B,C,D,E,Z}" #topo.unlink(A, B) #topo.unlink(A, C) #topo.unlink(A, D) #topo.unlink(A, E) topo.unlink(E, Z) topo.unlink(B, C) topo.unlink(B, D) # Z topo.unlink(B, E) # | topo.unlink(C, D) # B -- A -- E topo.unlink(C, E) # / \ topo.unlink(D, E) # C D time.sleep(waittime) topo.link(A, Z) time.sleep(waittime) if(failed): return print "Case 8: Centralize(A,Circle(B-E,Z))" topo.link(B, C) topo.link(C, D) topo.link(D, E) time.sleep(waittime) # ---Z--- topo.link(E, Z) # / | \ time.sleep(waittime/2) # B -- A -- E topo.link(Z, B) # \ / \ / time.sleep(waittime) # C-----D if(failed): return print "Case 9: A-B-Branch(Z, C-D-E, F-G)" topo.unlink(A, Z) topo.unlink(E, Z) topo.unlink(B, Z) #topo.unlink(A, B) topo.unlink(A, C) topo.unlink(A, D) topo.unlink(A, E) topo.unlink(B, C) topo.link(F, G) #print "REM" #topo.unlink(C, D) #topo.unlink(D, E) time.sleep(waittime) topo.link(B, Z) time.sleep(waittime/2) Z.send_specific_announce({F: 1, G: 2, C: 1, D: 2, E: 3}) time.sleep(waittime/2) topo.unlink(B, Z) topo.link(Z, C) time.sleep(waittime/2) Z.send_specific_announce({F: 1, G: 2, B: 1, A: 2}) time.sleep(waittime/2) # topo.unlink(C, Z) # F - G topo.link(Z, F) # | time.sleep(waittime/2) # A - B - Z - C - D - E Z.send_specific_announce({B: 1, A: 2, C: 1, D: 2, E: 3}) time.sleep(waittime/2) topo.unlink(F, G) Z.send_specific_announce({B: 1, A: 2, C: 1, D: 2, E: 3, G: 100}) #print "NIM" time.sleep(waittime/2) topo.link(F, G) time.sleep(waittime) if(failed): return ''' print "Case 10: EShaped(ABC,EHD,FGZ)" #topo.unlink(B, Z) #topo.unlink(Z, C) topo.unlink(Z, F) #topo.unlink(A, B) topo.unlink(C, D) topo.unlink(D, E) #topo.unlink(F, G) topo.link(B, C) topo.link(A, E) # A ------B------C topo.link(E, H) # | topo.link(H, D) # E ------H------D topo.link(A, F) # | time.sleep(waittime) # F-------G------Z topo.link(G, Z) time.sleep(waittime/2) topo.disconnect(H) time.sleep(waittime) if(failed): return A.remove() B.remove() C.remove() D.remove() E.remove() F.remove() G.remove() H.remove() I.remove() J.remove() Z.remove()
def testImplicitRemoval(self): r1 = RIPRouter() r1.name = "r1" r2 = RIPRouter() r2.name = "r2" r3 = RIPRouter() r3.name = "r3" r4 = RIPRouter() r4.name = "r4" r5 = RIPRouter() r5.name = "r5" r6 = RIPRouter() r6.name = "r6" r1.neighbor_ports = {r2:2,r3:3} r1.distance_vector.dest_via_nbors = {r2:{None:0},r3:{None:0},r4:{r2:1,r3:1},r5:{r2:3},r6:{r2:5}} packet = RoutingUpdate() packet.src = r2 packet.paths = {r1:1,r4:1} r1.handle_rx(packet, 2) self.failUnless(r1.distance_vector.dest_via_nbors == {r2:{None:0},r3:{None:0},r4:{r3:1,r2:1}})
def create(switch_type=FakeEntity, host_type=FakeEntity, n=2): RIPRouter.create("A") RIPRouter.create("B") FakeEntity.create("C", {A: 1}, {}) topo.link(A, B) topo.link(B, C)
def create (switch_type = FakeEntity, host_type = FakeEntity, n = 2): RIPRouter.create('A') BasicHost.create('C') FakeEntity.create('B', {C: 100}, {C: 1}) topo.link(A, B)
def create(switch_type=FakeEntity, host_type=FakeEntity, n=2): RIPRouter.create("A") BasicHost.create("C") FakeEntity.create("B", {C: 100}, {C: 1}) topo.link(A, B)