class PID_REACHABILITY_LEASE_DURATION(PIDPacketBase): name = "PID_REACHABILITY_LEASE_DURATION" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("lease_duration", "", LeaseDurationPacket), ]
class PID_PRODUCT_VERSION(PIDPacketBase): name = "PID_PRODUCT_VERSION" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("productVersion", "", ProductVersionPacket), ]
class PID_METATRAFFIC_MULTICAST_LOCATOR(PIDPacketBase): name = "PID_METATRAFFIC_MULTICAST_LOCATOR" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("locator", "", LocatorPacket), ]
class PID_ENDPOINT_GUID(PIDPacketBase): name = "PID_ENDPOINT_GUID" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("guid", "", GUIDPacket), ]
class PID_RTI_DOMAIN_ID(PIDPacketBase): name = "PID_RTI_DOMAIN_ID" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), EField(IntField("domainId", 0), endianness=FORMAT_LE, endianness_from=None) ]
class PID_VENDOR_BUILTIN_ENDPOINT_SET(PIDPacketBase): name = "PID_VENDOR_BUILTIN_ENDPOINT_SET" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), EField(XIntField("flags", 0), endianness=FORMAT_LE, endianness_from=None) ]
class PID_PLUGIN_PROMISCUITY_KIND(PIDPacketBase): name = "PID_PLUGIN_PROMISCUITY_KIND" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), EField(XIntField("promiscuityKind", 0x0), endianness=FORMAT_LE, endianness_from=None) ]
class RTPSSubMessage_INFO_TS(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | INFO_TS | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ | | + Timestamp timestamp [only if T==1] + | | +---------------+---------------+---------------+---------------+ """ name = "RTPS INFO_TS (0x09)" fields_desc = [ XByteField("submessageId", 0x09), FlagsField( "submessageFlags", 0, 8, ["E", "I", "?", "?", "?", "?", "?", "?"]), EField(ShortField("octetsToNextHeader", 0)), ConditionalField( Field("ts_seconds", default=0, fmt="<l"), lambda pkt: str(pkt.submessageFlags).find("I"), ), ConditionalField( Field("ts_fraction", default=0, fmt="<L"), lambda pkt: str(pkt.submessageFlags).find("I"), ), ]
class PID_TRANSPORT_INFO_LIST(PIDPacketBase): name = "PID_TRANSPORT_INFO_LIST" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), XStrFixedLenField("padding", "", 4), EField( PacketListField("transportInfo", [], TransportInfoPacket, length_from=lambda p: p.parameterLength - 4)) ]
class PID_MULTICAST_LOCATOR(PIDPacketBase): name = "PID_MULTICAST_LOCATOR" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), StrLenField( "parameterData", "", length_from=lambda x: x.parameterLength, max_length=STR_MAX_LEN, ), ]
class PID_VENDOR_ID(PIDPacketBase): name = "PID_VENDOR_ID" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("vendorId", "", VendorIdPacket), StrLenField( "padding", "", length_from=lambda x: x.parameterLength - 2, max_length=STR_MAX_LEN, ), ]
class PID_PROTOCOL_VERSION(PIDPacketBase): name = "PID_PROTOCOL_VERSION" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), PacketField("protocolVersion", "", ProtocolVersionPacket), StrLenField( "padding", "", length_from=lambda x: x.parameterLength - 2, max_length=STR_MAX_LEN, ), ]
class RTPSSubMessage_HEARTBEAT(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | HEARTBEAT | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ | EntityId readerEntityId | +---------------+---------------+---------------+---------------+ | EntityId writerEntityId | +---------------+---------------+---------------+---------------+ | | + SequenceNumber firstAvailableSeqNumber + | | +---------------+---------------+---------------+---------------+ | | + SequenceNumber lastSeqNumber + | | +---------------+---------------+---------------+---------------+ | Counter count | +---------------+---------------+---------------+---------------+ """ name = "RTPS HEARTBEAT (0x07)" fields_desc = [ XByteField("submessageId", 0x07), XByteField("submessageFlags", 0), EField(ShortField("octetsToNextHeader", 0)), EnumField( "reader_id", default=b"\x00\x00\x00\x00", fmt="4s", enum=_rtps_reserved_entity_ids, ), EnumField( "writer_id", default=b"\x00\x00\x00\x00", fmt="4s", enum=_rtps_reserved_entity_ids, ), XLongField("firstAvailableSeqNum", 0), XLongField("lastSeqNum", 0), EField(IntField("count", 0)), ]
class PIDPacketBase(Packet): name = "PID Base Packet" fields_desc = [ EField( ParameterIdField("parameterId", 0), endianness=FORMAT_LE, endianness_from=None, ), EField(ShortField("parameterLength", 0), endianness=FORMAT_LE, endianness_from=None), StrLenField( "parameterData", "", length_from=lambda x: x.parameterLength, max_length=STR_MAX_LEN, ), ] def extract_padding(self, p): return b"", p
class ParticipantMessageDataPacket(EPacket): name = "Participant Message Data" fields_desc = [ PacketField("guidPrefix", "", GUIDPrefixPacket), XIntField("kind", 0), EField(XIntField("sequenceSize", 0)), # octets StrLenField( "serializedData", "", length_from=lambda x: x.sequenceSize * 4, max_length=STR_MAX_LEN, ), ]
class RTPSSubMessage_PAD(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PAD | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ """ name = "RTPS PAD (0x01)" fields_desc = [ XByteField("submessageId", 0x01), XByteField("submessageFlags", 0), EField(ShortField("octetsToNextHeader", 0)), ]
class RTPSSubMessage_ACKNACK(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ACKNACK | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ | EntityId readerEntityId | +---------------+---------------+---------------+---------------+ | EntityId writerEntityId | +---------------+---------------+---------------+---------------+ | | + SequenceNumberSet readerSNState + | | +---------------+---------------+---------------+---------------+ | Counter count | +---------------+---------------+---------------+---------------+ """ name = "RTPS ACKNACK (0x06)" fields_desc = [ XByteField("submessageId", 0x06), XByteField("submessageFlags", 0x00), EField(ShortField("octetsToNextHeader", 0)), EnumField( "reader_id", default=b"\x00\x00\x00\x00", fmt="4s", enum=_rtps_reserved_entity_ids, ), EnumField( "writer_id", default=b"\x00\x00\x00\x00", fmt="4s", enum=_rtps_reserved_entity_ids, ), XStrLenField( "readerSNState", 0, length_from=lambda pkt: pkt.octetsToNextHeader - 8 - 4 ), XNBytesField("count", 0, 4), ]
class RTPSSubMessage_INFO_DST(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | INFO_DST | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ | | + GuidPrefix guidPrefix + | | +---------------+---------------+---------------+---------------+ """ name = "RTPS INFO_DTS (0x0e)" endianness = ">" fields_desc = [ XByteField("submessageId", 0x0E), XByteField("submessageFlags", 0), EField(ShortField("octetsToNextHeader", 0)), PacketField("guidPrefix", "", GUIDPrefixPacket), ]
class RTPSSubMessage_DATA(EPacket): """ 0...2...........7...............15.............23...............31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RTPS_DATA | flags | octetsToNextHeader | +---------------+---------------+---------------+---------------+ | Flags extraFlags | octetsToInlineQos | +---------------+---------------+---------------+---------------+ | EntityId readerEntityId | +---------------+---------------+---------------+---------------+ | EntityId writerEntityId | +---------------+---------------+---------------+---------------+ | | + SequenceNumber writerSeqNum + | | +---------------+---------------+---------------+---------------+ | | ~ ParameterList inlineQos [only if Q==1] ~ | | +---------------+---------------+---------------+---------------+ | | ~ SerializedData serializedData [only if D==1 || K==1] ~ | | +---------------+---------------+---------------+---------------+ """ name = "RTPS DATA (0x15)" fields_desc = [ XByteField("submessageId", 0x15), XByteField("submessageFlags", 0x00), EField(ShortField("octetsToNextHeader", 0)), XNBytesField("extraFlags", 0x0000, 2), EField(ShortField("octetsToInlineQoS", 0)), X3BytesField("readerEntityIdKey", 0), XByteField("readerEntityIdKind", 0), X3BytesField("writerEntityIdKey", 0), XByteField("writerEntityIdKind", 0), # EnumField( # "reader_id", # default=b"\x00\x00\x00\x00", # fmt="4s", # enum=_rtps_reserved_entity_ids, # ), # EnumField( # "writer_id", # default=b"\x00\x00\x00\x00", # fmt="4s", # enum=_rtps_reserved_entity_ids, # ), EField(IntField("writerSeqNumHi", 0)), EField(IntField("writerSeqNumLow", 0)), # ------------------------------------- ConditionalField( InlineQoSPacketField("inlineQoS", "", InlineQoSPacket), lambda pkt: pkt.submessageFlags & 0b00000010 == 0b00000010, ), ConditionalField( DataPacketField("key", "", DataPacket), lambda pkt: pkt.submessageFlags & 0b00001000 == 0b00001000, ), ConditionalField( DataPacketField("data", "", DataPacket), lambda pkt: pkt.submessageFlags & 0b00000100 == 0b00000100, ), ]