4#ifndef _Stroika_Foundation_IO_Network_InternetProtocol_IP_h_
5#define _Stroika_Foundation_IO_Network_InternetProtocol_IP_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#if qStroika_Foundation_Common_Platform_Linux
10#include <netinet/ip.h>
13#include "Stroika/Foundation/Common/Common.h"
15#include "Stroika/Foundation/Memory/Common.h"
41 eDEFAULT = eIPV4AndIPV6,
79#if qStroika_Foundation_Common_Platform_Linux
80 using PacketHeader = ::iphdr;
82 Stroika_Foundation_Common_STRUCT_PACKED (
struct iphdr_le_ {
95 Stroika_Foundation_Common_STRUCT_PACKED (
struct iphdr_be_ {
108 using PacketHeader = conditional_t<
Common::GetEndianness () == Common::Endian::eBig, iphdr_be_, iphdr_le_>;
110 static_assert (
sizeof (PacketHeader) == 20,
111 "Check Stroika_Foundation_Common_STRUCT_PACKED, or builtin definition of iphdr: iphdr size wrong");
116 uint16_t ip_checksum (
const void* packetStart,
const void* packetEnd);
#define Stroika_Define_Enum_Bounds(FIRST_ITEM, LAST_ITEM)
constexpr Endian GetEndianness()
returns native (std::endian::native) Endianness flag. Can be complicated (mixed, etc)....
bool SupportIPV4(IPVersionSupport flag)
bool SupportIPV6(IPVersionSupport flag)