1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
Const
IPPROTO_IP = 0;
IPPROTO_HOPOPTS = 0;
IPPROTO_ICMP = 1;
IPPROTO_IGMP = 2;
IPPROTO_IPIP = 4;
IPPROTO_TCP = 6;
IPPROTO_EGP = 8;
IPPROTO_PUP = 12;
IPPROTO_UDP = 17;
IPPROTO_IDP = 22;
IPPROTO_TP = 29;
IPPROTO_IPV6 = 41;
IPPROTO_ROUTING = 43;
IPPROTO_FRAGMENT = 44;
IPPROTO_RSVP = 46;
IPPROTO_GRE = 47;
IPPROTO_ESP = 50;
IPPROTO_AH = 51;
IPPROTO_ICMPV6 = 58;
IPPROTO_NONE = 59;
IPPROTO_DSTOPTS = 60;
IPPROTO_MTP = 92;
IPPROTO_ENCAP = 98;
IPPROTO_PIM = 103;
IPPROTO_COMP = 108;
IPPROTO_RAW = 255;
IPPROTO_MAX = 256;
type
Pin_port_t = ^in_port_t;
in_port_t = uint16_t;
Const
IPPORT_ECHO = 7;
IPPORT_DISCARD = 9;
IPPORT_SYSTAT = 11;
IPPORT_DAYTIME = 13;
IPPORT_NETSTAT = 15;
IPPORT_FTP = 21;
IPPORT_TELNET = 23;
IPPORT_SMTP = 25;
IPPORT_TIMESERVER = 37;
IPPORT_NAMESERVER = 42;
IPPORT_WHOIS = 43;
IPPORT_MTP = 57;
IPPORT_TFTP = 69;
IPPORT_RJE = 77;
IPPORT_FINGER = 79;
IPPORT_TTYLINK = 87;
IPPORT_SUPDUP = 95;
IPPORT_EXECSERVER = 512;
IPPORT_LOGINSERVER = 513;
IPPORT_CMDSERVER = 514;
IPPORT_EFSSERVER = 520;
IPPORT_BIFFUDP = 512;
IPPORT_WHOSERVER = 513;
IPPORT_ROUTESERVER = 520;
IPPORT_RESERVED = 1024;
IPPORT_USERRESERVED = 5000;
type
Pin_addr_t = ^in_addr_t;
in_addr_t = uint32_t;
Pin_addr = ^in_addr;
{
in_addr = record
s_addr : in_addr_t;
end;
}
const
IN_CLASSA_NET = $ff000000;
IN_CLASSA_NSHIFT = 24;
IN_CLASSA_HOST = $ffffffff and ( not (IN_CLASSA_NET));
IN_CLASSA_MAX = 128;
const
IN_CLASSB_NET = $ffff0000;
IN_CLASSB_NSHIFT = 16;
IN_CLASSB_HOST = $ffffffff and ( not (IN_CLASSB_NET));
IN_CLASSB_MAX = 65536;
const
IN_CLASSC_NET = $ffffff00;
IN_CLASSC_NSHIFT = 8;
IN_CLASSC_HOST = $ffffffff and ( not (IN_CLASSC_NET));
Function IN_CLASSA(a: in_addr_t): Boolean;
Function IN_CLASSB(a: in_addr_t): Boolean;
Function IN_CLASSC(a: in_addr_t): Boolean;
Function IN_CLASSD(a: in_addr_t): Boolean;
Function IN_MULTICAST(a: in_addr_t): Boolean;
Function IN_EXPERIMENTAL(a: in_addr_t): Boolean;
Function IN_BADCLASS(a: in_addr_t): Boolean;
const
IN_LOOPBACKNET = 127;
INADDR_LOOPBACK = in_addr_t($7f000001);
INADDR_UNSPEC_GROUP = in_addr_t($e0000000);
INADDR_ALLHOSTS_GROUP = in_addr_t($e0000001);
INADDR_ALLRTRS_GROUP = in_addr_t($0000002);
INADDR_MAX_LOCAL_GROUP = in_addr_t($e00000ff);
type
Pin6_addr = ^in6_addr;
in6_addr = record
case longint of
0 : ( in6_u : record
case longint of
0 : ( u6_addr8 : array[0..15] of uint8_t );
1 : ( u6_addr16 : array[0..7] of uint16_t );
2 : ( u6_addr32 : array[0..3] of uint32_t );
end;);
1 : (case Integer of
0: (s6_addr: packed array [0..16-1] of __uint8_t);
1: (s6_addr16: packed array [0..8-1] of uint16_t);
2: (s6_addr32: packed array [0..4-1] of uint32_t);
);
end;
Const
IN6ADDR_ANY_INIT : in6_addr = ( in6_u : (U6_addr8 : (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 )) );
IN6ADDR_LOOPBACK_INIT : in6_addr = ( in6_u : (U6_addr8 : ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 )));
const
INET_ADDRSTRLEN = 16;
INET6_ADDRSTRLEN = 46;
Type
Psockaddr_in6 = ^sockaddr_in6;
sockaddr_in6 = record
sin6_family: sa_family_t;
sin6_port : in_port_t;
sin6_flowinfo : uint32_t;
sin6_addr : in6_addr;
sin6_scope_id : uint32_t;
end;
Pipv6_mreq = ^ipv6_mreq;
ipv6_mreq = record
ipv6mr_multiaddr : in6_addr;
ipv6mr_interface : dword;
end;
type
in6_pktinfo = {packed} record
ipi6_addr: in6_addr; { src/dst IPv6 address }
ipi6_ifindex: Cardinal; { send/recv interface index }
end;
Function IN6_IS_ADDR_UNSPECIFIED(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_LOOPBACK(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_MULTICAST(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_LINKLOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_SITELOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_V4MAPPED(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_V4COMPAT(const a: in6_addr): Boolean;
Function IN6_ARE_ADDR_EQUAL(const a, b: in6_addr): Boolean;
Function IN6_IS_ADDR_MC_NODELOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_MC_LINKLOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_MC_SITELOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_MC_ORGLOCAL(const a: in6_addr): Boolean;
Function IN6_IS_ADDR_MC_GLOBAL(const a: in6_addr): Boolean;
function ntohl(__netlong:uint32_t):uint32_t;cdecl;external clib name 'ntohl';
function ntohs(__netshort:uint16_t):uint16_t;cdecl;external clib name 'ntohs';
function htonl(__hostlong:uint32_t):uint32_t;cdecl;external clib name 'htonl';
function htons(__hostshort:uint16_t):uint16_t;cdecl;external clib name 'htons';
function bindresvport6(__sockfd:longint; __sock_in:Psockaddr_in6):longint;cdecl;external clib name 'bindresvport6';
function bindresvport(__sockfd:longint; __sock_in:Psockaddr_in):longint;cdecl;external clib name 'bindresvport';
|