8 #include <unordered_map>
100 uint8_t* m_ShadowData;
103 SomeIpSdOption() : m_DataContainer(nullptr), m_Offset(0), m_ShadowData(nullptr), m_DataLen(0)
107 : m_DataContainer(dataContainer), m_Offset(offset), m_ShadowData(nullptr), m_DataLen(0)
112 SomeIpSdOption(
const SomeIpSdOption&) =
delete;
113 SomeIpSdOption& operator=(
const SomeIpSdOption&) =
delete;
162 return data && dataLen >=
sizeof(someipsdhdroptionsipv4);
168 #pragma pack(push, 1)
169 struct someipsdhdroptionsipv4 : someipsdhdroptionsbase
172 uint32_t ipv4Address;
182 static_assert(
sizeof(someipsdhdroptionsipv4) == 12,
"someipsdhdroptionsipv4 size is not 12 bytes");
231 return data && dataLen >=
sizeof(someipsdhdroptionsipv6);
237 #pragma pack(push, 1)
238 struct someipsdhdroptionsipv6 : someipsdhdroptionsbase
241 uint8_t ipv6Address[16];
251 static_assert(
sizeof(someipsdhdroptionsipv6) == 24,
"someipsdhdroptionsipv6 size is not 24 bytes");
311 return data && dataLen >=
sizeof(someipsdhdroptionsload);
317 #pragma pack(push, 1)
318 struct someipsdhdroptionsload : someipsdhdroptionsbase
326 static_assert(
sizeof(someipsdhdroptionsload) == 8,
"someipsdhdroptionsload size is not 8 bytes");
359 #pragma pack(push, 1)
368 #if (BYTE_ORDER == LITTLE_ENDIAN)
391 static_assert(
sizeof(
someipsdhdrentry) == 16,
"someipsdhdrentry size is not 16 bytes");
401 uint32_t minorVersion);
412 uint8_t counter, uint16_t eventGroupID);
507 enum class TypeInternal : uint8_t
510 FindService_Internal = 0x00,
512 OfferService_Internal = 0x01,
514 SubscribeEventgroup_Internal = 0x06,
516 SubscribeEventgroupAck_Internal = 0x07,
522 uint8_t* m_ShadowData;
524 void initStdFields(
EntryType type, uint16_t serviceID, uint16_t instanceID, uint8_t majorVersion, uint32_t TTL);
529 static const uint32_t SOMEIPSD_HDR_ENTRY_MASK_TTL = 0x00FFFFFF;
540 using EntriesVec = std::vector<EntryPtr>;
542 using OptionsVec = std::vector<OptionPtr>;
560 SomeIpSdLayer(uint16_t serviceID, uint16_t methodID, uint16_t clientID, uint16_t sessionID,
561 uint8_t interfaceVersion,
MsgType type, uint8_t returnCode, uint8_t flags);
571 return port == 30490;
631 #pragma pack(push, 1)
644 static_assert(
sizeof(someipsdhdr) == 20,
"someipsdhdr size is not 20 bytes");
646 uint32_t m_NumOptions;
648 static bool countOptions(uint32_t& count,
const uint8_t* data);
651 bool addOptionIndex(uint32_t indexEntry, uint32_t indexOffset);
654 static size_t getLenEntries(
const uint8_t* data);
655 size_t getLenEntries()
const;
656 static size_t getLenOptions(
const uint8_t* data);
657 size_t getLenOptions()
const;
658 void setLenEntries(uint32_t length);
659 void setLenOptions(uint32_t length);
Definition: IpAddress.h:30
Definition: IpAddress.h:165
Definition: SomeIpLayer.h:15
MsgType
SOME/IP message types.
Definition: SomeIpLayer.h:19
Definition: SomeIpSdLayer.h:257
SomeIpSdConfigurationOption(const std::string &configurationString)
SomeIpSdConfigurationOption(const IDataContainer *dataContainer, size_t offset)
static bool isDataValid(const IDataContainer *data, size_t dataLen)
Definition: SomeIpSdLayer.h:276
std::string getConfigurationString() const
Definition: SomeIpSdLayer.h:332
EntryType getType() const
Definition: SomeIpSdLayer.h:432
uint16_t getEventgroupId() const
size_t getLength() const
Definition: SomeIpSdLayer.h:439
uint8_t * getDataPtr() const
void setMajorVersion(uint8_t majorVersion)
void setCounter(uint8_t counter)
void setEventgroupId(uint16_t eventgroupID)
uint8_t getMajorVersion() const
uint32_t getNumOptions() const
EntryType
Types of entries that can occur in SOME/IP-SD.
Definition: SomeIpSdLayer.h:338
@ SubscribeEventgroupNack
Subscribe Eventgroup Negative Acknowledgement.
@ SubscribeEventgroup
Subscribe Eventgroup.
@ UnknownEntryType
Unknown Entry Type.
@ StopOfferService
Stop Offer Service.
@ StopSubscribeEventgroup
Stop Subscribe Eventgroup.
@ SubscribeEventgroupAck
Subscribe Eventgroup Acknowledgment.
@ OfferService
Offer Service.
@ FindService
Find Service.
SomeIpSdEntry(EntryType type, uint16_t serviceID, uint16_t instanceID, uint8_t majorVersion, uint32_t TTL, uint8_t counter, uint16_t eventGroupID)
void setMinorVersion(uint32_t minorVersion)
~SomeIpSdEntry()
Destroy the SomeIpSd Entry object and delete allocated data if it has been allocated by a constructor...
uint16_t getInstanceId() const
void setInstanceId(uint16_t instanceId)
void setTtl(uint32_t ttl)
uint8_t getCounter() const
void setServiceId(uint16_t serviceId)
SomeIpSdEntry(EntryType type, uint16_t serviceID, uint16_t instanceID, uint8_t majorVersion, uint32_t TTL, uint32_t minorVersion)
uint16_t getServiceId() const
SomeIpSdEntry(const SomeIpSdLayer *pSomeIpSdLayer, size_t offset)
uint32_t getMinorVersion() const
someipsdhdrentry * getSomeIpSdEntryHeader() const
Definition: SomeIpSdLayer.h:119
SomeIpSdIPv4Option(IPv4OptionType type, IPv4Address ipAddress, uint16_t port, SomeIpSdProtocolType l4Protocol)
IPv4Address getIpAddress() const
static bool isDataValid(const IDataContainer *data, size_t dataLen)
Definition: SomeIpSdLayer.h:160
SomeIpSdIPv4Option(const IDataContainer *dataContainer, size_t offset)
IPv4OptionType
Types of options which are implemented with this class.
Definition: SomeIpSdLayer.h:125
@ IPv4Multicast
IPv4 Multicast Option.
Definition: SomeIpSdLayer.h:129
@ IPv4SdEndpoint
IPv4 SD Endpoint Option.
Definition: SomeIpSdLayer.h:131
@ IPv4Endpoint
IPv4 Endpoint Option.
Definition: SomeIpSdLayer.h:127
SomeIpSdProtocolType getProtocol() const
Definition: SomeIpSdLayer.h:188
IPv6Address getIpAddress() const
SomeIpSdProtocolType getProtocol() const
SomeIpSdIPv6Option(const IDataContainer *dataContainer, size_t offset)
SomeIpSdIPv6Option(IPv6OptionType type, IPv6Address ipAddress, uint16_t port, SomeIpSdProtocolType l4Protocol)
static bool isDataValid(const IDataContainer *data, size_t dataLen)
Definition: SomeIpSdLayer.h:229
IPv6OptionType
Types of options which are implemented with this class.
Definition: SomeIpSdLayer.h:194
@ IPv6Multicast
IPv6 Multicast Option.
Definition: SomeIpSdLayer.h:198
@ IPv6SdEndpoint
IPv6 SD Endpoint Option.
Definition: SomeIpSdLayer.h:200
@ IPv6Endpoint
IPv6 Endpoint Option.
Definition: SomeIpSdLayer.h:196
Definition: SomeIpSdLayer.h:535
uint32_t addEntry(const SomeIpSdEntry &entry)
const OptionsVec getOptionsFromEntry(uint32_t index) const
std::string toString() const override
bool addOptionTo(uint32_t indexEntry, const SomeIpSdOption &option)
static bool isSomeIpSdPort(uint16_t port)
Definition: SomeIpSdLayer.h:569
SomeIpSdLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
void computeCalculateFields() override
Does nothing for this layer.
Definition: SomeIpSdLayer.h:623
static bool isDataValid(const uint8_t *data, size_t dataLen)
uint32_t getNumEntries() const
~SomeIpSdLayer() override=default
Destroy the layer object.
const OptionsVec getOptions() const
SomeIpSdLayer(uint16_t serviceID, uint16_t methodID, uint16_t clientID, uint16_t sessionID, uint8_t interfaceVersion, MsgType type, uint8_t returnCode, uint8_t flags)
void setFlags(uint8_t flags)
uint32_t getNumOptions() const
const EntriesVec getEntries() const
Definition: SomeIpSdLayer.h:285
SomeIpSdLoadBalancingOption(const IDataContainer *dataContainer, size_t offset)
uint16_t getWeight() const
static bool isDataValid(const IDataContainer *data, size_t dataLen)
Definition: SomeIpSdLayer.h:309
uint16_t getPriority() const
SomeIpSdLoadBalancingOption(uint16_t priority, uint16_t weight)
Definition: SomeIpSdLayer.h:33
OptionType
Types of options currently available for the SOME/IP-SD protocol.
Definition: SomeIpSdLayer.h:39
@ IPv6Endpoint
IPv6 Endpoint Option.
@ IPv4Endpoint
IPv4 Endpoint Option.
@ IPv6Multicast
IPv6 Multicast Option.
@ LoadBalancing
Load Balancing Option.
@ IPv4Multicast
IPv4 Multicast Option.
@ Unknown
Unknown Option Type.
@ IPv4SdEndpoint
IPv4 SD Endpoint Option.
@ IPv6SdEndpoint
IPv6 SD Endpoint Option.
@ ConfigurationString
Configuration Option.
someipsdhdroptionsbase * getSomeIpSdOptionHeader() const
uint8_t * getDataPtr() const
virtual ~SomeIpSdOption()
Destroy the SOME/IP-SD Option object and delete allocated data if it has been allocated by a construc...
OptionType getType() const
size_t getLength() const
Definition: SomeIpSdLayer.h:84
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
SomeIpSdProtocolType
Types of protocols that can be referenced in SOME/IP-SD.
Definition: SomeIpSdLayer.h:21
@ SD_UDP
UDP.
Definition: SomeIpSdLayer.h:25
@ SD_TCP
TCP.
Definition: SomeIpSdLayer.h:23
Definition: SomeIpLayer.h:56
Definition: SomeIpSdLayer.h:361
uint32_t data
Minor Version (Service Entry Type) or Counter + Eventgroup ID (Eventgroup Entry Type)
Definition: SomeIpSdLayer.h:388
uint8_t nrOpt2
Numbers of Option #2 (4bit)
Definition: SomeIpSdLayer.h:371
uint32_t majorVersion_ttl
Major Version (8 bit) + TTL (24 bit)
Definition: SomeIpSdLayer.h:386
uint8_t type
Type.
Definition: SomeIpSdLayer.h:363
uint8_t indexFirstOption
Index 1st option.
Definition: SomeIpSdLayer.h:365
uint8_t nrOpt1
Numbers of Option #1 (4bit)
Definition: SomeIpSdLayer.h:373
uint16_t serviceID
Service ID.
Definition: SomeIpSdLayer.h:382
uint8_t indexSecondOption
Index 2nd option.
Definition: SomeIpSdLayer.h:367
uint16_t instanceID
Instance ID.
Definition: SomeIpSdLayer.h:384
Definition: SomeIpSdLayer.h:64
uint8_t reserved
Reserved.
Definition: SomeIpSdLayer.h:70
uint16_t length
Length - excluding the 16 bit Length field and the 8 bit type flag.
Definition: SomeIpSdLayer.h:66
uint8_t type
Type.
Definition: SomeIpSdLayer.h:68