Beispiel #1
0
    def test_msg_dispatch_coreident_read(self):
        print("########test_msg_dispatch_null_coreident_read##########")
        try:
            self.process.send_ipc_msg('error')
        except SystemExit as e:
            self.assertEqual(e.code, EX_DATAERR)

        data_list = []
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        sub_tlv = seq.CcapCoreIdentification.add_new_repeated()
        seq.ipc_msg = None
        data_list.append(seq)

        self.process.hal_ipc.disconnected = False
        self.process.hal_ipc.clientID = '12345'
        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": 'tmp',
            "gcp_msg": "tmp",
            "req_data": data_list
        })
Beispiel #2
0
    def construct_eds_pkt_CcapCoreIdentification_AW(inital=CORE_STATE_INIT):
        seq = None
        # Set RCP sequence
        if inital == TestOrchestrator.CORE_STATE_INIT:
            seq = RCPSequence(gcp_msg_def.DataStructREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff,
                              rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE)
            ccap = seq.parent_gpb.CcapCoreIdentification.add()
            ccap.Index = 0
            ccap.IsPrincipal = True
            ccap.CoreMode = 1
            ccap.CoreId = 'CoreId'
            ccap.CoreIpAddress = '1.1.1.1'
            ccap.CoreName = 'CoreName'
            ccap.VendorId = 12
        elif inital == TestOrchestrator.CORE_STATE_CFG_COMPLETE:
            seq = RCPSequence(gcp_msg_def.DataStructREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
            ccap = seq.parent_gpb.CcapCoreIdentification.add()
            ccap.Index = 1
            ccap.InitialConfigurationComplete = True
        elif inital == TestOrchestrator.CORE_STATE_MOVE_TO_OPTIONAL:
            seq = RCPSequence(gcp_msg_def.DataStructREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
            ccap = seq.parent_gpb.CcapCoreIdentification.add()
            ccap.Index = 1
            ccap.MoveToOperational = True
        else:
            return

        rcp_msg = RCPMessage(gcp_msg_def.DataStructREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_IRA)
        rcp_msg.sequences.append(seq)

        gcp_msg = Message(gcp_msg_def.DataStructREQ)
        # TODO implement correct setting of message fields
        transaction_id = 0xffff
        gcp_msg.msg_fields.TransactionID.set_val(transaction_id)
        gcp_msg.msg_fields.Mode.set_val(0)
        gcp_msg.msg_fields.Port.set_val(11)
        gcp_msg.msg_fields.Channel.set_val(111)
        gcp_msg.msg_fields.VendorID.set_val(1111)
        gcp_msg.msg_fields.VendorIndex.set_val(254)

        gcp_msg.tlv_data.rcp_msgs.append(rcp_msg)

        pkt = RCPPacket()
        pkt.transaction_identifier = transaction_id
        pkt.protocol_identifier = RCP_PROTOCOL_ID
        pkt.unit_id = 0
        pkt.msgs.append(gcp_msg)

        return [pkt, gcp_msg]
Beispiel #3
0
    def test_fast_decode2(self):
        for _ in range(0, X):
            for buf in data_ira:
                rcp_message_id = rcp_tlv_def.RCP_MSG_TYPE_IRA
                rcp_seq = RCPSequence(gcp_msg_def.ManagementREQ,
                                      rcp_message_id, 0,
                                      rcp_tlv_def.RCP_OPERATION_TYPE_NONE)
                rcp_seq.buffer = buf
                parent_fmt = rcp_tlv_def.RCP_SEQ_RCP_MSG_TLV_SET_MAPPING[
                    rcp_message_id]
                parent_gpb = config()
                ret = rcp_seq._fast_decode2(parent_fmt, parent_gpb, 0,
                                            len(buf), 0)
                self.assertEqual(ret, gcp_object.GCPObject.DECODE_DONE)

            for buf in data_rex:
                rcp_message_id = rcp_tlv_def.RCP_MSG_TYPE_REX
                rcp_seq = RCPSequence(gcp_msg_def.ManagementREQ,
                                      rcp_message_id, 0,
                                      rcp_tlv_def.RCP_OPERATION_TYPE_NONE)
                rcp_seq.buffer = buf
                parent_fmt = rcp_tlv_def.RCP_SEQ_RCP_MSG_TLV_SET_MAPPING[
                    rcp_message_id]
                parent_gpb = config()
                ret = rcp_seq._fast_decode2(parent_fmt, parent_gpb, 0,
                                            len(buf), 0)
                self.assertEqual(ret, gcp_object.GCPObject.DECODE_DONE)
Beispiel #4
0
    def test_msg_with_tlvs_of_all_classes_only_subTLV(self):
        seq = RCPSequence(gcp_msg_def.NotifyError,
                          rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('ABC')
        msg = Message(gcp_msg_def.NotifyError)

        rcp_msg = RCPMessage(gcp_msg_def.NotifyError,
                             rcp_tlv_def.RCP_MSG_TYPE_NTF)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        msg.msg_fields.TransactionID.set_val(5)
        msg.msg_fields.ReturnCode.set_val(
            gcp_msg_def.GCP_RC_MESSAGE_FAILURE.rc)

        buf = msg.encode()
        self.assertIsNotNone(buf)
        buf_str = binascii.hexlify(buf)

        # C_RpdCapabilities_2 C2_RpdIdentification_19
        vendor_name_pattern = "010003414243"
        self.assertNotEqual(buf_str.find(vendor_name_pattern), -1)
Beispiel #5
0
    def setUp(self):
        create_db_conf()
        start_redis()
        RCPDB.DB_CFG_FILE = CONF_FILE
        setup_logging(("PROVISION", "GCP"), filename="provision_rcp.log")
        self.agent = RcpOverGcp()
        self.agent.ccap_cores['CORE-1234567890'] = {"mgr": "MGR-1234567890", }
        self.agent.rcp[('eth0', '1.1.1.1')] = {
            "status": self.agent.DOWN,
            "requester": ['CORE-1234567890', ],
            "lastChangeTime": 1,
        }

        path = "ipc:///tmp/rcp.sock"
        transport = Transport(
            path, Transport.PUSHSOCK, Transport.TRANSPORT_CLIENT)

        # Add the fsm to our internal database
        self.agent.mgrs["MGR-1234567890"] = {
            "transport": transport,
            "name": "RCP",
            "para": {},
            "path": path,
        }

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          1,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        self.agent.rcp_req_group[(1, '1.1.1.1')] = (seq, None, 'transaction_identifier', 'trans_id', time.time() - 5)
Beispiel #6
0
    def construct_eds_pkt_RpdGlobal():
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ)
        # Set RCP sequence
        ctrl = seq.parent_gpb.RpdGlobal.EvCfg.EvControl.add()
        ctrl.EvPriority = 1
        ctrl.EvReporting = 1

        rcp_msg = RCPMessage(gcp_msg_def.DataStructREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_IRA)
        rcp_msg.sequences.append(seq)

        gcp_msg = Message(gcp_msg_def.DataStructREQ)
        # TODO implement correct setting of message fields
        transaction_id = 0xffff
        gcp_msg.msg_fields.TransactionID.set_val(transaction_id)
        gcp_msg.msg_fields.Mode.set_val(0)
        gcp_msg.msg_fields.Port.set_val(11)
        gcp_msg.msg_fields.Channel.set_val(111)
        gcp_msg.msg_fields.VendorID.set_val(1111)
        gcp_msg.msg_fields.VendorIndex.set_val(254)

        gcp_msg.tlv_data.rcp_msgs.append(rcp_msg)

        pkt = RCPPacket()
        pkt.transaction_identifier = transaction_id
        pkt.protocol_identifier = RCP_PROTOCOL_ID
        pkt.unit_id = 0
        pkt.msgs.append(gcp_msg)

        return [pkt, gcp_msg]
Beispiel #7
0
    def construct_eds_pkt_ActivePrincipalCore():
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ)

        seq.parent_gpb.ActivePrincipalCore = '1.1.1.1'

        rcp_msg = RCPMessage(gcp_msg_def.DataStructREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_IRA)
        rcp_msg.sequences.append(seq)

        gcp_msg = Message(gcp_msg_def.DataStructREQ)
        # TODO implement correct setting of message fields
        transaction_id = 0xffff
        gcp_msg.msg_fields.TransactionID.set_val(transaction_id)
        gcp_msg.msg_fields.Mode.set_val(0)
        gcp_msg.msg_fields.Port.set_val(11)
        gcp_msg.msg_fields.Channel.set_val(111)
        gcp_msg.msg_fields.VendorID.set_val(1111)
        gcp_msg.msg_fields.VendorIndex.set_val(254)

        gcp_msg.tlv_data.rcp_msgs.append(rcp_msg)

        pkt = RCPPacket()
        pkt.transaction_identifier = transaction_id
        pkt.protocol_identifier = RCP_PROTOCOL_ID
        pkt.unit_id = 0
        pkt.msgs.append(gcp_msg)

        return [pkt, gcp_msg]
Beispiel #8
0
    def test_msg_with_tlvs_of_multi_core(self):
        # Encode message with mandatory fields, decode buffer and compare objs
        msg = Message(gcp_msg_def.DataStructError)
        msg.msg_fields.TransactionID.set_val(5)

        msg.msg_fields.ExceptionCode.set_val(
            gcp_msg_def.GCP_RC_MESSAGE_FAILURE.rc)

        seq = RCPSequence(gcp_msg_def.DataStructError,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)

        rcp_msg = RCPMessage(gcp_msg_def.DataStructError,
                             rcp_tlv_def.RCP_MSG_TYPE_REX)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        resSet = seq.MultiCore.ResourceSet.add_new_repeated()
        resSet.ResourceSetIndex.set_val(1)
        resSet.CcapCoreOwner.set_val(
            utils.Convert.mac_to_tuple_of_bytes("00:00:00:00:00:00"))
        resSet.DsRfPortStart.set_val(0)
        resSet.DsRfPortEnd.set_val(0)
        dsChanGroup = resSet.DsChanGroup.add_new_repeated()
        dsChanGroup.DsChanGroupIndex.set_val(1)
        dsChanGroup.DsChanType.set_val(3)
        dsChanGroup.DsChanIndexStart.set_val(0)
        dsChanGroup.DsChanIndexEnd.set_val(10)
        dsChanGroup = resSet.DsChanGroup.add_new_repeated()
        dsChanGroup.DsChanGroupIndex.set_val(2)
        dsChanGroup.DsChanType.set_val(4)
        dsChanGroup.DsChanIndexStart.set_val(11)
        dsChanGroup.DsChanIndexEnd.set_val(12)
        resSet.UsRfPortStart.set_val(0)
        resSet.UsRfPortEnd.set_val(1)
        usChanGroup = resSet.UsChanGroup.add_new_repeated()
        usChanGroup.UsChanGroupIndex.set_val(0)
        usChanGroup.UsChanType.set_val(5)
        usChanGroup.UsChanIndexStart.set_val(0)
        usChanGroup.UsChanIndexEnd.set_val(2)
        usChanGroup = resSet.UsChanGroup.add_new_repeated()
        usChanGroup.UsChanGroupIndex.set_val(1)
        usChanGroup.UsChanType.set_val(6)
        usChanGroup.UsChanIndexStart.set_val(3)
        usChanGroup.UsChanIndexEnd.set_val(4)

        buf = msg.encode()
        self.assertNotEqual(buf, None)

        msg_dec = Message(gcp_msg_def.DataStructError)
        self.assertEqual(msg_dec.decode(buf, offset=0, buf_data_len=len(buf)),
                         msg_dec.DECODE_DONE)
Beispiel #9
0
    def test_tlv_data(self):
        print "Test test_tlv_data...."
        seq = RCPSequence(gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          1234, rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        print "Test test_tlv_data...."
        seq.RpdCapabilities.NumBdirPorts.set_val(4)
        alloc_ds =\
            seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        alloc_ds.DsPortIndex.set_val(1)
        alloc_ds.AllocatedDsOfdmChannels.set_val(11)
        alloc_ds.AllocatedDsScQamChannels.set_val(111)

        alloc_ds = \
            seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        alloc_ds.DsPortIndex.set_val(2)
        alloc_ds.AllocatedDsOfdmChannels.set_val(22)
        alloc_ds.AllocatedDsScQamChannels.set_val(222)

        alloc_ds = \
            seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        alloc_ds.DsPortIndex.set_val(3)
        alloc_ds.AllocatedDsOfdmChannels.set_val(33)
        alloc_ds.AllocatedDsScQamChannels.set_val(333)

        buf = seq.encode()
        self.assertIsNotNone(buf)

        seq_dec = RCPSequence(gcp_msg_def.NotifyREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_NTF, 11,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        self.assertEqual(seq_dec.decode(buf, offset=0, buf_data_len=len(buf)),
                         seq_dec.DECODE_DONE)
Beispiel #10
0
    def test_msg_with_unexpected_tlvs(self):
        # Encode message with mandatory fields, decode buffer and compare objs
        msg = Message(gcp_msg_def.NotifyREQ)
        seq = RCPSequence(gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          123, rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        rcp_msg = RCPMessage(gcp_msg_def.NotifyREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_NTF)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        # Try to fill TLV, which is not expected
        with self.assertRaises(AttributeError):
            seq.CcapCoreIdentification.Index.set_val(6)
Beispiel #11
0
    def test_fuzzing_fast_decode2(self):
        if ENABLE_FUZZING <= 0:
            return

        class Logger:
            def error(self, *args):
                pass

            def warn(self, *args):
                pass

        for n in [0, 0xFF] + range(
                1, 0xFE):  # run edge cases, then intermediate values
            for ref_data in data_ira + data_rex + data_ntf:
                l = len(ref_data)
                for i in reversed(range(0, l)):
                    buf = ref_data[:]  # copy data
                    buf[i] = n  # mutate

                    # Decode
                    rcp_message_id = rcp_tlv_def.RCP_MSG_TYPE_REX
                    rcp_seq = RCPSequence(gcp_msg_def.ManagementREQ,
                                          rcp_message_id, 0,
                                          rcp_tlv_def.RCP_OPERATION_TYPE_NONE)
                    rcp_seq.buffer = buf
                    rcp_seq.logger = Logger()
                    parent_fmt = rcp_tlv_def.RCP_SEQ_RCP_MSG_TLV_SET_MAPPING[
                        rcp_message_id]
                    parent_gpb = config()
                    #print(n, i)
                    ret = rcp_seq._fast_decode2(parent_fmt, parent_gpb, 0,
                                                len(buf), 0)
                    #if ret is gcp_object.GCPObject.DECODE_FAILED:
                    #   print(n, i)
                    self.assertTrue(ret in [
                        gcp_object.GCPObject.DECODE_DONE,
                        gcp_object.GCPObject.DECODE_FRAGMENTED
                    ])
Beispiel #12
0
def create_cfg_read_sequence():

    seq = RCPSequence(gcp_msg_def.DataStructREQ, rcp_tlv_def.RCP_MSG_TYPE_IRA,
                      0, rcp_tlv_def.RCP_OPERATION_TYPE_READ)

    # seq.RpdCapabilities.set_is_used()
    # seq.RpdCapabilities.NumBdirPorts.set_is_used()
    # seq.RpdCapabilities.NumAsyncVideoChannels.set_is_used()
    seq.RpdCapabilities.NumBdirPorts.set_val(1)
    # seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
    # seq.RpdCapabilities.RpdIdentification.VendorId.set_val('32')
    # seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
    # (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))
    # seq.RpdCapabilities.RpdIdentification.SerialNumber.set_val('33')

    return seq
Beispiel #13
0
    def test_tlv_data_repeated_negative(self):
        seq = RCPSequence(gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          1, rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)

        seq.RpdCapabilities.NumBdirPorts.set_val(4)
        seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        buf = seq.encode()
        self.assertIsNotNone(buf)

        seq_dec = RCPSequence(gcp_msg_def.NotifyREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_NTF, 2,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        self.assertEqual(seq_dec.decode(buf, offset=0, buf_data_len=len(buf)),
                         seq_dec.DECODE_DONE)
        self.assertFalse(seq._ut_compare(seq_dec))
Beispiel #14
0
    def test_msg_with_tlvs_of_all_classes_find_TVL(self):
        seq = RCPSequence(gcp_msg_def.NotifyError,
                          rcp_tlv_def.RCP_MSG_TYPE_NTF, 0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('ABC')
        msg = Message(gcp_msg_def.NotifyError)
        rcp_msg = RCPMessage(gcp_msg_def.NotifyError,
                             rcp_tlv_def.RCP_MSG_TYPE_NTF)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        msg.msg_fields.TransactionID.set_val(10)
        msg.msg_fields.ReturnCode.set_val(
            gcp_msg_def.GCP_RC_MESSAGE_FAILURE.rc)

        seq.RpdCapabilities.NumBdirPorts.set_val(11)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('ABC')
        seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
            (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))

        sub_tlv = seq.CcapCoreIdentification.add_new_repeated()
        sub_tlv.Index.set_val(0x34)
        sub_tlv.CoreIpAddress.set_val(
            (0xA1, 0xA2, 0xA3, 0xA4, 0xB1, 0xB2, 0xB3, 0xB4, 0xC1, 0xC2, 0xC3,
             0xC4, 0xD1, 0xD2, 0xD3, 0xD4))

        buf3 = msg.encode()
        self.assertIsNotNone(buf3)
        buf3_str = binascii.hexlify(buf3)

        num_bidir_ports_pattern = "010002000b"
        vendor_name_pattern = "010003414243"
        device_mac_address_pattern = "040006abcdef123456"
        index_pattern = "01000134"
        core_ip_address_pattern = "030010a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4"

        self.assertNotEqual(buf3_str.find(num_bidir_ports_pattern), -1)
        self.assertNotEqual(buf3_str.find(vendor_name_pattern), -1)
        self.assertNotEqual(buf3_str.find(device_mac_address_pattern), -1)
        self.assertNotEqual(buf3_str.find(index_pattern), -1)
        self.assertNotEqual(buf3_str.find(core_ip_address_pattern), -1)
Beispiel #15
0
    def test_msg_with_tlv(self):
        # Encode message with mandatory fields, decode buffer and compare objs
        msg = Message(gcp_msg_def.NotifyREQ)
        msg.msg_fields.TransactionID.set_val(5)
        msg.msg_fields.EventCode.set_val(1)
        msg.msg_fields.Mode.set_val(0b10000000)
        msg.msg_fields.Status.set_val(2)
        seq = RCPSequence(gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          0, rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        rcp_msg = RCPMessage(gcp_msg_def.NotifyREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_NTF)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        seq.RpdCapabilities.NumBdirPorts.set_val(1)
        buf = msg.encode()
        self.assertIsNotNone(buf)

        msg_dec = Message(gcp_msg_def.NotifyREQ)
        self.assertEqual(msg_dec.decode(buf, offset=0, buf_data_len=len(buf)),
                         msg_dec.DECODE_DONE)
Beispiel #16
0
    def construct_eds_pkt_CcapCoreIdentification(
            need_info=False, op=rcp_tlv_def.RCP_OPERATION_TYPE_READ):
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_IRA, 0xffff, op)

        # Set RCP sequence
        ccap = seq.parent_gpb.CcapCoreIdentification.add()
        ccap.Index = 1
        if need_info:
            ccap.IsPrincipal = True
            ccap.CoreMode = 1
            ccap.CoreId = 'CoreId'
            ccap.CoreIpAddress = '1.1.1.1'
            ccap.CoreName = 'CoreName'
            ccap.VendorId = 12

        rcp_msg = RCPMessage(gcp_msg_def.DataStructREQ,
                             rcp_tlv_def.RCP_MSG_TYPE_IRA)
        rcp_msg.sequences.append(seq)

        gcp_msg = Message(gcp_msg_def.DataStructREQ)
        # TODO implement correct setting of message fields
        transaction_id = 0xffff
        gcp_msg.msg_fields.TransactionID.set_val(transaction_id)
        gcp_msg.msg_fields.Mode.set_val(0)
        gcp_msg.msg_fields.Port.set_val(11)
        gcp_msg.msg_fields.Channel.set_val(111)
        gcp_msg.msg_fields.VendorID.set_val(1111)
        gcp_msg.msg_fields.VendorIndex.set_val(254)

        gcp_msg.tlv_data.rcp_msgs.append(rcp_msg)

        pkt = RCPPacket()
        pkt.transaction_identifier = transaction_id
        pkt.protocol_identifier = RCP_PROTOCOL_ID
        pkt.unit_id = 0
        pkt.msgs.append(gcp_msg)

        return [pkt, gcp_msg]
Beispiel #17
0
    def test_rcp_msg_cb_basic(self):
        print '############test rcp_msg_cb basic case#############'
        # seq==None
        self.agent.rcp_msg_cb(None)

        seq = t_RcpMessage()
        self.agent.rcp_msg_cb(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          1,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        desc = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session = RCPSlaveSession(desc, self.agent.process.dispatcher,
                                  orch.session_initiate_cb,
                                  orch.session_timeout_cb,
                                  orch.session_connecting_timeout_cb)
        self.agent.rcp_msg_cb(seq, (session, 'transaction_identifier', 'trans_id'))
Beispiel #18
0
def create_test_sequence(operation=rcp_tlv_def.RCP_OPERATION_TYPE_WRITE, seq_num=0):

    seq = RCPSequence(gcp_msg_def.DataStructREQ, rcp_tlv_def.RCP_MSG_TYPE_REX,
                      seq_num, operation, unittest=True)

    seq.RpdCapabilities.NumBdirPorts.set_val(1)
    # TODO this can be uncommented when conflicting numbering is solved
    # seq.RpdCapabilities.NumAsyncVideoChannels.set_val(2)
    seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
    seq.RpdCapabilities.RpdIdentification.VendorId.set_val(9)
    seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
        (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))
    seq.RpdCapabilities.RpdIdentification.SerialNumber.set_val('33')

    sub_tlv = \
        seq.RpdCapabilities.LcceChannelReachability.add_new_repeated()
    sub_tlv.EnetPortIndex.set_val(4)
    sub_tlv.ChannelType.set_val(
        rcp_tlv_def.CHANNEL_TYPE_1_DsScQa_downstream_QAM[0])
    sub_tlv.EndChannelIndex.set_val(5)
    sub_tlv.RfPortIndex.set_val(6)

    seq.RpdCapabilities.PilotToneCapabilities.NumCwToneGens.set_val(6)
    seq.RpdCapabilities.PilotToneCapabilities.QamAsPilot.set_val(1)

    sub_tlv = seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
    sub_tlv.DsPortIndex.set_val(8)
    sub_tlv.AllocatedNdfChannels.set_val(9)

    sub_tlv = seq.RpdCapabilities.AllocUsChanResources.add_new_repeated()
    sub_tlv.UsPortIndex.set_val(10)
    sub_tlv.AllocatedNdrChannels.set_val(11)

    sub_tlv = seq.RfPort.add_new_repeated()
    sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
    sub_tlv.DsRfPort.AdminState.set_val(1)
    sub_tlv.DsRfPort.BasePower.set_val(30)
    sub_tlv.DsRfPort.RfMute.set_val(0)
    sub_tlv.DsRfPort.TiltSlope.set_val(8)
    sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)

    sub_tlv = seq.RfChannel.add_new_repeated()
    sub_tlv.RfChannelSelector.RfChannelIndex.set_val(0)
    sub_tlv.DsScQamChannelConfig.AdminState.set_val(1)
    sub_tlv.DsScQamChannelConfig.RfMute.set_val(1)
    sub_tlv.DsScQamChannelConfig.TSID.set_val(2)
    sub_tlv.DsScQamChannelConfig.CenterFrequency.set_val(98000000)
    sub_tlv.DsScQamChannelConfig.OperationalMode.set_val(2)
    sub_tlv.DsScQamChannelConfig.Modulation.set_val(4)
    sub_tlv.DsScQamChannelConfig.InterleaverDepth.set_val(1)
    sub_tlv.DsScQamChannelConfig.Annex.set_val(4)
    sub_tlv.DsScQamChannelConfig.SyncInterval.set_val(10)
    sub_tlv.DsScQamChannelConfig.SymbolFrequencyDenominator.set_val(4)
    sub_tlv.DsScQamChannelConfig.SymbolFrequencyNumerator.set_val(250)
    sub_tlv.DsScQamChannelConfig.SymbolRateOverride.set_val(260)
    sub_tlv.DsScQamChannelConfig.SpectrumInversionEnabled.set_val(0)
    sub_tlv.DsScQamChannelConfig.PowerAdjust.set_val(17)

    seq.RdtiConfig.RpdRdtiMode.set_val(2)
    seq.RdtiConfig.RpdPtpDefDsDomainNumber.set_val(44)
    seq.RdtiConfig.RpdPtpProfileVersion.set_val('10-11-12')
    sub_tlv = seq.RdtiConfig.RpdPtpPortConfig.add_new_repeated()
    sub_tlv.RpdEnetPortIndex.set_val(0)
    sub_tlv.RpdPtpPortIndex.set_val(0)
    sub_tlv.RpdPtpPortAdminState.set_val(4)
    sub_tlv.RpdPtpPortClockSource.set_val((10, 74, 21, 216))
    sub_tlv.RpdPtpPortDsLogSyncInterval.set_val(-7)
    sub_tlv.RpdPtpPortDsLogAnnounceInterval.set_val(-3)
    sub_tlv.RpdPtpPortDsAnnounceReceiptTimeout.set_val(60)

    return seq
Beispiel #19
0
    def test_rcp_msg_cb_event(self):
        print '############test rcp_msg_cb event case#############'
        RCPDB.DB_CFG_FILE = CONF_FILE
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          1,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        desc = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session = RCPSlaveSession(desc, self.agent.process.dispatcher,
                                  orch.session_initiate_cb,
                                  orch.session_timeout_cb,
                                  orch.session_connecting_timeout_cb)
        # reboot
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_REBOOT

        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth1', 'info': "test"}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.rcp_msg_cb(rcp_msg)

        # redirect
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.REDIRECT_NOTIFICATION
        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', 'info': "test"}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        rcp_msg.RedirectCCAPAddresses.append('3.3.3.3')
        self.agent.rcp[('eth0', '1.1.1.1')]['status'] = self.agent.UP
        self.agent.rcp_msg_cb(rcp_msg)

        # configuration
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        rcp_msg.parameter = 'eth0'
        capability = cfg.CcapCoreIdentification.add()
        capability.Index = 1
        capability.CoreId = 'CoreId'
        capability.CoreIpAddress = '1.1.1.1'
        capability.IsPrincipal = True
        capability.CoreMode = 1
        capability.CoreName = "CiscoRPD"
        capability.VendorId = 1
        capability.InitialConfigurationComplete = True
        capability.MoveToOperational = True
        capability.CoreFunction = 1
        capability.ResourceSetIndex = 2
        self.agent.rcp[('eth0', '1.1.1.1')]['status'] = self.agent.DOWN
        self.agent.rcp_msg_cb(rcp_msg)

        # RedundantCoreIpAddress
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        rcp_msg.parameter = 'eth0'
        red = cfg.RedundantCoreIpAddress.add()
        red.ActiveCoreIpAddress = '1.1.1.1'
        red.StandbyCoreIpAddress = '1.1.1.3'
        self.agent.rcp_msg_cb(rcp_msg)  # no must field

        desc1 = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session_1 = RCPSlaveSession(desc1, self.agent.process.dispatcher,
                                    orch.session_initiate_cb,
                                    orch.session_timeout_cb,
                                    orch.session_connecting_timeout_cb)
        self.agent.process.orchestrator.sessions_active[desc1.get_uniq_id()] = session_1
        caps1 = CcapCoreIdentification(index=1,
                                       core_id="CoreId-1",
                                       core_ip_addr='1.1.1.1',
                                       is_principal=True,
                                       core_name="SIM_GCPP",
                                       vendor_id=0,
                                       core_mode=True,
                                       initial_configuration_complete=True,
                                       move_to_operational=True,
                                       core_function=1,
                                       resource_set_index=2)
        session_1.ccap_identification = caps1

        desc2 = GCPSlaveDescriptor(
            '1.1.1.3', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session_2 = RCPSlaveSession(desc2, self.agent.process.dispatcher,
                                    orch.session_initiate_cb,
                                    orch.session_timeout_cb,
                                    orch.session_connecting_timeout_cb)
        # self.agent.process.orchestrator.add_sessions([desc2])
        self.agent.process.orchestrator.sessions_active[desc2.get_uniq_id()] = session_2
        caps2 = CcapCoreIdentification(index=1,
                                       core_id="CoreId-2",
                                       core_ip_addr='1.1.1.1',
                                       is_principal=True,
                                       core_name="SIM_GCPP",
                                       vendor_id=0,
                                       core_mode=True,
                                       initial_configuration_complete=True,
                                       move_to_operational=True,
                                       core_function=1,
                                       resource_set_index=2)
        session_2.ccap_identification = caps2

        caps1.is_active = False
        caps2.is_active = True
        red.Operation = ManagerProcess.OPERATION_ADD
        self.agent.rcp_msg_cb(rcp_msg)

        caps1.is_active = True
        caps2.is_active = False
        red.Operation = ManagerProcess.OPERATION_CHANGE
        self.agent.rcp_msg_cb(rcp_msg)

        # ConfiguredCoreTable
        # miss operation field
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg_core = cfg.ConfiguredCoreTable.add()
        cfg_core.ConfiguredCoreIp = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg)

        cfg_core.Operation = 0
        self.agent.rcp_msg_cb(rcp_msg)

        # ActivePrincipalCore
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg.ActivePrincipalCore = '1.1.1.1'
        seq.ipc_msg = rcp_msg
        self.agent.rcp_msg_cb(seq, (session, 'transaction_identifier', 'trans_id'))

        # RPD_CONFIGURATION else
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg_core = cfg.Ssd
        cfg_core.SsdServerAddress = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg)

        # configuration done
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION_DONE
        rcp_msg.parameter = ';'.join(['eth0', '1.1.1.1'])
        self.agent.principal_core_interface = 'eth0'
        self.agent.principal_core = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg, (session, 'transaction_identifier', 'trans_id'))

        # CONNECT_CLOSE_NOTIFICATION
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.CONNECT_CLOSE_NOTIFICATION
        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', "reconnect": True}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.ccap_cores.pop('CORE-1234567890')
        self.agent.rcp_msg_cb(rcp_msg)

        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', "reconnect": False}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.rcp_msg_cb(rcp_msg)
Beispiel #20
0
 def create_testing_sequence_from_gpb(gcp_message_id, rcp_message_id,
                                      gpb_message):
     return RCPSequence(gcp_message_id, rcp_message_id, 0,
                        rcp_tlv_def.RCP_OPERATION_TYPE_WRITE, gpb_message)
Beispiel #21
0
    def create_testing_cfg_sequence(gcp_message_id, rcp_message_id):
        seq = RCPSequence(gcp_message_id,
                          rcp_message_id,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)

        seq.RpdCapabilities.NumBdirPorts.set_val(1)
        # TODO this can be uncommented when conflicting numbering is solved
        # seq.RpdCapabilities.NumAsyncVideoChannels.set_val(2)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
        seq.RpdCapabilities.RpdIdentification.VendorId.set_val(32)
        seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
            (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))
        seq.RpdCapabilities.RpdIdentification.SerialNumber.set_val('33')

        sub_tlv =\
            seq.RpdCapabilities.LcceChannelReachability.add_new_repeated()
        sub_tlv.EnetPortIndex.set_val(4)
        sub_tlv.ChannelType.set_val(
            rcp_tlv_def.CHANNEL_TYPE_1_DsScQa_downstream_QAM[0])
        sub_tlv.EndChannelIndex.set_val(5)
        sub_tlv.RfPortIndex.set_val(6)

        seq.RpdCapabilities.PilotToneCapabilities.NumCwToneGens.set_val(6)
        seq.RpdCapabilities.PilotToneCapabilities.QamAsPilot.set_val(1)

        sub_tlv = seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        sub_tlv.DsPortIndex.set_val(8)
        sub_tlv.AllocatedNdfChannels.set_val(9)

        sub_tlv = seq.RpdCapabilities.AllocUsChanResources.add_new_repeated()
        sub_tlv.UsPortIndex.set_val(10)
        sub_tlv.AllocatedNdrChannels.set_val(11)

        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        # sub_tlv.DsRfPort.PortIndex.set_val(14)
        sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)

        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        sub_tlv.UsRfPort.BaseTargetRxPower.set_val(10)

        sub_tlv = seq.RfChannel.add_new_repeated()
        sub_tlv.RfChannelSelector.RfChannelIndex.set_val(0)

        # dMsg = binascii.a2b_hex("c200016af52b01e02f00000100219f7b66380158000003010200010d0401010108020401312d00038003f02833ebf02833ebf02833ebf02833ebf1642892a9974767da0417bbc2758f36ff5739350dc1871988d3d22b603f296b0df3dec0edf3dec0edf3dec0edf3dec0edf1642892a9974767da0417bbc2758f36ff5739350dc1871988d3d22b603f296b000000000000000000000000000000000000000000000000000000000000042501010101020102030200260402018c050100060110070201520801000901160a01010b01010425030101010201020302018004020006050105060122070201520801000901300a01010b01010425040101010201020302018004020006050105060122070201520801000901300a01010b0101042505010101020102030200400402018c05010306014c0702015208010c0901160a01020b0101042506010101020102030200400402018c0501090601e8070201520801fe0901160a01020b0101052506010101020102030200400402018c0501090601e8070201520801fe0901160a01020b01010640c0edf1642892a9974767da0417bbc2758f36ff5739350dc1871988d3d22b603f296b0000000000000000000000000000000000000000000000000000000000000701010801010901010a01010b0201010c0201010d0201010e090102030405060708090f0101100101110101120401020304130101140101151001020304050607080910111213141516160101")
        # sub_tlv.DocsisMsg.set_val(dMsg)

        sub_tlv.DsScQamChannelConfig.AdminState.set_val(1)
        sub_tlv.DsScQamChannelConfig.PowerAdjust.set_val(17)
        sub_tlv.DsOfdmChannelConfig.AdminState.set_val(2)
        sub_tlv.DsOfdmChannelConfig.SubcarrierSpacing.set_val(1)

        sub_tlv2 = sub_tlv.DsOfdmChannelConfig.DsOfdmSubcarrierType.add_new_repeated(
        )
        sub_tlv2.StartSubcarrierId.set_val(21)
        sub_tlv2.EndSubcarrierId.set_val(22)
        sub_tlv2.SubcarrierUsage.set_val(1)

        sub_tlv2 = sub_tlv.DsOfdmProfile
        sub_tlv2.ProfileId.set_val(15)
        # sub_tlv3 = sub_tlv2.DsOfdmSubcarrierModulation.add_new_repeated()
        # sub_tlv3.StartSubcarrierId.set_val(21)
        # sub_tlv3.EndSubcarrierId.set_val(22)
        # sub_tlv3.Modulation.set_val(1)

        sub_tlv.UsScQamChannelConfig.AdminState.set_val(3)
        sub_tlv.UsScQamChannelConfig.TargetRxPower.set_val(24)
        sub_tlv2 = sub_tlv.UsScQamChannelConfig.IntervalUsageCode.add_new_repeated(
        )
        sub_tlv2.Code.set_val(14)
        sub_tlv2.GuardTime.set_val(26)

        sub_tlv.UsOfdmaChannelConfig.AdminState.set_val(4)
        sub_tlv.UsOfdmaChannelConfig.TargetRxPowerAdjust.set_val(28)
        sub_tlv.UsOfdmaInitialRangingIuc.NumSubcarriers.set_val(10)
        sub_tlv.UsOfdmaInitialRangingIuc.Guardband.set_val(10)
        sub_tlv.UsOfdmaFineRangingIuc.NumSubcarriers.set_val(14)
        sub_tlv.UsOfdmaFineRangingIuc.Guardband.set_val(10)

        sub_tlv2 = sub_tlv.UsOfdmaDataIuc.add_new_repeated()
        sub_tlv2.DataIuc.set_val(5)
        sub_tlv2.DataSymbolModulation.set_val(1)

        sub_tlv2 = sub_tlv.UsOfdmaSubcarrierCfgState.add_new_repeated()
        sub_tlv2.StartingSubcarrierId.set_val(0)
        sub_tlv2.SubcarrierUsage.set_val(4)
        return seq
Beispiel #22
0
    def test_tlv_len_mismatch(self):
        seq = "0900570a000200020b000105130001003c004701000100020004313233340300" \
            + "10262000002b107ffe00000000000000020400010105000843434150434f524506000" \
            + "2118b0700010108000100090001000a000200000b000100"

        seq_buf = binascii.a2b_hex(seq)
        print repr(seq_buf)
        decoder = RCPSequence(gcp_msg_def.DataStructRSP,
                              rcp_tlv_def.RCP_MSG_TYPE_REX, 1,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE_RESPONSE)

        decoder.decode(seq_buf, offset=0, buf_data_len=len(seq_buf))
        # change vendor id to 1 byte
        decoder = RCPSequence(gcp_msg_def.DataStructRSP,
                              rcp_tlv_def.RCP_MSG_TYPE_REX, 1,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE_RESPONSE)
        seq = "0900560a000200020b000105130001003c004601000100020004313233340300102620" \
            + "00002b107ffe00000000000000020400010105000843434150434f52450600018b070001010" \
            + "8000100090001000a000200000b000100"
        seq_buf = binascii.a2b_hex(seq)
        decoder.decode(seq_buf, offset=0, buf_data_len=len(seq_buf))

        # change vendor id to 3 byte
        decoder = RCPSequence(gcp_msg_def.DataStructRSP,
                              rcp_tlv_def.RCP_MSG_TYPE_REX, 1,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE_RESPONSE)

        seq = "0900570a000200020b000105130001003c00470100010002000431323334030010262000002b" \
            + "107ffe00000000000000020400010105000843434150434f524506000311118b0700010108000100" \
            + "090001000a000200000b000100"
        seq_buf = binascii.a2b_hex(seq)
        decoder.decode(seq_buf, offset=0, buf_data_len=len(seq_buf))
Beispiel #23
0
    def create_testing_ds_cfg_sequence(gcp_message_id, rcp_message_id):
        seq = RCPSequence(gcp_message_id,
                          rcp_message_id,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)

        seq.RpdCapabilities.NumBdirPorts.set_val(1)
        # TODO this can be uncommented when conflicting numbering is solved
        # seq.RpdCapabilities.NumAsyncVideoChannels.set_val(2)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
        seq.RpdCapabilities.RpdIdentification.VendorId.set_val(32)
        seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
            (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))
        seq.RpdCapabilities.RpdIdentification.SerialNumber.set_val('33')

        sub_tlv =\
            seq.RpdCapabilities.LcceChannelReachability.add_new_repeated()
        sub_tlv.EnetPortIndex.set_val(4)
        sub_tlv.ChannelType.set_val(
            rcp_tlv_def.CHANNEL_TYPE_1_DsScQa_downstream_QAM[0])
        sub_tlv.EndChannelIndex.set_val(5)
        sub_tlv.RfPortIndex.set_val(6)

        seq.RpdCapabilities.PilotToneCapabilities.NumCwToneGens.set_val(6)
        seq.RpdCapabilities.PilotToneCapabilities.QamAsPilot.set_val(1)

        sub_tlv = seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        sub_tlv.DsPortIndex.set_val(8)
        sub_tlv.AllocatedNdfChannels.set_val(9)

        sub_tlv = seq.RpdCapabilities.AllocUsChanResources.add_new_repeated()
        sub_tlv.UsPortIndex.set_val(10)
        sub_tlv.AllocatedNdrChannels.set_val(11)

        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        sub_tlv.DsRfPort.AdminState.set_val(1)
        sub_tlv.DsRfPort.BasePower.set_val(30)
        sub_tlv.DsRfPort.RfMute.set_val(0)
        sub_tlv.DsRfPort.TiltSlope.set_val(8)
        sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)

        sub_tlv = seq.RfChannel.add_new_repeated()
        sub_tlv.RfChannelSelector.RfChannelIndex.set_val(0)
        sub_tlv.DsScQamChannelConfig.AdminState.set_val(1)
        sub_tlv.DsScQamChannelConfig.RfMute.set_val(1)
        sub_tlv.DsScQamChannelConfig.TSID.set_val(2)
        sub_tlv.DsScQamChannelConfig.CenterFrequency.set_val(98000000)
        sub_tlv.DsScQamChannelConfig.OperationalMode.set_val(2)
        sub_tlv.DsScQamChannelConfig.Modulation.set_val(4)
        sub_tlv.DsScQamChannelConfig.InterleaverDepth.set_val(1)
        sub_tlv.DsScQamChannelConfig.Annex.set_val(4)
        sub_tlv.DsScQamChannelConfig.SyncInterval.set_val(10)
        sub_tlv.DsScQamChannelConfig.SymbolFrequencyDenominator.set_val(4)
        sub_tlv.DsScQamChannelConfig.SymbolFrequencyNumerator.set_val(250)
        sub_tlv.DsScQamChannelConfig.SymbolRateOverride.set_val(260)
        sub_tlv.DsScQamChannelConfig.SpectrumInversionEnabled.set_val(0)
        sub_tlv.DsScQamChannelConfig.PowerAdjust.set_val(17)

        return seq
Beispiel #24
0
    def test_msg_dispatch(self):
        try:
            self.process.send_ipc_msg('error')
        except SystemExit as e:
            self.assertEqual(e.code, EX_DATAERR)

        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": None,
            "req_data": "error"
        })

        timeout_msg = t_RcpMessage()
        timeout_msg.RcpMessageType = timeout_msg.CONNECT_CLOSE_NOTIFICATION
        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": None,
            "req_data": timeout_msg
        })

        data_list = []
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)
        seq.RpdCapabilities.NumBdirPorts.set_val(1)
        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
        seq.RpdCapabilities.RpdIdentification.VendorId.set_val(9)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)
        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        sub_tlv.DsRfPort.AdminState.set_val(1)
        sub_tlv.DsRfPort.BasePower.set_val(30)
        sub_tlv.DsRfPort.RfMute.set_val(0)
        sub_tlv.DsRfPort.TiltSlope.set_val(8)
        sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)
        seq.RpdConfigurationDone.set_val(1)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX, 0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        seq.ipc_msg = None
        data_list.append(seq)

        self.process.hal_ipc.disconnected = False
        self.process.hal_ipc.clientID = '12345'
        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": 'tmp',
            "gcp_msg": "tmp",
            "req_data": data_list
        })
Beispiel #25
0
    def test_msg_with_tlvs_of_all_classes(self):
        # Encode message with mandatory fields, decode buffer and compare objs
        msg = Message(gcp_msg_def.DataStructError)
        msg.msg_fields.TransactionID.set_val(5)

        msg.msg_fields.ExceptionCode.set_val(
            gcp_msg_def.GCP_RC_MESSAGE_FAILURE.rc)

        seq = RCPSequence(gcp_msg_def.DataStructError,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)

        rcp_msg = RCPMessage(gcp_msg_def.DataStructError,
                             rcp_tlv_def.RCP_MSG_TYPE_REX)
        msg.tlv_data.rcp_msgs.append(rcp_msg)
        rcp_msg.sequences.append(seq)

        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('ABC')
        seq.RpdCapabilities.NumBdirPorts.set_val(1)
        # TODO this can be uncommented when conflicting numbering is solved
        # seq.RpdCapabilities.NumAsyncVideoChannels.set_val(2)

        seq.RpdCapabilities.RpdIdentification.VendorName.set_val('31')
        seq.RpdCapabilities.RpdIdentification.VendorId.set_val(9)
        seq.RpdCapabilities.RpdIdentification.DeviceMacAddress.set_val(
            (0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56))
        seq.RpdCapabilities.RpdIdentification.SerialNumber.set_val('33')

        sub_tlv =\
            seq.RpdCapabilities.LcceChannelReachability.add_new_repeated()
        sub_tlv.EnetPortIndex.set_val(4)
        sub_tlv.EndChannelIndex.set_val(5)

        seq.RpdCapabilities.PilotToneCapabilities.NumCwToneGens.set_val(6)
        seq.RpdCapabilities.PilotToneCapabilities.QamAsPilot.set_val(1)

        sub_tlv = seq.RpdCapabilities.AllocDsChanResources.add_new_repeated()
        sub_tlv.DsPortIndex.set_val(8)
        sub_tlv.AllocatedNdfChannels.set_val(9)

        sub_tlv = seq.RpdCapabilities.AllocUsChanResources.add_new_repeated()
        sub_tlv.UsPortIndex.set_val(10)
        sub_tlv.AllocatedNdrChannels.set_val(11)

        sub_tlv = seq.CcapCoreIdentification.add_new_repeated()
        sub_tlv.Index.set_val(12)
        sub_tlv.CoreIpAddress.set_val((0x01, 0x02, 0x03, 0x04))
        sub_tlv.VendorId.set_val(13)

        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        # sub_tlv.DsRfPort.PortIndex.set_val(14)
        sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)

        sub_tlv = seq.RfChannel.add_new_repeated()
        sub_tlv.RfChannelSelector.RfChannelIndex.set_val(0)
        sub_tlv.DsScQamChannelConfig.AdminState.set_val(1)
        sub_tlv.DsScQamChannelConfig.PowerAdjust.set_val(17)
        sub_tlv.DsOfdmChannelConfig.AdminState.set_val(2)
        sub_tlv.DsOfdmChannelConfig.SubcarrierSpacing.set_val(1)

        sub_tlv2 = sub_tlv.DsOfdmChannelConfig.DsOfdmSubcarrierType.add_new_repeated(
        )
        sub_tlv2.StartSubcarrierId.set_val(21)
        sub_tlv2.EndSubcarrierId.set_val(22)
        sub_tlv2.SubcarrierUsage.set_val(1)

        sub_tlv2 = sub_tlv.DsOfdmProfile
        sub_tlv2.ProfileId.set_val(15)
        # sub_tlv3 = sub_tlv2.DsOfdmSubcarrierModulation.add_new_repeated()
        # sub_tlv3.StartSubcarrierId.set_val(21)
        # sub_tlv3.EndSubcarrierId.set_val(22)
        # sub_tlv3.Modulation.set_val(1)

        sub_tlv.UsScQamChannelConfig.AdminState.set_val(3)
        sub_tlv.UsScQamChannelConfig.TargetRxPower.set_val(24)
        sub_tlv2 = sub_tlv.UsScQamChannelConfig.IntervalUsageCode.\
            add_new_repeated()
        sub_tlv2.Code.set_val(14)
        sub_tlv2.GuardTime.set_val(26)

        sub_tlv.UsOfdmaChannelConfig.AdminState.set_val(4)
        sub_tlv.UsOfdmaChannelConfig.TargetRxPowerAdjust.set_val(28)
        sub_tlv.UsOfdmaInitialRangingIuc.NumSubcarriers.set_val(10)
        sub_tlv.UsOfdmaInitialRangingIuc.Guardband.set_val(10)
        sub_tlv.UsOfdmaFineRangingIuc.NumSubcarriers.set_val(14)
        sub_tlv.UsOfdmaFineRangingIuc.Guardband.set_val(10)

        sub_tlv2 = sub_tlv.UsOfdmaDataIuc.add_new_repeated()
        sub_tlv2.DataIuc.set_val(5)
        sub_tlv2.DataSymbolModulation.set_val(1)

        sub_tlv2 = sub_tlv.UsOfdmaSubcarrierCfgState.add_new_repeated()
        sub_tlv2.StartingSubcarrierId.set_val(0)
        sub_tlv2.SubcarrierUsage.set_val(4)

        sub_tlv2 = sub_tlv.SidQos.add_new_repeated()
        sub_tlv2.StartSid.set_val(100)
        sub_tlv2.NumSids.set_val(10)
        sub_tlv2.SidSfType.set_val(2)

        sub_tlv2 = sub_tlv.SidQos.add_new_repeated()
        sub_tlv2.StartSid.set_val(15800)
        sub_tlv2.NumSids.set_val(5)
        sub_tlv2.SidSfType.set_val(3)

        buf = msg.encode()
        self.assertNotEqual(buf, None)

        msg_dec = Message(gcp_msg_def.DataStructError)
        self.assertEqual(msg_dec.decode(buf, offset=0, buf_data_len=len(buf)),
                         msg_dec.DECODE_DONE)
Beispiel #26
0
    def test_msg_dispatch_I08(self):
        print("##################test_msg_dispatch_I08##################")
        try:
            self.process.send_ipc_msg('error')
        except SystemExit as e:
            self.assertEqual(e.code, EX_DATAERR)

        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": None,
            "req_data": "error"
        })

        timeout_msg = t_RcpMessage()
        timeout_msg.RcpMessageType = timeout_msg.CONNECT_CLOSE_NOTIFICATION
        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": None,
            "req_data": timeout_msg
        })

        data_list = []
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                          unittest=True)
        sub_tlv = seq.CcapCoreIdentification.add_new_repeated()
        sub_tlv.Index.set_val(1)
        sub_tlv.CoreId.set_val('1234567890')
        sub_tlv.CoreIpAddress.set_val(
            Convert.ipaddr_to_tuple_of_bytes("127.0.0.1"))
        sub_tlv.IsPrincipal.set_val(False)
        sub_tlv.CoreMode.set_val(1)
        sub_tlv.InitialConfigurationComplete.set_val(True)
        sub_tlv.MoveToOperational.set_val(True)
        sub_tlv.CoreFunction.set_val(1)
        sub_tlv.ResourceSetIndex.set_val(2)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE,
                          unittest=True)
        sub_tlv = seq.RfPort.add_new_repeated()
        sub_tlv.RfPortSelector.RfPortIndex.set_val(0)
        sub_tlv.DsRfPort.AdminState.set_val(1)
        sub_tlv.DsRfPort.BasePower.set_val(30)
        sub_tlv.DsRfPort.RfMute.set_val(0)
        sub_tlv.DsRfPort.TiltSlope.set_val(8)
        sub_tlv.DsRfPort.TiltMaximumFrequency.set_val(15)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE,
                          unittest=True)
        seq.RpdConfigurationDone.set_val(1)
        data_list.append(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX, 0,
                          rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE)
        seq.ipc_msg = None
        data_list.append(seq)

        self.process.hal_ipc.disconnected = False
        self.process.hal_ipc.clientID = '12345'
        self.process.send_ipc_msg({
            "session": self.session,
            "req_packet": 'tmp',
            "gcp_msg": "tmp",
            "req_data": data_list
        })
Beispiel #27
0
    def create_vendor_tlvs_sequence(self, gcp_message_id, rcp_message_id,
                                    operation):
        """ This functions create a RCPSequence object, and set t_VendorSpecificExtension()
        with appropriate values.

        : param gcp_message_id: GCP Message ID
        : param rcp_message_id: RCP Message ID
        : param operation: TLV Operation of this RCP Sequence

        : return: seq

        """

        seq = RCPSequence(gcp_message_id=gcp_message_id,
                          rcp_message_id=rcp_message_id,
                          operation=operation)

        if None is seq:
            return None

        # use the RCP TLV standard operation values instead of enum t_RpdDataOperation.
        if None is not seq.ipc_msg:
            if operation == rcp_tlv_def.RCP_OPERATION_TYPE_READ:
                seq.ipc_msg.RpdDataMessage.RpdDataOperation = t_RpdDataMessage.RPD_CFG_READ
            elif operation == rcp_tlv_def.RCP_OPERATION_TYPE_WRITE:
                seq.ipc_msg.RpdDataMessage.RpdDataOperation = t_RpdDataMessage.RPD_CFG_WRITE
            elif operation == rcp_tlv_def.RCP_OPERATION_TYPE_DELETE:
                seq.ipc_msg.RpdDataMessage.RpdDataOperation = t_RpdDataMessage.RPD_CFG_DELETE
            elif operation == rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE:
                seq.ipc_msg.RpdDataMessage.RpdDataOperation = t_RpdDataMessage.RPD_CFG_ALLOCATE_WRITE
            else:
                seq.ipc_msg.RpdDataMessage.RpdDataOperation = t_RpdDataMessage.RPD_OPER_NONE

        VspTlv = seq.VendorSpecificExtension
        VspTlv.VendorId.set_val(self.VendorID)

        if operation in [
                rcp_tlv_def.RCP_OPERATION_TYPE_WRITE,
                rcp_tlv_def.RCP_OPERATION_TYPE_ALLOCATE_WRITE
        ]:
            # Driver could use this to verify its FW/HW before applying...
            VspTlv.FWVersion.set_val(0x0101)
            VspTlv.HWVersion.set_val(0x0A05)

            # Fill some data for OpenRpdDriver to write to HW
            rfChannel = VspTlv.RfChannel.add_new_repeated()
            rfChannel.RfChannelSelector.RfPortIndex.set_val(3)
            rfChannel.RfChannelSelector.RfChannelType.set_val(2)
            rfChannel.RfChannelSelector.RfChannelIndex.set_val(1)

            DsScQamChannelConfig = rfChannel.DsScQamChannelConfig

            DsScQamChannelConfig.AdminState.set_val(
                t_VendorSpecificExtension.t_RfChannel.t_DsScQamChannelConfig.
                ADMIN_STATE_4_TESTING)
            #DsScQamChannelConfig.CcapCoreOwner = ("\x00\x01\x02\x03\x04\x05")
            DsScQamChannelConfig.RfMute.set_val(True)
            DsScQamChannelConfig.TSID.set_val(6879)
            DsScQamChannelConfig.CenterFrequency.set_val(1000000)
            DsScQamChannelConfig.OperationalMode.set_val(
                t_VendorSpecificExtension.t_RfChannel.t_DsScQamChannelConfig.
                OPERATIONAL_MODE_2_CHANNEL_AS_DOCSIS_CHANNEL)
            DsScQamChannelConfig.Modulation.set_val(
                t_VendorSpecificExtension.t_RfChannel.t_DsScQamChannelConfig.
                MODULATION_57__4_QAM256)
            DsScQamChannelConfig.InterleaverDepth.set_val(
                t_VendorSpecificExtension.t_RfChannel.t_DsScQamChannelConfig.
                INTERLEAVER_DEPTH_4_TAPS16INCREMENT8)

            DsScQamChannelConfig.Annex.set_val(
                t_VendorSpecificExtension.t_RfChannel.t_DsScQamChannelConfig.
                ANNEX_3_ANNEX_A)
            DsScQamChannelConfig.SyncInterval.set_val(0xa5)
            #DsScQamChannelConfig.SyncMacAddress = ("\x00\x01\x02\x03\x04\x05")
            DsScQamChannelConfig.SymbolFrequencyDenominator.set_val(0x12)
            DsScQamChannelConfig.SymbolFrequencyNumerator.set_val(0x34)
            DsScQamChannelConfig.SymbolRateOverride.set_val(0x56)
            DsScQamChannelConfig.SpectrumInversionEnabled.set_val(False)
            DsScQamChannelConfig.PowerAdjust.set_val(0x89)
        elif (operation == rcp_tlv_def.RCP_OPERATION_TYPE_READ):
            # Driver should write its current values here so the requester knows...
            VspTlv.FWVersion.set_val(0x0)
            VspTlv.HWVersion.set_val(0x0)
        return seq
Beispiel #28
0
    def test_value_constraint(self):
        # Same like previous test, but we set TLV with limited range of values

        seq = RCPSequence(gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                          1, rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)

        # Bool constraint
        with self.assertRaises(ValueError):
            seq.RpdCapabilities.SupportsUdpEncap.set_val(2)

        sub_tlv = \
            seq.RpdCapabilities.LcceChannelReachability.add_new_repeated()

        # Range constraint less than <1,10>
        with self.assertRaises(ValueError):
            sub_tlv.ChannelType.set_val(0)

        # Range constraint greater than <1,10>
        with self.assertRaises(ValueError):
            sub_tlv.ChannelType.set_val(15)

        buf = seq.encode()
        self.assertEqual(len(buf), RCP_SEQUENCE_MIN_LEN)
        self.assertIsNotNone(buf)

        seq.offset = 0
        seq.buf_data_len = 0
        seq.buffer = None

        # Range constraint <1,10> - valid value
        sub_tlv.ChannelType.set_val(10)

        buf = seq.encode()
        dec_seq = RCPSequence(gcp_msg_def.NotifyREQ,
                              rcp_tlv_def.RCP_MSG_TYPE_NTF, 2,
                              rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        self.assertEqual(dec_seq.decode(buf, offset=0, buf_data_len=len(buf)),
                         dec_seq.DECODE_DONE)
        self.assertTrue(dec_seq._ut_compare(seq))