示例#1
0
文件: tests.py 项目: alexgtom/ee122
    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)
示例#3
0
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)
示例#4
0
 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 == {})
示例#5
0
 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})
示例#6
0
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)
示例#7
0
 def __init__(self):
     RIPRouter.__init__(self)
     self.convergencedTable = None
     self.upDone = False
     self.downDone = False
示例#8
0
文件: tsao.py 项目: alexgtom/ee122
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()
示例#9
0
    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)
示例#10
0
 def __init__(self):
     RIPRouter.__init__(self)
     self.convergencedTable = None
     self.upDone = False
     self.downDone = False
示例#11
0
 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)
示例#14
0
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()
示例#15
0
 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}})
示例#16
0
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)
示例#17
0
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)