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;
161 #pragma pack(push, 1)
165 uint32_t ipv4Address;
175 static_assert(
sizeof(someipsdhdroptionsipv4) == 12,
"someipsdhdroptionsipv4 size is not 12 bytes");
223 #pragma pack(push, 1)
227 uint8_t ipv6Address[16];
237 static_assert(
sizeof(someipsdhdroptionsipv6) == 24,
"someipsdhdroptionsipv6 size is not 24 bytes");
289 #pragma pack(push, 1)
298 static_assert(
sizeof(someipsdhdroptionsload) == 8,
"someipsdhdroptionsload size is not 8 bytes");
331 #pragma pack(push, 1)
340 #if (BYTE_ORDER == LITTLE_ENDIAN)
363 static_assert(
sizeof(
someipsdhdrentry) == 16,
"someipsdhdrentry size is not 16 bytes");
373 uint32_t minorVersion);
384 uint8_t counter, uint16_t eventGroupID);
479 enum class TypeInternal : uint8_t
482 FindService_Internal = 0x00,
484 OfferService_Internal = 0x01,
486 SubscribeEventgroup_Internal = 0x06,
488 SubscribeEventgroupAck_Internal = 0x07,
494 uint8_t* m_ShadowData;
496 void initStdFields(
EntryType type, uint16_t serviceID, uint16_t instanceID, uint8_t majorVersion, uint32_t TTL);
501 static const uint32_t SOMEIPSD_HDR_ENTRY_MASK_TTL = 0x00FFFFFF;
512 typedef std::vector<EntryPtr> EntriesVec;
514 typedef std::vector<OptionPtr> OptionsVec;
532 SomeIpSdLayer(uint16_t serviceID, uint16_t methodID, uint16_t clientID, uint16_t sessionID,
533 uint8_t interfaceVersion,
MsgType type, uint8_t returnCode, uint8_t flags);
543 return port == 30490;
603 #pragma pack(push, 1)
616 static_assert(
sizeof(someipsdhdr) == 20,
"someipsdhdr size is not 20 bytes");
618 uint32_t m_NumOptions;
620 static bool countOptions(uint32_t& count,
const uint8_t* data);
623 bool addOptionIndex(uint32_t indexEntry, uint32_t indexOffset);
626 static size_t getLenEntries(
const uint8_t* data);
627 size_t getLenEntries()
const;
628 static size_t getLenOptions(
const uint8_t* data);
629 size_t getLenOptions()
const;
630 void setLenEntries(uint32_t length);
631 void setLenOptions(uint32_t length);
Definition: IpAddress.h:28
Definition: IpAddress.h:156
Definition: SomeIpLayer.h:15
MsgType
SOME/IP message types.
Definition: SomeIpLayer.h:19
Definition: SomeIpSdLayer.h:243
SomeIpSdConfigurationOption(const std::string &configurationString)
SomeIpSdConfigurationOption(const IDataContainer *dataContainer, size_t offset)
std::string getConfigurationString() const
Definition: SomeIpSdLayer.h:304
EntryType getType() const
Definition: SomeIpSdLayer.h:404
uint16_t getEventgroupId() const
size_t getLength() const
Definition: SomeIpSdLayer.h:411
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:310
@ 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
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:181
IPv6Address getIpAddress() const
SomeIpSdProtocolType getProtocol() const
SomeIpSdIPv6Option(const IDataContainer *dataContainer, size_t offset)
SomeIpSdIPv6Option(IPv6OptionType type, IPv6Address ipAddress, uint16_t port, SomeIpSdProtocolType l4Protocol)
IPv6OptionType
Types of options which are implemented with this class.
Definition: SomeIpSdLayer.h:187
@ IPv6Multicast
IPv6 Multicast Option.
Definition: SomeIpSdLayer.h:191
@ IPv6SdEndpoint
IPv6 SD Endpoint Option.
Definition: SomeIpSdLayer.h:193
@ IPv6Endpoint
IPv6 Endpoint Option.
Definition: SomeIpSdLayer.h:189
Definition: SomeIpSdLayer.h:507
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:541
SomeIpSdLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
void computeCalculateFields() override
Does nothing for this layer.
Definition: SomeIpSdLayer.h:595
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:264
SomeIpSdLoadBalancingOption(const IDataContainer *dataContainer, size_t offset)
uint16_t getWeight() const
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.
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:333
uint32_t data
Minor Version (Service Entry Type) or Counter + Eventgroup ID (Eventgroup Entry Type)
Definition: SomeIpSdLayer.h:360
uint8_t nrOpt2
Numbers of Option #2 (4bit)
Definition: SomeIpSdLayer.h:343
uint32_t majorVersion_ttl
Major Version (8 bit) + TTL (24 bit)
Definition: SomeIpSdLayer.h:358
uint8_t type
Type.
Definition: SomeIpSdLayer.h:335
uint8_t indexFirstOption
Index 1st option.
Definition: SomeIpSdLayer.h:337
uint8_t nrOpt1
Numbers of Option #1 (4bit)
Definition: SomeIpSdLayer.h:345
uint16_t serviceID
Service ID.
Definition: SomeIpSdLayer.h:354
uint8_t indexSecondOption
Index 2nd option.
Definition: SomeIpSdLayer.h:339
uint16_t instanceID
Instance ID.
Definition: SomeIpSdLayer.h:356
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