59#define hyphenchar(c) ((c) == 0x2d)
60#define bslashchar(c) ((c) == 0x5c)
61#define periodchar(c) ((c) == PERIOD)
62#define asterchar(c) ((c) == 0x2a)
63#define alphachar(c) (((c) >= 0x41 && (c) <= 0x5a) || \
64 ((c) >= 0x61 && (c) <= 0x7a))
65#define digitchar(c) ((c) >= 0x30 && (c) <= 0x39)
67#define borderchar(c) (alphachar(c) || digitchar(c))
68#define middlechar(c) (borderchar(c) || hyphenchar(c))
69#define domainchar(c) ((c) > 0x20 && (c) < 0x7f)
88#define ASSERT_STATE(state_is, state_shouldbe) {}
90#define TIME_MAX 2147483647
105#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
178 if (!
ip->client->active ||
ip->client->active->is_bootp) {
195 time(&
ip->client->first_sending);
196 ip->client->interval =
ip->client->config->initial_interval;
199 ip->client->medium =
NULL;
219 ip->client->xid =
ip->client->packet.xid;
222 time(&
ip->client->first_sending);
223 ip->client->interval =
ip->client->config->initial_interval;
276 for (lp =
ip->client->offered_leases; lp; lp =
next) {
290 ip->client->offered_leases =
NULL;
302 ip->client->new = picked;
321 ip->client->interval =
ip->client->config->initial_interval;
325 ip->client->xid =
ip->client->packet.xid;
364 note(
"packet_to_lease failed.");
368 ip->client->new = lease;
381 if (
ip->client->new->expiry < 0)
384 if (
ip->client->new->expiry < 60)
385 ip->client->new->expiry = 60;
393 ip->client->new->renewal =
ip->client->new->expiry / 2;
400 ip->client->new->rebind =
ip->client->new->renewal +
401 ip->client->new->renewal / 2 +
ip->client->new->renewal / 4;
404 ip->client->new->lease =
ip->client->new->expiry;
422 CHAR Buffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
432 struct iaddr nameserver;
441 for(
i = 0;
i < addrs;
i++ ) {
447 if(
i != addrs-1 )
strcat( nsbuf,
"," );
469 CHAR Buffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
486 CHAR Buffer1[
MAX_PATH] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
487 CHAR Buffer2[
MAX_PATH] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters";
488 HKEY RegKey1, RegKey2;
536 CHAR Buffer1[
MAX_PATH] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
537 CHAR Buffer2[
MAX_PATH] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters";
538 HKEY RegKey1, RegKey2;
562 CHAR Buffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
563 struct iaddr netmask;
608 DWORD dwAddressType = 0;
655 CHAR Buffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
656 CHAR IpAddress[] =
"0.0.0.0";
657 CHAR SubnetMask[] =
"255.0.0.0";
687 new_time =
cur_time + lease - (lease / 8);
689 DWORD dwAddressType = 0;
716 ip->client->new->medium =
ip->client->medium;
719 if (
ip->client->active)
721 ip->client->active =
ip->client->new;
731 note(
"bound to %s -- renewal in %ld seconds.",
732 piaddr(
ip->client->active->address),
733 (
long int)(
ip->client->active->renewal -
cur_time));
741 warning(
"Could not find adapter for info %p\n",
ip);
753 if (
ip->client->active) {
755 ip->client->active =
NULL;
765 warning(
"Could not find adapter for info %p\n",
ip);
785 ip->client->xid =
ip->client->packet.xid;
788 memcpy(
ip->client->destination.iabuf,
ip->client->active->
790 ip->client->destination.len = 4;
794 time(&
ip->client->first_sending);
795 ip->client->interval =
ip->client->config->initial_interval;
864 int arp_timeout_needed = 0;
867 "DHCPOFFER" :
"BOOTREPLY";
886 for (
i = 0;
ip->client->config->required_options[
i];
i++) {
888 required_options[
i]].len) {
889 note(
"%s isn't satisfactory.",
name);
895 for (lease =
ip->client->offered_leases;
896 lease; lease = lease->
next) {
907 note(
"packet_to_lease failed.");
921 note(
"Arp check failed\n");
927 ip->client->first_sending +
ip->client->config->select_interval;
931 if (lease->
address.len ==
ip->client->requested_address.len &&
933 ip->client->requested_address.iabuf,
934 ip->client->requested_address.len)) {
935 lease->
next =
ip->client->offered_leases;
936 ip->client->offered_leases = lease;
942 if (
ip->client->offered_leases &&
943 (
cur_time + arp_timeout_needed) > stop_selecting)
944 arp_timeout_needed = 0;
948 if (!
ip->client->offered_leases)
949 ip->client->offered_leases = lease;
951 for (lp =
ip->client->offered_leases; lp->
next;
961 if (stop_selecting -
cur_time < arp_timeout_needed)
962 stop_selecting =
cur_time + arp_timeout_needed;
967 if (stop_selecting <= 0)
987 warning(
"dhcpoffer: no memory to record lease.");
991 memset(lease, 0,
sizeof(*lease));
994 for (
i = 0;
i < 256;
i++) {
999 warning(
"dhcpoffer: no memory for option %d",
i);
1013 warning(
"Invalid lease option - ignoring offer");
1023 if (
packet->
raw->siaddr.S_un.S_addr == 0)
1030 lease->serveraddress.len =
sizeof(
packet->
raw->siaddr);
1031 memcpy(lease->serveraddress.iabuf, &
packet->
raw->siaddr, lease->serveraddress.len);
1041 warning(
"dhcpoffer: no memory for server name.");
1062 warning(
"dhcpoffer: no memory for filename.");
1093 if (!
ip->client->active) {
1094 note(
"DHCPNAK with no active lease.\n");
1099 ip->client->active =
NULL;
1128 if (
interval >
ip->client->config->timeout) {
1136 if (!
ip->client->offered_leases &&
1137 ip->client->config->media) {
1140 if (
ip->client->medium) {
1141 ip->client->medium =
ip->client->medium->next;
1144 if (!
ip->client->medium) {
1146 error(
"No valid media types for %s!",
ip->name);
1147 ip->client->medium =
ip->client->config->media;
1151 note(
"Trying medium \"%s\" %d",
ip->client->medium->string,
1164 if (!
ip->client->interval)
1165 ip->client->interval =
1166 ip->client->config->initial_interval;
1168 ip->client->interval += (
rand() >> 2) %
1169 (2 *
ip->client->interval);
1173 if (
ip->client->interval >
1174 ip->client->config->backoff_cutoff)
1175 ip->client->interval =
1176 ((
ip->client->config->backoff_cutoff / 2)
1178 ip->client->config->backoff_cutoff));
1179 }
else if (!
ip->client->interval)
1180 ip->client->interval =
1181 ip->client->config->initial_interval;
1186 ip->client->first_sending +
ip->client->config->timeout)
1187 ip->client->interval =
1188 (
ip->client->first_sending +
1195 ip->client->packet.secs =
htons(65535);
1196 ip->client->secs =
ip->client->packet.secs;
1198 note(
"DHCPDISCOVER on %s to %s port %d interval %ld",
1221 CHAR szKeyNameBuffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
1223 CHAR SubnetMask[] =
"255.255.0.0";
1224 CHAR AddressBuffer[32];
1238 DWORD dwAddressType = 0;
1240 note(
"No DHCPOFFERS received.");
1349 address_low =
rand();
1350 for (
i = 0;
i <
ip->hw_address.hlen;
i++)
1351 address_low +=
ip->hw_address.haddr[
i];
1353 IpAddress =
htonl(0xA9FE0000 | address_low);
1376 addr.S_un.S_addr = IpAddress;
1434 interval >
ip->client->config->reboot_timeout) {
1444 !
ip->client->medium &&
1445 ip->client->active->medium ) {
1450 ip->client->medium =
ip->client->active->medium;
1475 if (!
ip->client->interval)
1476 ip->client->interval =
ip->client->config->initial_interval;
1478 ip->client->interval += ((
rand() >> 2) %
1479 (2 *
ip->client->interval));
1482 if (
ip->client->interval >
1483 ip->client->config->backoff_cutoff)
1484 ip->client->interval =
1485 ((
ip->client->config->backoff_cutoff / 2) +
1486 ((
rand() >> 2) %
ip->client->interval));
1492 ip->client->active->expiry)
1493 ip->client->interval =
1498 memset(&destination, 0,
sizeof(destination));
1505 ip->client->destination.iabuf,
1506 sizeof(destination.
sin_addr.s_addr));
1519 ip->client->packet.secs =
ip->client->secs;
1524 ip->client->packet.secs =
htons(65535);
1527 note(
"DHCPREQUEST on %s to %s port %d",
ip->name,
1542 note(
"DHCPDECLINE on %s to %s port %d",
ip->name,
1558 memset(&destination, 0,
sizeof(destination));
1560 ip->client->destination.iabuf,
1561 sizeof(destination.
sin_addr.s_addr));
1568 note(
"DHCPRELEASE on %s to %s port %d",
ip->name,
1585 memset(option_elements, 0,
sizeof(option_elements));
1587 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1593 options[
i]->len =
sizeof(discover);
1594 options[
i]->buf_size =
sizeof(discover);
1600 options[
i]->value =
ip->client->config->requested_options;
1601 options[
i]->len =
ip->client->config->requested_option_count;
1603 ip->client->config->requested_option_count;
1608 ip->client->requested_address = lease->
address;
1616 ip->client->requested_address.len = 0;
1619 for (
i = 0;
i < 256;
i++)
1621 ip->client->config->send_options[
i].data) {
1624 ip->client->config->send_options[
i].data;
1626 ip->client->config->send_options[
i].len;
1628 ip->client->config->send_options[
i].len;
1639 ip->client->packet.htype =
ip->hw_address.htype;
1640 ip->client->packet.hlen =
ip->hw_address.hlen;
1641 ip->client->packet.hops = 0;
1643 ip->client->packet.secs = 0;
1644 ip->client->packet.flags = 0;
1646 memset(&(
ip->client->packet.ciaddr),
1647 0,
sizeof(
ip->client->packet.ciaddr));
1648 memset(&(
ip->client->packet.yiaddr),
1649 0,
sizeof(
ip->client->packet.yiaddr));
1650 memset(&(
ip->client->packet.siaddr),
1651 0,
sizeof(
ip->client->packet.siaddr));
1652 memset(&(
ip->client->packet.giaddr),
1653 0,
sizeof(
ip->client->packet.giaddr));
1655 ip->hw_address.haddr,
ip->hw_address.hlen);
1668 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1681 options[
i]->value =
ip->client->config->requested_options;
1682 options[
i]->len =
ip->client->config->requested_option_count;
1684 ip->client->config->requested_option_count;
1700 ip->client->requested_address = lease->
address;
1708 ip->client->requested_address.len = 0;
1711 for (
i = 0;
i < 256;
i++)
1713 ip->client->config->send_options[
i].data) {
1716 ip->client->config->send_options[
i].data;
1718 ip->client->config->send_options[
i].len;
1720 ip->client->config->send_options[
i].len;
1731 ip->client->packet.htype =
ip->hw_address.htype;
1732 ip->client->packet.hlen =
ip->hw_address.hlen;
1733 ip->client->packet.hops = 0;
1734 ip->client->packet.xid =
ip->client->xid;
1735 ip->client->packet.secs = 0;
1744 ip->client->packet.flags = 0;
1746 memset(&
ip->client->packet.ciaddr, 0,
1747 sizeof(
ip->client->packet.ciaddr));
1748 ip->client->packet.flags = 0;
1751 memset(&
ip->client->packet.yiaddr, 0,
1752 sizeof(
ip->client->packet.yiaddr));
1753 memset(&
ip->client->packet.siaddr, 0,
1754 sizeof(
ip->client->packet.siaddr));
1755 memset(&
ip->client->packet.giaddr, 0,
1756 sizeof(
ip->client->packet.giaddr));
1758 ip->hw_address.haddr,
ip->hw_address.hlen);
1766 struct tree_cache server_id_tree, client_id_tree;
1771 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1778 options[
i]->buf_size =
sizeof(decline);
1791 options[
i] = &requested_address_tree;
1799 if (
ip->client->config->send_options[
i].len) {
1801 options[
i]->value =
ip->client->config->send_options[
i].data;
1802 options[
i]->len =
ip->client->config->send_options[
i].len;
1803 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1815 ip->client->packet.htype =
ip->hw_address.htype;
1816 ip->client->packet.hlen =
ip->hw_address.hlen;
1817 ip->client->packet.hops = 0;
1818 ip->client->packet.xid =
ip->client->xid;
1819 ip->client->packet.secs = 0;
1820 ip->client->packet.flags = 0;
1823 memset(&
ip->client->packet.ciaddr, 0,
1824 sizeof(
ip->client->packet.ciaddr));
1825 memset(&
ip->client->packet.yiaddr, 0,
1826 sizeof(
ip->client->packet.yiaddr));
1827 memset(&
ip->client->packet.siaddr, 0,
1828 sizeof(
ip->client->packet.siaddr));
1829 memset(&
ip->client->packet.giaddr, 0,
1830 sizeof(
ip->client->packet.giaddr));
1832 ip->hw_address.haddr,
ip->hw_address.hlen);
1839 struct tree_cache server_id_tree, client_id_tree;
1844 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1851 options[
i]->buf_size =
sizeof(release);
1864 if (
ip->client->config->send_options[
i].len)
1867 options[
i]->value =
ip->client->config->send_options[
i].data;
1868 options[
i]->len =
ip->client->config->send_options[
i].len;
1869 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1879 ip->client->packet.htype =
ip->hw_address.htype;
1880 ip->client->packet.hlen =
ip->hw_address.hlen;
1881 ip->client->packet.hops = 0;
1882 ip->client->packet.xid = 0;
1883 ip->client->packet.secs = 0;
1884 ip->client->packet.flags = 0;
1889 memset(&
ip->client->packet.yiaddr, 0,
1890 sizeof(
ip->client->packet.yiaddr));
1891 memset(&
ip->client->packet.siaddr, 0,
1892 sizeof(
ip->client->packet.siaddr));
1893 memset(&
ip->client->packet.giaddr, 0,
1894 sizeof(
ip->client->packet.giaddr));
1896 ip->hw_address.haddr,
ip->hw_address.hlen);
1908 for (
i = 0;
i < 256;
i++) {
1931 for (lp = ifi->
client->leases; lp; lp = lp->
next)
1943 static int leases_written;
1948 if (leases_written++ > 20) {
1979 for (
i = 0;
i < 256;
i++)
1989 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1990 t->tm_hour,
t->tm_min,
t->tm_sec);
1994 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1995 t->tm_hour,
t->tm_min,
t->tm_sec);
1999 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
2000 t->tm_hour,
t->tm_min,
t->tm_sec);
2026 sizeof(lease->
address.iabuf))) {
2044 "broadcast_address",
2061 for (
i = 0;
i < 256;
i++) {
2064 if (
ip->client->config->defaults[
i].len) {
2067 ip->client->config->default_actions[
i]) {
2068 case ACTION_DEFAULT:
2072 case ACTION_SUPERSEDE:
2079 case ACTION_PREPEND:
2083 if (
len >=
sizeof(dbuf)) {
2105 if (
len >
sizeof(dbuf)) {
2128 }
else if (lease->
options[
i].len) {
2157 if (
i + 1 == buflen)
2173 static int state = 0;
2183 if (daemon(1, 0) == -1)
2206 l->options[
option].len, 0, 0);
2231 warning(
"Invalid IP address in option(%d): %s",
option, opbuf);
2297 while (
ch !=
'\0') {
2332 note(
"got %s", tmp);
2344 static char optbuf[32768];
2346 int opleft =
sizeof(optbuf);
2347 unsigned char *dp =
data;
2350 error(
"option_as_string: bad code %d",
code);
2352 for (; dp <
data +
len; dp++) {
2354 if (dp + 1 !=
data +
len || *dp != 0) {
2359 }
else if (*dp ==
'"' || *dp ==
'\'' || *dp ==
'$' ||
2360 *dp ==
'`' || *dp ==
'\\') {
2374 warning(
"dhcp option too large");
CHAR FAR *WSAAPI inet_ntoa(IN IN_ADDR in)
#define inet_aton(ap, inp)
PDHCP_ADAPTER AdapterFindInfo(struct interface_info *ip)
void cancel_timeout(void(*where)(void *), void *what)
void add_timeout(time_t when, void(*where)(void *), void *what)
void(* bootp_packet_handler)(struct interface_info *, struct dhcp_packet *, int, unsigned int, struct iaddr, struct hardware *)
char * pretty_print_option(unsigned int code, unsigned char *data, int len, int emit_commas, int emit_quotes)
int cons_options(struct packet *inpacket, struct dhcp_packet *outpacket, int mms, struct tree_cache **options)
void do_packet(struct interface_info *interface, struct dhcp_packet *packet, int len, unsigned int from_port, struct iaddr from, struct hardware *hfrom)
struct dhcp_option dhcp_options[256]
int note(char *format,...)
int addr_eq(struct iaddr a, struct iaddr b)
struct iaddr broadcast_addr(struct iaddr addr, struct iaddr mask)
char * piaddr(struct iaddr addr)
u_int32_t getULong(unsigned char *data)
struct iaddr subnet_number(struct iaddr addr, struct iaddr mask)
#define DH_DbgPrint(_t_, _x_)
#define DHO_MASK_SUPPLIER
#define DHO_TCP_KEEPALIVE_GARBAGE
#define DHO_DHCP_MAX_MESSAGE_SIZE
#define DHO_ROUTER_DISCOVERY
#define DHO_VENDOR_ENCAPSULATED_OPTIONS
#define DHO_PERFORM_MASK_DISCOVERY
#define DHO_NON_LOCAL_SOURCE_ROUTING
#define DHO_NETBIOS_NAME_SERVERS
#define DHO_DHCP_PARAMETER_REQUEST_LIST
#define DHO_NETBIOS_SCOPE
#define DHO_NETBIOS_NODE_TYPE
#define DHO_TCP_KEEPALIVE_INTERVAL
#define DHO_BROADCAST_ADDRESS
#define DHO_NETBIOS_DD_SERVER
#define DHO_IP_FORWARDING
#define DHO_IMPRESS_SERVERS
#define DHO_TRAILER_ENCAPSULATION
#define DHO_PATH_MTU_PLATEAU_TABLE
#define DHO_DHCP_USER_CLASS_ID
#define DHO_EXTENSIONS_PATH
#define DHO_DHCP_CLIENT_IDENTIFIER
#define DHO_DEFAULT_TCP_TTL
#define DHO_DHCP_MESSAGE_TYPE
#define DHO_INTERFACE_MTU
#define DHO_X_DISPLAY_MANAGER
#define DHO_POLICY_FILTER
#define DHO_ALL_SUBNETS_LOCAL
#define DHO_MAX_DGRAM_REASSEMBLY
#define DHO_COOKIE_SERVERS
#define DHO_DHCP_RENEWAL_TIME
#define DHO_DOMAIN_NAME_SERVERS
#define DHO_DEFAULT_IP_TTL
#define DHO_DHCP_REBINDING_TIME
#define DHO_DHCP_OPTION_OVERLOAD
#define DHO_DHCP_SERVER_IDENTIFIER
#define DHO_ARP_CACHE_TIMEOUT
#define DHO_IEEE802_3_ENCAPSULATION
#define DHO_DHCP_REQUESTED_ADDRESS
#define DHO_DHCP_LEASE_TIME
#define DHO_STATIC_ROUTES
#define DHO_DHCP_CLASS_IDENTIFIER
#define DHO_ROUTER_SOLICITATION_ADDRESS
#define DHO_PATH_MTU_AGING_TIMEOUT
#define DHO_RESOURCE_LOCATION_SERVERS
#define RegCloseKey(hKey)
void make_request(struct interface_info *ip, struct client_lease *lease)
void unset_domain(PDHCP_ADAPTER Adapter)
struct client_lease * packet_to_lease(struct packet *packet)
void make_release(struct interface_info *ip, struct client_lease *lease)
void bootp(struct packet *packet)
void bind_lease(struct interface_info *ip)
void dhcp(struct packet *packet)
void send_discover(void *ipp)
void free_client_lease(struct client_lease *lease)
void dhcpnak(struct packet *packet)
int dhcp_option_ev_name(char *buf, size_t buflen, struct dhcp_option *option)
struct iaddr iaddr_broadcast
void write_client_lease(struct interface_info *ip, struct client_lease *lease, int rewrite)
struct in_addr inaddr_any
int check_option(struct client_lease *l, int option)
void unset_name_servers(PDHCP_ADAPTER Adapter)
void state_bound(void *ipp)
void send_release(void *ipp)
char * path_dhclient_conf
void setup_adapter(PDHCP_ADAPTER Adapter, struct client_lease *new_lease)
int fork_privchld(int, int)
void make_decline(struct interface_info *ip, struct client_lease *lease)
struct sockaddr_in sockaddr_broadcast
void state_selecting(void *ipp)
void send_decline(void *ipp)
void state_release(void *ipp)
int check_arp(struct interface_info *ip, struct client_lease *lp)
void state_reboot(void *ipp)
void set_domain(PDHCP_ADAPTER Adapter, struct client_lease *new_lease)
void dhcpack(struct packet *packet)
void state_panic(void *ipp)
void unbind_lease(struct interface_info *ip)
char * option_as_string(unsigned int code, unsigned char *data, int len)
void reset_adapter(PDHCP_ADAPTER Adapter)
void priv_script_init(struct interface_info *ip, char *reason, char *medium)
void priv_script_write_params(struct interface_info *ip, char *prefix, struct client_lease *lease)
void state_init(void *ipp)
int res_hnok(const char *dn)
#define ASSERT_STATE(state_is, state_shouldbe)
void set_name_servers(PDHCP_ADAPTER Adapter, struct client_lease *new_lease)
void rewrite_client_leases(struct interface_info *ifi)
void dhcpoffer(struct packet *packet)
unsigned long debug_trace_level
void make_discover(struct interface_info *ip, struct client_lease *lease)
#define _PATH_DHCLIENT_CONF
void script_set_env(struct client_state *, const char *, const char *, const char *)
#define NT_SUCCESS(StatCode)
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
UINT(* handler)(MSIPACKAGE *)
int WINAPIV fprintf(FILE *file, const char *format,...)
FILE *CDECL fopen(const char *path, const char *mode)
void CDECL rewind(FILE *file)
int CDECL fflush(FILE *file)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static int dup2(int od, int nd)
static int __cdecl _snprintf(char *buffer, size_t size, const char *format,...) __WINE_CRT_PRINTF_ATTR(3
_ACRTIMP int __cdecl rand(void)
_ACRTIMP void __cdecl srand(unsigned int)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP char *__cdecl strtok(char *, const char *)
static struct tm * gmtime(const time_t *t)
static void increase(int &a_)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
DWORD WINAPI AddIPAddress(IPAddr Address, IPMask Netmask, DWORD IfIndex, PULONG NteContext, PULONG NteInstance)
DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute)
DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute)
DWORD WINAPI DeleteIPAddress(ULONG NTEContext)
DWORD WINAPI SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr, PULONG PhyAddrLen)
#define memcpy(s1, s2, n)
NTSYSAPI ULONG NTAPI RtlRandom(_Inout_ PULONG Seed)
static unsigned __int64 next
#define DHCP_DEFAULT_LEASE_TIME
_CRTIMP void __cdecl tzset(void)
ssize_t send_packet(struct interface_info *ip, struct dhcp_packet *p, size_t size, struct in_addr addr, struct sockaddr_in *broadcast, struct hardware *hardware)
static void Server(int port)
MIB_IPFORWARDROW RouterMib
PALTERNATE_CONFIGURATION AlternateConfiguration
struct interface_info DhclientInfo
IF_INDEX dwForwardIfIndex
struct string_list * medium
struct option_data options[256]
struct client_lease * next
struct client_state * client
struct interface_info * interface
struct option_data options[256]
NTSYSAPI PSTR NTAPI RtlIpv4AddressToStringA(_In_ const struct in_addr *Addr, _Out_writes_(16) PSTR S)
Character const *const prefix
static const u8_t broadcast[6]
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
void int int ULONGLONG int va_list * ap
#define HKEY_LOCAL_MACHINE