37#define IPV6_NEXT_HOPOPT 0
38#define IPV6_NEXT_TCP 6
39#define IPV6_NEXT_UDP 17
40#define IPV6_NEXT_ICMPV6 58
42#if defined(ARCH_X64) || defined(ARCH_ARM64)
58#if defined(ARCH_X64) || defined(ARCH_ARM64)
64 for (i = 0; i < 16; i++)
70 for (i = 0; i < 16; i++) {
71 if (
a->s6_addr[i] !=
b->s6_addr[i])
77static inline int ip6_addr_is_zero(
const ip6_addr*
a) {
79 for (i = 0; i < 16; i++) {
80 if (
a->s6_addr[i] != 0)
86static inline int ip6_is_multicast(
const ip6_addr*
a) {
87 return a->s6_addr[0] == 0xFF;
90static inline int ip6_is_linklocal(
const ip6_addr*
a) {
91 return a->s6_addr[0] == 0xFE && (
a->s6_addr[1] & 0xC0) == 0x80;
107 for (i = 0; i < 16; i++)
109 out->s6_addr[0] = 0xFF;
110 out->s6_addr[1] = 0x02;
111 out->s6_addr[11] = 0x01;
112 out->s6_addr[12] = 0xFF;
129 full = prefixLen / 8;
131 for (i = 0; i < full; i++) {
132 if (
a->s6_addr[i] !=
b->s6_addr[i])
136 mask = (
uint8_t)(0xFF << (8 - rem));
137 if ((
a->s6_addr[full] & mask) != (
b->s6_addr[full] & mask))
145 return ((l & 0xFFu) << 24) | ((l & 0xFF00u) << 8) |
146 ((l & 0xFF0000u) >> 8) | ((l & 0xFF000000u) >> 24);
150 return (
uint8_t)((ipv6_bswap32(
h->ver_tc_fl) >> 28) & 0xF);
154 return (
uint8_t)((ipv6_bswap32(
h->ver_tc_fl) >> 20) & 0xFF);
158 return ipv6_bswap32(
h->ver_tc_fl) & 0xFFFFF;
165 h->ver_tc_fl = ipv6_bswap32(v);
uint8_t mac[6]
Definition main.cpp:127
size_t a
Definition main.cpp:156
size_t b
Definition main.cpp:156
#define out(...)
Definition main.cpp:65
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
GameVersion_t version
Definition d_main.c:943
AuVFSNode * nic
Definition e1000.cpp:67
struct _ipv6_head_ IPv6Header
uint16_t IPv6PseudoChecksum(const ip6_addr *src, const ip6_addr *dst, uint32_t length, uint8_t nextHeader, const void *data, size_t dataLen)
Definition ipv6.cpp:42
void IPV6SendPacket(IPv6Header *packet, AuVFSNode *nic)
Definition ipv6.cpp:118
void IPv6HandlePacket(void *data, AuVFSNode *nic)
Definition ipv6.cpp:103
struct _ip6_addr_ ip6_addr
int CreateIPv6Socket(int type, int protocol)
Definition ipv6.cpp:112
void * data
Definition kthread.h:30
int h
Definition layout.c:118
uint8_t s6_addr[16]
Definition ipv6.h:46
uint8_t nextHeader
Definition ipv6.h:52
uint8_t hopLimit
Definition ipv6.h:53
uint8_t payload[]
Definition ipv6.h:56
ip6_addr destIP
Definition ipv6.h:55
ip6_addr srcIP
Definition ipv6.h:54
uint32_t ver_tc_fl
Definition ipv6.h:50
uint16_t payloadLen
Definition ipv6.h:51