Example #1
0
    def testReceiveUnnormalPacket(self):
        self.logger.info("start testing...")
        self.logger.info("************************************************")
        self.logger.info("***          ReceivePacket:unnormal          ***")
        self.logger.info("************************************************")
        # struct unnormal ns/nr
        msgAvp = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        assignedAvp = AssignedControlConnectionID(self.connection.localConnID)
        sccrq = L2tpv3ControlPacket(666,
                                    100000,
                                    100000,
                                    avps=(msgAvp, assignedAvp))
        # before ReceivePacket, the nr is not change
        lastNr = self.transport.ackNr
        self.transport.ReceivePacket(
            sccrq, (self.connection.remoteAddr, self.connection.localConnID))
        # after Receive the unnormal packets, the nr did't change
        self.assertEqual(self.transport.ackNr, lastNr)

        # struct duplicated packet
        zlb = ControlMessageAVP(ControlMessageAVP.ZLB)
        hostName = Hostname("TestAVP")
        avps = []
        pkt1 = L2tpv3ControlPacket(self.connection.remoteConnID, 0, 0, avps)
        pkt2 = L2tpv3ControlPacket(self.connection.remoteConnID, 0, 0, avps)
        pkts = [pkt1, pkt2]

        # before ReceivePacket, the nr is not change
        lastNr = self.transport.ackNr
        for pkt in pkts:
            self.transport.ReceivePacket(pkt, None)
        # after Receive the unnormal packets, the nr did't change
        self.assertEqual(self.transport.ackNr, lastNr)
Example #2
0
    def test_ReceiveCDN(self):
        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)

        # receive icrq, send icrp, state becomes to waitCtlConn
        icrq = L2tpv3ControlPacket.decode(self.icrq_buf)
        icrq.SetPktConnection(self.conn)
        icrq.SetPktSession(session_receiver)
        icrq.Connection.remoteConnID = 1
        icrp = session_receiver.ReceiveICRQ(icrq)
        print icrp
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateWaitConn)

        # receive iccn, , state becomes to established
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp1]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateEstablished)

        # receive cdn message, clean up, state becomes to idle
        avp = ControlMessageAVP(ControlMessageAVP.CDN)
        avp_Mcast_leave = L2tpv3CableLabsAvps.DepiRemoteMulticastLeave(
            ("5.6.7.8", "229.1.1.255"))
        avps = [avp, avp_Mcast_leave]
        cdn = L2tpv3ControlPacket(0, 0, 1, avps)
        session_receiver.ReceiveCDN(cdn)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateIdle)
Example #3
0
    def testHandlePkt_SCCCN(self):
        """Handle control packet: SCCCN.

        Function: recvSCCCN.

        :return:

        """
        conn_address = '127.11.2.9'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.11'
        conn = L2tpConnection(10, 10, conn_address, local_addr)

        # Receive a good SCCCN, return NULL
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCCN)
        avp2 = AssignedControlConnectionID(10)
        avps = [avp1, avp2]
        scccn = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        ret = conn.HandlePkt(scccn)
        self.assertIsNotNone(ret)
        self.assertIsInstance(ret, L2tpv3ACK)

        # Receive a bad SCCCN, return stopCCN
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)
        avp3 = CallSerialNumber()
        avps.append(localAvp)
        avps.append(avp3)
        scccn = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        ret = conn.HandlePkt(scccn)
        self.assertIsNotNone(ret)
        self.assertIsInstance(ret, L2tpv3ACK)

        # Recovery tunnel receive SCCCN
        recover_conn = L2tpConnection(100, 100, conn_address, local_addr)
        recover_conn.isInRecovery = True
        conn.recoverConnection = recover_conn
        conn.isRecoveryTunnel = True
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCCN)
        avp2 = AssignedControlConnectionID(10)
        avps = [avp1, avp2]
        scccn = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        ret = conn.HandlePkt(scccn)
        self.assertFalse(recover_conn.isInRecovery)

        conn.CloseConnection()
Example #4
0
    def test_isFSR(self):
        # SCCRQ
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        self.assertFalse(pkt.isFSR())

        # FSR
        avp1 = ControlMessageAVP(ControlMessageAVP.FSR)
        avp2 = FailoverSessionState(1, 2)
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        self.assertTrue(pkt.isFSR())
Example #5
0
    def test_isRecoveryTunnelSCCRQ(self):
        # Normal SCCRQ
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        self.assertEqual(pkt.isRecoveryTunnelSCCRQ(), (False, 0, 0))

        # RecoveryTunnelSCCRQ
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avp3 = TunnelRecovery(1, 2)
        avps = [avp1, avp2, avp3]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        self.assertTrue(pkt.isRecoveryTunnelSCCRQ())
Example #6
0
    def test_recvSLI(self):
        conn_address = '127.11.2.17'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.19'
        conn = L2tpConnection(18, 18, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)

        avp1 = ControlMessageAVP(ControlMessageAVP.SLI)
        avp2 = CallSerialNumber()
        avps = [avp1, avp2]
        avps.append(localAvp)
        sli = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(sli.length, 40)
        self.assertEqual(sli.avps[0].messageType, ControlMessageAVP.SLI)

        ret = conn.recvSLI(sli)
        self.assertIsNone(ret)
        # Abnormal SLI message
        avps = list()
        sli = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = conn.HandlePkt(sli)
        self.assertIsNone(ret)
        conn.CloseConnection()
Example #7
0
    def test_recvICRP(self):
        conn_address = '127.11.2.15'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.17'
        conn = L2tpConnection(16, 16, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)

        avp = ControlMessageAVP(ControlMessageAVP.ICRP)
        avps = [avp]
        avps.append(localAvp)
        icrp = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(icrp.length, 30)
        self.assertEqual(icrp.avps[0].messageType, 11)

        ret = conn.HandlePkt(icrp)
        self.assertIsNone(ret)
        conn.CloseConnection()
Example #8
0
    def test_recvCDN(self):
        conn_address = '127.11.2.14'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.16'
        conn = L2tpConnection(15, 15, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)

        avp = ControlMessageAVP(ControlMessageAVP.CDN)
        avps = [avp]
        avps.append(localAvp)
        cdn = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(cdn.length, 30)
        self.assertEqual(cdn.avps[0].messageType, 14)

        conn.HandlePkt(cdn)
        self.assertEqual(conn.fsm.current, 'idle')
        conn.CloseConnection()
Example #9
0
    def test_recvICCN(self):
        conn_address = '127.11.2.13'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.15'
        conn = L2tpConnection(14, 14, conn_address, local_addr)
        session = L2tpv3Session(3, 4, 'receive', conn)
        conn.addSession(session)

        # localSessionID = session.remoteSessionId
        remoteSessionID = session.localSessionId
        # localAvp = LocalSessionID(localSessionID)
        remoteAvp = RemoteSessionID(remoteSessionID)

        # Normal case, session is not none
        avp = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp]
        avps.append(remoteAvp)
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(iccn.length, 30)
        self.assertEqual(iccn.avps[0].messageType, 12)
        ret = conn.HandlePkt(iccn)
        self.assertIsNotNone(ret)
        self.assertIsInstance(ret, L2tpv3ACK)

        conn.CloseConnection()
Example #10
0
    def testCreateControlPacket(self):
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(0x1234, 0, 1, avps)

        print pkt
Example #11
0
    def testHandlePkt_FirstAvpIsNotControlAvp(self):
        """Handle control packet: the first avp is not control avp.

        :return:

        """
        conn_address = '127.11.2.4'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.6'
        conn = L2tpConnection(5, 5, conn_address, local_addr)
        avp1 = Hostname("TestAVP")
        avp2 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp3 = RouterID(0)
        avp4 = AssignedControlConnectionID(1)
        avp5 = PseudowireCapList(())
        avps = [avp1, avp2, avp3, avp4, avp5]
        sccrq = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        ret = conn.HandlePkt(sccrq)
        self.assertIsNone(ret)
        conn.CloseConnection()
        self.assertIsNone(ret)
Example #12
0
    def testGenerateBuffer(self):
        avp1 = ControlMessageAVP(ControlMessageAVP.ZLB)
        avp2 = Hostname("TestAVP")
        avps = []
        pkt = L2tpv3ControlPacket(0x1234, 0, 1, avps)

        print pkt
Example #13
0
    def test_ReceiveSLI(self):
        avp1 = ControlMessageAVP(ControlMessageAVP.SLI)
        avp2 = LocalSessionID(1)
        avp3 = CallSerialNumber(12)

        # Can't handle AVP in SLI , return CDN
        avps = [avp1, avp2, avp3]
        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)
        sli = L2tpv3ControlPacket(0, 0, 1, avps)
        sli.SetPktConnection(self.conn)
        sli.Connection.remoteConnID = 1
        ret = session_receiver.ReceiveSLI(sli)
        self.assertIsNone(ret)

        # AVP length is 1, return None
        avps_none = [avp1]
        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)
        sli = L2tpv3ControlPacket(0, 0, 1, avps_none)
        sli.SetPktConnection(self.conn)
        sli.Connection.remoteConnID = 1
        ret = session_receiver.ReceiveSLI(sli)
        self.assertIsNone(ret)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateIdle)

        L2tpv3GlobalSettings.MustAvpsCheck = True
        ret = session_receiver.ReceiveSLI(sli)
        sli.avps.append(avp2)
        avp_fake = fake_avp()
        sli.avps.append(avp_fake)
        ret = session_receiver.ReceiveSLI(sli)
        L2tpv3GlobalSettings.MustAvpsCheck = False
        self.assertIsInstance(ret, L2tpv3CDN)
        ret = session_receiver.ReceiveSLI(sli)
        self.assertIsInstance(ret, L2tpv3CDN)
Example #14
0
    def test_ReceiveICRP(self):
        avp1 = ControlMessageAVP(ControlMessageAVP.ICRP)
        avp2 = LocalSessionID(1)
        avps = [avp1, avp2]
        icrp = L2tpv3ControlPacket(0, 0, 1, avps)

        # fsm is L2tpv3SessionRecipientFsm
        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)
        session_receiver.ReceiveICRP(icrp)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateIdle)

        # fsm is L2tpv3SessionSenderFsm, receive a bad icrp, return cdn
        session_sender = L2tpv3Session(1, 2, 'sender', self.conn)
        cdn = session_sender.ReceiveICRP(icrp)
        self.assertEqual(cdn.avps[0].messageType, ControlMessageAVP.CDN)

        # fsm is L2tpv3SessionSenderFsm, receive a good icrp, return iccn
        icrp.SetPktSession(session_sender)
        iccn = session_sender.ReceiveICRP(icrp)
        self.assertEqual(iccn.avps[0].messageType, ControlMessageAVP.ICCN)

        L2tpv3GlobalSettings.MustAvpsCheck = True
        ret = session_sender.ReceiveICRP(icrp)
        L2tpv3GlobalSettings.MustAvpsCheck = False
        self.assertIsInstance(ret, L2tpv3CDN)

        session_sender = L2tpv3Session(1, 0, 'sender', self.conn)
        icrp.SetPktSession(session_sender)
        icrp.avps.remove(avp2)
        iccn = session_sender.ReceiveICRP(icrp)
        self.assertIsInstance(ret, L2tpv3CDN)
Example #15
0
    def test_recvHELLO(self):
        conn_address = '127.11.2.16'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.18'
        conn = L2tpConnection(17, 17, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)

        avp = ControlMessageAVP(ControlMessageAVP.HELLO)
        avps = [avp]
        avps.append(localAvp)
        hello = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(hello.length, 30)
        self.assertEqual(hello.avps[0].messageType, 6)

        zlb = conn.HandlePkt(hello)
        self.assertEqual(zlb.length, 12)
        conn.CloseConnection()
Example #16
0
 def testTimetickCallback(self):
     self.logger.info("start testing...")
     self.logger.info("************************************************")
     self.logger.info("***           TimetickCallback:normal        ***")
     self.logger.info("************************************************")
     connection = L2tpv3Connection.L2tpConnection(
         1666, 1666,
         L2tpv3GlobalSettings.L2tpv3GlobalSettings.LocalIPAddress)
     # send a SCCRQ form remote
     msgAvp = ControlMessageAVP(ControlMessageAVP.SCCRQ)
     assignedAvp = AssignedControlConnectionID(connection.localConnID)
     sccrq = L2tpv3ControlPacket(1666, avps=(msgAvp, assignedAvp))
     connection.transport.SendPacket(
         sccrq, (connection.remoteAddr, connection.localConnID))
     # before timetick callback, the value nr/ns
     # lastNr = transport.ackNr
     lastNs = connection.transport.ns
     connection.transport.sendTimeout = 0
     connection.transport.resendTimes = 1
     connection.transport.TimetickCallback()
     # after timetick callback, need to send the stopccn, sothe ns +1
     self.assertEqual(lastNs, connection.transport.ns)
     connection.transport.sendTimeout = 0
     connection.transport.resendTimes = 0.5
     connection.transport.TimetickCallback()
     self.assertEqual(connection.connection_status,
                      L2tpv3Connection.L2tpConnection.CLOSED)
Example #17
0
 def test_GetLocalConnectionID(self):
     avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
     avp2 = Hostname("TestAVP")
     avps = [avp1, avp2]
     pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
     LocalConnectionID = pkt.GetLocalConnectionID()
     self.assertEqual(LocalConnectionID, 1)
Example #18
0
    def test_resetTransport(self):
        conn_address = '127.11.2.33'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.35'
        conn = L2tpConnection(18, 18, conn_address, local_addr)
        avp = ControlMessageAVP(ControlMessageAVP.HELLO)
        avps = [avp]
        hello = L2tpv3ControlPacket(0, 0, 1, avps)
        conn.transport.sendList.append({
            "time": 1,
            "pkt": hello,
            "sendTimes": 0,
        })
        conn.transport.receiveWindow.add(hello)
        conn.transport.ackNr = 105
        conn.transport.ns = 56
        conn.resetTransport()
        self.assertFalse(conn.transport.sendList)
        self.assertFalse(conn.transport.receiveWindow)
        self.assertEqual(conn.transport.ackNr, 0)
        self.assertEqual(conn.transport.ackNr, 0)
        conn.CloseConnection()
Example #19
0
    def test_recvFSR(self):
        """Handle control packet: FSR.

        Function: recvFSR.

        :return:

        """
        conn_address = '127.11.2.29'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.31'
        conn = L2tpConnection(18, 18, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)

        avp1 = ControlMessageAVP(ControlMessageAVP.FSR)
        avp2 = FailoverSessionState(session.remoteSessionId, session.localSessionId)
        avps = [avp1, avp2]
        fsr = L2tpv3ControlPacket(0, 0, 1, avps)

        ret = conn.HandlePkt(fsr)
        self.assertIsNone(ret)
        conn.CloseConnection()
Example #20
0
    def test_recvFSQ(self):
        """Handle control packet: FSQ.

        Function: recvFSQ.

        :return:

        """
        conn_address = '127.11.2.28'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = True

        local_addr = '127.11.2.30'
        conn = L2tpConnection(18, 18, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)

        avp1 = ControlMessageAVP(ControlMessageAVP.FSQ)
        avp2 = FailoverSessionState(session.remoteSessionId, session.localSessionId)
        avp3 = FailoverSessionState(4, 5)
        avps = [avp1, avp2, avp3]
        fsq = L2tpv3ControlPacket(0, 0, 1, avps)

        fsr = conn.HandlePkt(fsq)
        self.assertIsNotNone(fsr)
        self.assertEqual(fsr.avps[1].sessionID, 1)
        self.assertEqual(fsr.avps[1].remoteSessionID, 2)
        self.assertEqual(fsr.avps[2].sessionID, 0)
        self.assertEqual(fsr.avps[2].remoteSessionID, 4)
        conn.CloseConnection()
Example #21
0
 def test_encode(self):
     avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
     avp2 = Hostname("TestAVP")
     avps = [avp1, avp2]
     pkt = L2tpv3ControlPacket(0x1234, 0, 1, avps,
                               "testL2tpv3ControlPacket")
     pkt.encode(False)
     pkt.encode(True)
Example #22
0
    def test_ControlMessageAVP(self):

        # messageType is in ControlMessageAVP.ControlMesagedSet and attrValue
        # is None
        self.controlAvp = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        self.assertEqual(self.controlAvp.messageType, 1)

        # messageType is in ControlMessageAVP.ControlMesagedSet and attrValue
        # is not None
        self.controlAvp = ControlMessageAVP(ControlMessageAVP.SCCRP, "qwer7ss")
        self.assertEqual(self.controlAvp.messageType, 2)

        # messageType is Not in ControlMessageAVP.ControlMesagedSet
        try:
            self.controlAvp = ControlMessageAVP(3303)
        except Exception as e:
            self.assertEqual(str(e), "message type error")
Example #23
0
    def testUnnormalTimetickCallback(self):
        self.logger.info("start testing...")
        self.logger.info("************************************************")
        self.logger.info("***          TimetickCallback:unnormal       ***")
        self.logger.info("************************************************")
        connection = L2tpv3Connection.L2tpConnection(
            1888, 1888,
            L2tpv3GlobalSettings.L2tpv3GlobalSettings.LocalIPAddress)
        # send a zlb form remote
        msgAvp = ControlMessageAVP(ControlMessageAVP.ZLB)
        assignedAvp = AssignedControlConnectionID(connection.localConnID)
        zlb = L2tpv3ControlPacket(1888, avps=(msgAvp, assignedAvp))
        connection.transport.SendPacket(
            zlb, (connection.remoteAddr, connection.localConnID))

        # send a ZLB form remote, before timetick callback is True
        lastNeedSendZlb = connection.transport.needSendZlb = True

        connection.transport.sendZlbTimeout = 0
        connection.transport.TimetickCallback()
        # after send ZLB, the needSendZlb change to False
        self.assertNotEqual(connection.transport.needSendZlb, lastNeedSendZlb)
        connection.CloseConnection()

        connection = L2tpv3Connection.L2tpConnection(
            2000, 2000,
            L2tpv3GlobalSettings.L2tpv3GlobalSettings.LocalIPAddress)
        # send a zlb form remote
        msgAvp = ControlMessageAVP(ControlMessageAVP.ZLB)
        assignedAvp = AssignedControlConnectionID(connection.localConnID)
        zlb = L2tpv3ControlPacket(2000, avps=(msgAvp, assignedAvp))
        connection.transport.SendPacket(
            zlb, (connection.remoteAddr, connection.localConnID))
        connection.transport.lastTimetick = time.time() - 60
        sendListTime = connection.transport.sendList[0]["time"]
        connection.transport.TimetickCallback()
        # after timetick callback, this time should be updated
        self.assertTrue(
            connection.transport.sendList[0]["time"] > sendListTime)
        """connection.transport.lastTimetick = time.time() + 60
        sendListTime = connection.transport.sendList[0]["time"]
        connection.transport.TimetickCallback()
        # after timetick callback, this time should be updated
        self.assertFalse(connection.transport.sendList[0]["time"] > sendListTime)"""
        connection.CloseConnection()
Example #24
0
    def test_GetRemoteConnectionID(self):

        # Abnormal case: can't get RemoteConnectionID from Avps
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        RemoteConnectionID = pkt.GetRemoteConnectionID()
        self.assertIsNone(RemoteConnectionID[0])
        self.assertFalse(RemoteConnectionID[1])

        # Normal case: get RemoteConnectionID from Avps
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = AssignedControlConnectionID(1)
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(1, 0, 1, avps, "testL2tpv3ControlPacket")
        RemoteConnectionID = pkt.GetRemoteConnectionID()
        self.assertEqual(RemoteConnectionID[0], 1)
        self.assertTrue(RemoteConnectionID[1])
Example #25
0
    def test_recvStopCCN(self):
        conn_address = '127.11.2.19'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.21'
        conn = L2tpConnection(20, 20, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)
        # receive sccrq, new state->wait-ctl-conn
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = AssignedControlConnectionID(10)
        avps = [avp1, avp2]
        sccrq = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        sccrp = conn.HandlePkt(sccrq)
        self.assertEqual(
            conn.fsm.current, L2tpv3ConnectionFsm.StateWaitCtlConn)

        # receive SCCCN, new state->established
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCCN)
        avp2 = AssignedControlConnectionID(10)
        avps = [avp1, avp2]
        scccn = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        ret = conn.HandlePkt(scccn)
        self.assertEqual(
            conn.fsm.current, L2tpv3ConnectionFsm.StateEstablished)

        # receive a stopCCN, new state -> idle
        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)

        avp = ControlMessageAVP(ControlMessageAVP.StopCCN)
        avps = [avp]
        avps.append(localAvp)
        stopCCN = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(stopCCN.length, 30)
        self.assertEqual(stopCCN.avps[0].messageType, 4)

        ret = conn.HandlePkt(stopCCN)
        self.assertEqual(conn.fsm.current, L2tpv3ConnectionFsm.StateIdle)
Example #26
0
    def testCreatePacketFromBuf(self):
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avps = [avp1, avp2]
        pkt = L2tpv3ControlPacket(0x1234, 0, 1, avps)

        buf = pkt.encode()

        pkt1 = L2tpv3ControlPacket.decode(buf)
        print pkt1
Example #27
0
    def test__findSession(self):
        """Handle control packet: ICRQ, session not exist.

        :return: none

        """
        conn_address = '127.11.2.20'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.22'
        conn = L2tpConnection(21, 21, conn_address, local_addr)
        session = L2tpv3Session(1, 2, 'receive', conn)
        conn.addSession(session)

        # session1 and session2 are None, return none
        localAvp = LocalSessionID(3)
        remoteAvp = RemoteSessionID(4)
        avp = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp, localAvp, remoteAvp]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        self.assertEqual(iccn.length, 40)
        self.assertEqual(iccn.avps[0].messageType, ControlMessageAVP.ICCN)
        self.assertEqual(iccn.avps[1].sessionID, 3)
        ret = conn._findSession(iccn)
        self.assertIsNone(ret)

        # session1 is not none and session2 is None, return session1
        localAvp = LocalSessionID(2)
        remoteAvp = RemoteSessionID(4)
        avp = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp, localAvp, remoteAvp]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        session1 = conn._findSession(iccn)
        self.assertIsNotNone(session1)
        conn.CloseConnection()
Example #28
0
    def test_sendSLI(self):
        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)

        # receive icrq, send icrp, state becomes to waitCtlConn
        icrq = L2tpv3ControlPacket.decode(self.icrq_buf)
        icrq.SetPktConnection(self.conn)
        icrq.SetPktSession(session_receiver)
        icrq.Connection.remoteConnID = 1
        icrp = session_receiver.ReceiveICRQ(icrq)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateWaitConn)

        # receive iccn, , state becomes to established
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp1]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        self.assertEqual(session_receiver.fsm.current,
                         L2tpv3SessionRecipientFsm.StateEstablished)

        # start test
        msg = L2tpv3Hal_pb2.t_l2tpSessionCircuitStatus()
        msg.status = False
        session_receiver.local_circuit_status = True
        session_receiver.ReceiveHalMsg(msg=msg)

        self.assertFalse(session_receiver.local_circuit_status)
        session_receiver.local_circuit_status = False
        session_receiver.ReceiveHalMsg(msg=msg)
        self.assertFalse(session_receiver.local_circuit_status)

        msg.status = True
        session_receiver.local_circuit_status = True
        session_receiver.ReceiveHalMsg(msg=msg)
        self.assertTrue(session_receiver.local_circuit_status)

        session_receiver.local_circuit_status = False
        session_receiver.ReceiveHalMsg(msg=msg)
        self.assertTrue(session_receiver.local_circuit_status)

        msg = L2tpv3Hal_pb2.t_l2tpSessionRsp()
        session_receiver.local_circuit_status = False
        msg.result = False
        session_receiver.ReceiveHalMsg(msg=msg)
        self.assertFalse(session_receiver.local_circuit_status)

        msg.result = True
        msg.req_data.circuit_status = True
        session_receiver.ReceiveHalMsg(msg=msg)
        self.assertTrue(session_receiver.local_circuit_status)
Example #29
0
    def test_ReceiveICCN(self):

        session_receiver = L2tpv3Session(1, 2, 'receiver', self.conn)

        # Abnormal case: receive a bad ICCN, return CDN
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avp2 = CallSerialNumber()
        avps = [avp1]
        avps.append(avp2)
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        self.assertIsNotNone(ret)
        self.assertIsInstance(ret, L2tpv3ACK)

        # Normal case: receive a good ICCN, return None
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp1]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        self.assertIsNotNone(ret)
        self.assertIsInstance(ret, L2tpv3ACK)

        # Normal case: receive a good ICCN, return None
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avp2 = fake_avp()
        avps = [avp1, avp2]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        self.assertIsInstance(ret, L2tpv3CDN)

        L2tpv3GlobalSettings.MustAvpsCheck = True
        avp1 = ControlMessageAVP(ControlMessageAVP.ICCN)
        avps = [avp1]
        iccn = L2tpv3ControlPacket(0, 0, 1, avps)
        ret = session_receiver.ReceiveICCN(iccn)
        L2tpv3GlobalSettings.MustAvpsCheck = False
        self.assertIsInstance(ret, L2tpv3CDN)
Example #30
0
    def testHandlePkt_SCCRQ(self):
        """Handle control packet: SCCRQ.

        Function: recvSCCRQ.

        :return:

        """
        conn_address = '127.11.2.7'
        global_dispatcher = Dispatcher()
        dispatcher = L2tpv3Dispatcher(
            global_dispatcher, conn_address, True, None)
        L2tpv3GlobalSettings.Dispatcher = dispatcher
        L2tpv3GlobalSettings.MustAvpsCheck = False

        local_addr = '127.11.2.9'
        conn = L2tpConnection(8, 8, conn_address, local_addr)

        # Receive a good SCCRQ, return SCCRP
        avp1 = ControlMessageAVP(ControlMessageAVP.SCCRQ)
        avp2 = Hostname("TestAVP")
        avp3 = RouterID(0)
        avp4 = AssignedControlConnectionID(1)
        avp5 = PseudowireCapList(())
        avps = [avp1, avp2, avp3, avp4, avp5]
        sccrq = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        sccrp = conn.HandlePkt(sccrq)

        self.assertEqual(sccrp.connectionID, 8)
        self.assertEqual(sccrp.length, 28)
        self.assertEqual(sccrp.avps[0].length, 8)
        self.assertEqual(conn.fsm.current,
                         L2tpv3ConnectionFsm.StateWaitCtlConn)
        # self.assertEqual(sccrp.avps[0].messageType, ControlMessageAVP.SCCRP)

        # Receive a bad SCCRQ, return stopCCN
        session = L2tpv3Session(1, 2, 'receiver', conn)
        conn.addSession(session)

        localSessionID = session.remoteSessionId
        localAvp = LocalSessionID(localSessionID)
        avps.append(localAvp)
        sccrp = L2tpv3ControlPacket(0x1234, 0, 1, avps)
        stopCCN = conn.HandlePkt(sccrp)
        self.assertEqual(stopCCN.length, 58)
        self.assertEqual(stopCCN.connectionID, 8)
        self.assertEqual(stopCCN.avps[0].length, 8)
        self.assertEqual(
            stopCCN.avps[0].messageType, ControlMessageAVP.StopCCN)