Esempio n. 1
0
 def fsmStateRecipientEnterStateEstablished(self, event):
     self.lastchangetime = time.time()
     self.SendHalMsg(L2tpv3Session.ADD_SESSION)
     self.updateSessionRecord()
     # if multicast session ,send mcast join
     for avp in self.avps_icrq:
         if isinstance(avp, L2tpv3CableLabsAvps.DepiRemoteMulticastJoin):
             address = (self.connection.localAddr, avp.src_ip, avp.group_ip,
                        0)
             try:
                 mcast = Mcast.findMcastInstance(address=address)
                 if mcast is None:
                     mcast = Mcast(address=address)
                 mcast.join(session=(self.connection.localAddr,
                                     self.connection.remoteAddr,
                                     self.localSessionId,
                                     self.remoteSessionId))
                 self.mcast.append(address)
                 if mcast.status != Mcast.JOINED:
                     self.logger.warn(
                         "Session [%d, %d] mcast join failed %s:",
                         self.localSessionId, self.remoteSessionId, address)
             except Exception as e:
                 self.logger.warn(
                     "Session [%d, %d] mcast join failed %s: %s",
                     self.localSessionId, self.remoteSessionId, address,
                     str(e))
Esempio n. 2
0
    def test_Mcast_error(self):
        session = ("127.0.0.1", "127.0.0.1", 1233, 12323)
        try:
            mcast = Mcast(address=("127.0.0.8", "5.5.5.1", "229.1.1.255", 0))
        except Exception as e:
            self.assertIsInstance(e, McastException)
        try:
            mcast = Mcast(None)
        except Exception as e:
            self.assertIsInstance(e, McastException)
        try:
            mcast = Mcast(address=("127.0.0.1", "5.5.5.1"))
        except Exception as e:
            self.assertIsInstance(e, McastException)

        try:
            mcast = Mcast.findMcastInstance(address=("127.0.0.1", "5.5.5.1"))
        except McastException as e:
            self.assertEqual(
                str(e), "init address %s is not expected" % str(
                    ("127.0.0.1", "5.5.5.1")))

        mcast = Mcast(address=("127.0.0.1", "5.5.5.1", "229.1.1.255", 1))
        mcast.join(session)
        self.assertEqual(mcast.status, Mcast.NOT_JOINED)

        mcast = Mcast(address=("127.0.0.1", "5.5.5.1", "229.1.1.255", 60002))
        mcast.join(session)
        self.assertEqual(mcast.status, Mcast.JOINED)
        mcast.leave(session)
Esempio n. 3
0
    def fsmStateRecipientLeaveStateEstablished(self, event):
        self.SendHalMsg(L2tpv3Session.DEL_SESSION)
        # if multicast session ,send mcast leave

        for avp in self.avps_cdn:
            if isinstance(avp, L2tpv3CableLabsAvps.DepiRemoteMulticastLeave):
                address = (self.connection.localAddr, avp.src_ip, avp.group_ip,
                           0)
                if address in self.mcast:
                    self.mcast.remove(address)
                    try:
                        mcast = Mcast.findMcastInstance(address=address)
                        if mcast is not None:
                            mcast.leave(session=(self.connection.localAddr,
                                                 self.connection.remoteAddr,
                                                 self.localSessionId,
                                                 self.remoteSessionId))
                    except Exception as e:
                        self.logger.warn(
                            "Session [%d, %d] mcast join failed %s: %s",
                            self.localSessionId, self.remoteSessionId, address,
                            str(e))
                else:
                    self.logger.warn(
                        "mcast address[%s] is not joined in session[0x%x]",
                        address, self.localSessionId)

        while len(self.mcast):
            address = self.mcast.pop(0)
            self.logger.warn(
                "mcast address[%s] is not in session[0x%x] cdn avps",
                str(address), self.localSessionId)
            try:
                mcast = Mcast.findMcastInstance(address=address)
                if mcast is not None:
                    mcast.leave(session=(self.connection.localAddr,
                                         self.connection.remoteAddr,
                                         self.localSessionId,
                                         self.remoteSessionId))
            except Exception as e:
                self.logger.warn("Session [%d, %d] mcast join failed %s: %s",
                                 self.localSessionId, self.remoteSessionId,
                                 address, str(e))
Esempio n. 4
0
    def test_join_1(self):
        session = ("127.0.0.1", "127.0.0.1", 1233, 12323)
        address_1 = ("127.0.0.1", "5.5.5.1", "229.1.1.255", 0)
        address_2 = ("127.0.0.1", "7.5.5.2", "229.1.1.255", 0)
        address_3 = ("127.0.0.1", "3.5.5.2", "228.1.1.255", 0)

        mcast = Mcast(address=address_1)
        self.assertIn(("127.0.0.1", "5.5.5.1", "229.1.1.255", 0),
                      Mcast.McastDb.keys())
        self.assertIn(mcast, Mcast.McastDb.values())
        mcast.rejoin()
        self.assertEqual(mcast.status, Mcast.NOT_JOINED)
        mcast.join(session)
        self.assertEqual(mcast.status, Mcast.JOINED)
        time.sleep(0.1)
        # no operation in joined status
        mcast.join(session)
        self.assertEqual(mcast.status, Mcast.JOINED)

        mcast_3 = Mcast(address=address_3)
        self.assertIn(address_3, Mcast.McastDb.keys())
        time.sleep(0.1)
        # no operation in joined status
        mcast_3.join(session)
        self.assertEqual(mcast_3.status, Mcast.JOINED)

        try:
            mcast_test = Mcast.findMcastInstance(None)
        except McastException as e:
            pass

        mcast_test = Mcast.findMcastInstance(address_1)

        self.assertEqual(mcast_test.status, Mcast.JOINED)
        self.assertEqual(mcast_test, mcast)

        try:
            mcast = Mcast(address=address_1)
        except McastException as e:
            self.assertEqual(
                str(e),
                "init address %s was already initiated" % str(address_1))

        mcast_test = Mcast.findMcastInstance(address_2)
        self.assertIsNone(mcast_test)

        mcast_2 = Mcast(address=address_2)
        self.assertIn(("127.0.0.1", "5.5.5.1", "229.1.1.255", 0),
                      Mcast.McastDb.keys())
        self.assertIn(mcast_2, Mcast.McastDb.values())
        mcast_2.join(session)
        self.assertEqual(mcast_2.status, Mcast.JOINED)

        time.sleep(0.1)
        mcast_3.close()
        mcast.close()
        self.assertEqual(mcast.status, Mcast.LEAVED)
        time.sleep(1)
        self.assertNotIn(("127.0.0.1", "5.5.5.1", "229.1.1.255", 0),
                         Mcast.McastDb.keys())
        self.assertNotIn(Mcast, Mcast.McastDb.values())
        for key in Mcast.McastDb.keys():
            Mcast.McastDb[key].close()
        time.sleep(1)
        self.assertEqual(len(Mcast.McastDb), 0)