Beispiel #1
0
class ModbusPDU15WriteFileRecordError(Packet):
    name = "Write File Record Exception"
    fields_desc = [XByteField("funcCode", 0x95),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #2
0
class SCTPChunkCookieAck(_SCTPChunkGuessPayload, Packet):
    fields_desc = [ByteEnumField("type", 11, sctpchunktypes),
                   XByteField("flags", None),
                   ShortField("len", 4),
                   ]
Beispiel #3
0
class OFPMatch(Packet):
    name = "OFP_MATCH"
    fields_desc = [
        FlagsField("wildcards1", None, 12, ["DL_VLAN_PCP", "NW_TOS"]),
        BitField("nw_dst_mask", None, 6),
        BitField("nw_src_mask", None, 6),
        FlagsField("wildcards2", None, 8, [
            "IN_PORT", "DL_VLAN", "DL_SRC", "DL_DST", "DL_TYPE", "NW_PROTO",
            "TP_SRC", "TP_DST"
        ]),
        ShortEnumField("in_port", None, ofp_port_no),
        MACField("dl_src", None),
        MACField("dl_dst", None),
        ShortField("dl_vlan", None),
        ByteField("dl_vlan_pcp", None),
        XByteField("pad1", None),
        ShortField("dl_type", None),
        ByteField("nw_tos", None),
        ByteField("nw_proto", None),
        XShortField("pad2", None),
        IPField("nw_src", "0"),
        IPField("nw_dst", "0"),
        ShortField("tp_src", None),
        ShortField("tp_dst", None)
    ]

    def extract_padding(self, s):
        return b"", s

    # with post_build we create the wildcards field bit by bit
    def post_build(self, p, pay):
        # first 10 bits of an ofp_match are always set to 0
        l = "0" * 10

        # when one field has not been declared, it is assumed to be wildcarded
        if self.wildcards1 is None:
            if self.nw_tos is None:
                l += "1"
            else:
                l += "0"
            if self.dl_vlan_pcp is None:
                l += "1"
            else:
                l += "0"
        else:
            w1 = binrepr(self.wildcards1)
            l += "0" * (2 - len(w1))
            l += w1

        # ip masks use 6 bits each
        if self.nw_dst_mask is None:
            if self.nw_dst is "0":
                l += "111111"
            # 0x100000 would be ok too (32-bit IP mask)
            else:
                l += "0" * 6
        else:
            m1 = binrepr(self.nw_dst_mask)
            l += "0" * (6 - len(m1))
            l += m1
        if self.nw_src_mask is None:
            if self.nw_src is "0":
                l += "111111"
            else:
                l += "0" * 6
        else:
            m2 = binrepr(self.nw_src_mask)
            l += "0" * (6 - len(m2))
            l += m2

        # wildcards2 works the same way as wildcards1
        if self.wildcards2 is None:
            if self.tp_dst is None:
                l += "1"
            else:
                l += "0"
            if self.tp_src is None:
                l += "1"
            else:
                l += "0"
            if self.nw_proto is None:
                l += "1"
            else:
                l += "0"
            if self.dl_type is None:
                l += "1"
            else:
                l += "0"
            if self.dl_dst is None:
                l += "1"
            else:
                l += "0"
            if self.dl_src is None:
                l += "1"
            else:
                l += "0"
            if self.dl_vlan is None:
                l += "1"
            else:
                l += "0"
            if self.in_port is None:
                l += "1"
            else:
                l += "0"
        else:
            w2 = binrepr(self.wildcards2)
            l += "0" * (8 - len(w2))
            l += w2

        # In order to write OFPMatch compliant with the specifications,
        # if prereq_autocomplete has been set to True
        # we assume ethertype=IP or nwproto=TCP when appropriate subfields are provided.  # noqa: E501
        if conf.contribs['OPENFLOW']['prereq_autocomplete']:
            if self.dl_type is None:
                if self.nw_src is not "0" or self.nw_dst is not "0" or self.nw_proto is not None or self.nw_tos is not None:  # noqa: E501
                    p = p[:22] + struct.pack("!H", 0x0800) + p[24:]
                    l = l[:-5] + "0" + l[-4:]
            if self.nw_proto is None:
                if self.tp_src is not None or self.tp_dst is not None:
                    p = p[:22] + struct.pack("!H", 0x0800) + p[24:]
                    l = l[:-5] + "0" + l[-4:]
                    p = p[:25] + struct.pack("!B", 0x06) + p[26:]
                    l = l[:-6] + "0" + l[-5:]

        ins = b"".join(chb(int("".join(x), 2)) for x in zip(*[iter(l)] * 8))
        p = ins + p[4:]
        return p + pay
Beispiel #4
0
class GMLAN_RDI_BM(Packet):
    name = 'ReadStatusOfDTCByStatusMask'
    fields_desc = [
        XByteField('DTCStatusMask', 0),
    ]
Beispiel #5
0
class SCTPChunkHeartbeatReq(_SCTPChunkGuessPayload, Packet):
    fields_desc = [ByteEnumField("type", 4, sctpchunktypes),
                   XByteField("flags", None),
                   FieldLenField("len", None, length_of="params", adjust=lambda pkt, x:x + 4),  # noqa: E501
                   ChunkParamField("params", None, length_from=lambda pkt:pkt.len - 4),  # noqa: E501
                   ]
class LL_TERMINATE_IND(Packet):
    name = 'LL_TERMINATE_IND'
    fields_desc = [
        XByteField("code", 0x0),
    ]
class LL_REJECT_IND(Packet):
    name = "LL_REJECT_IND"
    fields_desc = [
        XByteField("code", 0x0),
    ]
Beispiel #8
0
class ModbusPDU18ReadFIFOQueueError(Packet):
    name = "Read FIFO Queue Exception"
    fields_desc = [XByteField("funcCode", 0x98),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #9
0
class ModbusPDU2B0EReadDeviceIdentificationRequest(Packet):
    name = "Read Device Identification"
    fields_desc = [XByteField("funcCode", 0x2B),
                   XByteField("MEIType", 0x0E),
                   ByteEnumField("readCode", 1, _read_device_id_codes),
                   ByteEnumField("objectId", 0x00, _read_device_id_object_id)]
Beispiel #10
0
class ModbusPDU17ReadWriteMultipleRegistersError(Packet):
    name = "Read Write Multiple Exception"
    fields_desc = [XByteField("funcCode", 0x97),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #11
0
class ModbusPDU18ReadFIFOQueueRequest(Packet):
    name = "Read FIFO Queue"
    fields_desc = [XByteField("funcCode", 0x18),
                   XShortField("FIFOPointerAddr", 0x0000)]
Beispiel #12
0
class ModbusPDU16MaskWriteRegisterError(Packet):
    name = "Mask Write Register Exception"
    fields_desc = [XByteField("funcCode", 0x96),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #13
0
class ModbusPDU01ReadCoilsRequest(_ModbusPDUNoPayload):
    name = "Read Coils Request"
    fields_desc = [XByteField("funcCode", 0x01),
                   XShortField("startAddr", 0x0000),  # 0x0000 to 0xFFFF
                   XShortField("quantity", 0x0001)]
Beispiel #14
0
class ModbusPDU16MaskWriteRegisterResponse(Packet):
    name = "Mask Write Register Response"
    fields_desc = [XByteField("funcCode", 0x16),
                   XShortField("refAddr", 0x0000),
                   XShortField("andMask", 0xffff),
                   XShortField("orMask", 0x0000)]
Beispiel #15
0
class CDPMsgTrustBitmap(CDPMsgGeneric):
    name = "Trust Bitmap"
    fields_desc = [XShortEnumField("type", 0x0012, _cdp_tlv_types),
                   ShortField("len", 5),
                   XByteField("trust_bitmap", 0x0)]
Beispiel #16
0
class ModbusPDU2B0EReadDeviceIdentificationError(Packet):
    name = "Read Exception Status Exception"
    fields_desc = [XByteField("funcCode", 0xAB),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #17
0
class CDPMsgUntrustedPortCoS(CDPMsgGeneric):
    name = "Untrusted Port CoS"
    fields_desc = [XShortEnumField("type", 0x0013, _cdp_tlv_types),
                   ShortField("len", 5),
                   XByteField("untrusted_port_cos", 0x0)]
Beispiel #18
0
class ModbusPDU01ReadCoilsError(_ModbusPDUNoPayload):
    name = "Read Coils Exception"
    fields_desc = [XByteField("funcCode", 0x81),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #19
0
class LL_UNKNOWN_RSP(Packet):
    name = 'LL_UNKNOWN_RSP'
    fields_desc = [
        XByteField("code", 0x0),
    ]
Beispiel #20
0
class ModbusPDU02ReadDiscreteInputsRequest(_ModbusPDUNoPayload):
    name = "Read Discrete Inputs"
    fields_desc = [XByteField("funcCode", 0x02),
                   XShortField("startAddr", 0x0000),
                   XShortField("quantity", 0x0001)]
Beispiel #21
0
class HDLC(Packet):
    fields_desc = [XByteField("address", 0xff), XByteField("control", 0x03)]
Beispiel #22
0
class ModbusPDU02ReadDiscreteInputsError(Packet):
    name = "Read Discrete Inputs Exception"
    fields_desc = [XByteField("funcCode", 0x82),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]
Beispiel #23
0
class GMLAN_RDI_BC(Packet):
    name = 'SendOnChangeDTCCount'
    fields_desc = [
        XByteField('DTCStatusMask', 0),
    ]
Beispiel #24
0
class ModbusPDU03ReadHoldingRegistersRequest(_ModbusPDUNoPayload):
    name = "Read Holding Registers"
    fields_desc = [XByteField("funcCode", 0x03),
                   XShortField("startAddr", 0x0000),
                   XShortField("quantity", 0x0001)]
Beispiel #25
0
class SCTPChunkShutdown(_SCTPChunkGuessPayload, Packet):
    fields_desc = [ByteEnumField("type", 7, sctpchunktypes),
                   XByteField("flags", None),
                   ShortField("len", 8),
                   XIntField("cumul_tsn_ack", None),
                   ]
Beispiel #26
0
class GMLAN_DDM(Packet):
    name = 'DynamicallyDefineMessage'
    fields_desc = [
        XByteField('DPIDIdentifier', 0),
        StrField('PIDData', b'\x00\x00')
    ]
Beispiel #27
0
class LLC(Packet):
    name = "LLC"
    fields_desc = [XByteField("dsap", 0x00),
                   XByteField("ssap", 0x00),
                   ByteField("ctrl", 0)]
Beispiel #28
0
class GMLAN_DDMPR(Packet):
    name = 'DynamicallyDefineMessagePositiveResponse'
    fields_desc = [
        XByteField('DPIDIdentifier', 0)
    ]
Beispiel #29
0
class OBD_S08(Packet):
    name = "S8_RequestControlOfSystem"
    fields_desc = [FieldListField("tid", [0], XByteField('', 0))]
Beispiel #30
0
class ModbusPDU11ReportSlaveIdError(Packet):
    name = "Report Slave Id Exception"
    fields_desc = [XByteField("funcCode", 0x91),
                   ByteEnumField("exceptCode", 1, _modbus_exceptions)]