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, stop_selecting;
866 "DHCPOFFER" :
"BOOTREPLY";
885 for (
i = 0;
ip->client->config->required_options[
i];
i++) {
887 required_options[
i]].len) {
888 note(
"%s isn't satisfactory.",
name);
894 for (lease =
ip->client->offered_leases;
895 lease; lease = lease->
next) {
906 note(
"packet_to_lease failed.");
920 note(
"Arp check failed\n");
926 ip->client->first_sending +
ip->client->config->select_interval;
930 if (lease->
address.len ==
ip->client->requested_address.len &&
932 ip->client->requested_address.iabuf,
933 ip->client->requested_address.len)) {
934 lease->
next =
ip->client->offered_leases;
935 ip->client->offered_leases = lease;
941 if (
ip->client->offered_leases &&
942 (
cur_time + arp_timeout_needed) > stop_selecting)
943 arp_timeout_needed = 0;
947 if (!
ip->client->offered_leases)
948 ip->client->offered_leases = lease;
950 for (lp =
ip->client->offered_leases; lp->
next;
960 if (stop_selecting -
cur_time < arp_timeout_needed)
961 stop_selecting =
cur_time + arp_timeout_needed;
966 if (stop_selecting <= 0)
986 warning(
"dhcpoffer: no memory to record lease.");
990 memset(lease, 0,
sizeof(*lease));
993 for (
i = 0;
i < 256;
i++) {
998 warning(
"dhcpoffer: no memory for option %d",
i);
1012 warning(
"Invalid lease option - ignoring offer");
1022 if (
packet->
raw->siaddr.S_un.S_addr == 0)
1029 lease->serveraddress.len =
sizeof(
packet->
raw->siaddr);
1030 memcpy(lease->serveraddress.iabuf, &
packet->
raw->siaddr, lease->serveraddress.len);
1040 warning(
"dhcpoffer: no memory for server name.");
1061 warning(
"dhcpoffer: no memory for filename.");
1092 if (!
ip->client->active) {
1093 note(
"DHCPNAK with no active lease.\n");
1098 ip->client->active =
NULL;
1127 if (
interval >
ip->client->config->timeout) {
1135 if (!
ip->client->offered_leases &&
1136 ip->client->config->media) {
1139 if (
ip->client->medium) {
1140 ip->client->medium =
ip->client->medium->next;
1143 if (!
ip->client->medium) {
1145 error(
"No valid media types for %s!",
ip->name);
1146 ip->client->medium =
ip->client->config->media;
1150 note(
"Trying medium \"%s\" %d",
ip->client->medium->string,
1163 if (!
ip->client->interval)
1164 ip->client->interval =
1165 ip->client->config->initial_interval;
1167 ip->client->interval += (
rand() >> 2) %
1168 (2 *
ip->client->interval);
1172 if (
ip->client->interval >
1173 ip->client->config->backoff_cutoff)
1174 ip->client->interval =
1175 ((
ip->client->config->backoff_cutoff / 2)
1177 ip->client->config->backoff_cutoff));
1178 }
else if (!
ip->client->interval)
1179 ip->client->interval =
1180 ip->client->config->initial_interval;
1185 ip->client->first_sending +
ip->client->config->timeout)
1186 ip->client->interval =
1187 (
ip->client->first_sending +
1194 ip->client->packet.secs =
htons(65535);
1195 ip->client->secs =
ip->client->packet.secs;
1197 note(
"DHCPDISCOVER on %s to %s port %d interval %ld",
1220 CHAR szKeyNameBuffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
1222 CHAR SubnetMask[] =
"255.255.0.0";
1223 CHAR AddressBuffer[32];
1237 DWORD dwAddressType = 0;
1239 note(
"No DHCPOFFERS received.");
1348 address_low =
rand();
1349 for (
i = 0;
i <
ip->hw_address.hlen;
i++)
1350 address_low +=
ip->hw_address.haddr[
i];
1352 IpAddress =
htonl(0xA9FE0000 | address_low);
1375 addr.S_un.S_addr = IpAddress;
1433 interval >
ip->client->config->reboot_timeout) {
1443 !
ip->client->medium &&
1444 ip->client->active->medium ) {
1449 ip->client->medium =
ip->client->active->medium;
1474 if (!
ip->client->interval)
1475 ip->client->interval =
ip->client->config->initial_interval;
1477 ip->client->interval += ((
rand() >> 2) %
1478 (2 *
ip->client->interval));
1481 if (
ip->client->interval >
1482 ip->client->config->backoff_cutoff)
1483 ip->client->interval =
1484 ((
ip->client->config->backoff_cutoff / 2) +
1485 ((
rand() >> 2) %
ip->client->interval));
1491 ip->client->active->expiry)
1492 ip->client->interval =
1497 memset(&destination, 0,
sizeof(destination));
1504 ip->client->destination.iabuf,
1505 sizeof(destination.
sin_addr.s_addr));
1518 ip->client->packet.secs =
ip->client->secs;
1523 ip->client->packet.secs =
htons(65535);
1526 note(
"DHCPREQUEST on %s to %s port %d",
ip->name,
1541 note(
"DHCPDECLINE on %s to %s port %d",
ip->name,
1557 memset(&destination, 0,
sizeof(destination));
1559 ip->client->destination.iabuf,
1560 sizeof(destination.
sin_addr.s_addr));
1567 note(
"DHCPRELEASE on %s to %s port %d",
ip->name,
1584 memset(option_elements, 0,
sizeof(option_elements));
1586 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1592 options[
i]->len =
sizeof(discover);
1593 options[
i]->buf_size =
sizeof(discover);
1599 options[
i]->value =
ip->client->config->requested_options;
1600 options[
i]->len =
ip->client->config->requested_option_count;
1602 ip->client->config->requested_option_count;
1607 ip->client->requested_address = lease->
address;
1615 ip->client->requested_address.len = 0;
1618 for (
i = 0;
i < 256;
i++)
1620 ip->client->config->send_options[
i].data) {
1623 ip->client->config->send_options[
i].data;
1625 ip->client->config->send_options[
i].len;
1627 ip->client->config->send_options[
i].len;
1638 ip->client->packet.htype =
ip->hw_address.htype;
1639 ip->client->packet.hlen =
ip->hw_address.hlen;
1640 ip->client->packet.hops = 0;
1642 ip->client->packet.secs = 0;
1643 ip->client->packet.flags = 0;
1645 memset(&(
ip->client->packet.ciaddr),
1646 0,
sizeof(
ip->client->packet.ciaddr));
1647 memset(&(
ip->client->packet.yiaddr),
1648 0,
sizeof(
ip->client->packet.yiaddr));
1649 memset(&(
ip->client->packet.siaddr),
1650 0,
sizeof(
ip->client->packet.siaddr));
1651 memset(&(
ip->client->packet.giaddr),
1652 0,
sizeof(
ip->client->packet.giaddr));
1654 ip->hw_address.haddr,
ip->hw_address.hlen);
1667 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1680 options[
i]->value =
ip->client->config->requested_options;
1681 options[
i]->len =
ip->client->config->requested_option_count;
1683 ip->client->config->requested_option_count;
1699 ip->client->requested_address = lease->
address;
1707 ip->client->requested_address.len = 0;
1710 for (
i = 0;
i < 256;
i++)
1712 ip->client->config->send_options[
i].data) {
1715 ip->client->config->send_options[
i].data;
1717 ip->client->config->send_options[
i].len;
1719 ip->client->config->send_options[
i].len;
1730 ip->client->packet.htype =
ip->hw_address.htype;
1731 ip->client->packet.hlen =
ip->hw_address.hlen;
1732 ip->client->packet.hops = 0;
1733 ip->client->packet.xid =
ip->client->xid;
1734 ip->client->packet.secs = 0;
1743 ip->client->packet.flags = 0;
1745 memset(&
ip->client->packet.ciaddr, 0,
1746 sizeof(
ip->client->packet.ciaddr));
1747 ip->client->packet.flags = 0;
1750 memset(&
ip->client->packet.yiaddr, 0,
1751 sizeof(
ip->client->packet.yiaddr));
1752 memset(&
ip->client->packet.siaddr, 0,
1753 sizeof(
ip->client->packet.siaddr));
1754 memset(&
ip->client->packet.giaddr, 0,
1755 sizeof(
ip->client->packet.giaddr));
1757 ip->hw_address.haddr,
ip->hw_address.hlen);
1765 struct tree_cache server_id_tree, client_id_tree;
1770 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1777 options[
i]->buf_size =
sizeof(decline);
1790 options[
i] = &requested_address_tree;
1798 if (
ip->client->config->send_options[
i].len) {
1800 options[
i]->value =
ip->client->config->send_options[
i].data;
1801 options[
i]->len =
ip->client->config->send_options[
i].len;
1802 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1814 ip->client->packet.htype =
ip->hw_address.htype;
1815 ip->client->packet.hlen =
ip->hw_address.hlen;
1816 ip->client->packet.hops = 0;
1817 ip->client->packet.xid =
ip->client->xid;
1818 ip->client->packet.secs = 0;
1819 ip->client->packet.flags = 0;
1822 memset(&
ip->client->packet.ciaddr, 0,
1823 sizeof(
ip->client->packet.ciaddr));
1824 memset(&
ip->client->packet.yiaddr, 0,
1825 sizeof(
ip->client->packet.yiaddr));
1826 memset(&
ip->client->packet.siaddr, 0,
1827 sizeof(
ip->client->packet.siaddr));
1828 memset(&
ip->client->packet.giaddr, 0,
1829 sizeof(
ip->client->packet.giaddr));
1831 ip->hw_address.haddr,
ip->hw_address.hlen);
1838 struct tree_cache server_id_tree, client_id_tree;
1843 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1850 options[
i]->buf_size =
sizeof(release);
1863 if (
ip->client->config->send_options[
i].len)
1866 options[
i]->value =
ip->client->config->send_options[
i].data;
1867 options[
i]->len =
ip->client->config->send_options[
i].len;
1868 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1878 ip->client->packet.htype =
ip->hw_address.htype;
1879 ip->client->packet.hlen =
ip->hw_address.hlen;
1880 ip->client->packet.hops = 0;
1881 ip->client->packet.xid = 0;
1882 ip->client->packet.secs = 0;
1883 ip->client->packet.flags = 0;
1888 memset(&
ip->client->packet.yiaddr, 0,
1889 sizeof(
ip->client->packet.yiaddr));
1890 memset(&
ip->client->packet.siaddr, 0,
1891 sizeof(
ip->client->packet.siaddr));
1892 memset(&
ip->client->packet.giaddr, 0,
1893 sizeof(
ip->client->packet.giaddr));
1895 ip->hw_address.haddr,
ip->hw_address.hlen);
1907 for (
i = 0;
i < 256;
i++) {
1930 for (lp = ifi->
client->leases; lp; lp = lp->
next)
1942 static int leases_written;
1947 if (leases_written++ > 20) {
1978 for (
i = 0;
i < 256;
i++)
1988 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1989 t->tm_hour,
t->tm_min,
t->tm_sec);
1993 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1994 t->tm_hour,
t->tm_min,
t->tm_sec);
1998 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1999 t->tm_hour,
t->tm_min,
t->tm_sec);
2025 sizeof(lease->
address.iabuf))) {
2043 "broadcast_address",
2060 for (
i = 0;
i < 256;
i++) {
2063 if (
ip->client->config->defaults[
i].len) {
2066 ip->client->config->default_actions[
i]) {
2067 case ACTION_DEFAULT:
2071 case ACTION_SUPERSEDE:
2078 case ACTION_PREPEND:
2082 if (
len >=
sizeof(dbuf)) {
2104 if (
len >
sizeof(dbuf)) {
2127 }
else if (lease->
options[
i].len) {
2156 if (
i + 1 == buflen)
2172 static int state = 0;
2182 if (daemon(1, 0) == -1)
2205 l->options[
option].len, 0, 0);
2230 warning(
"Invalid IP address in option(%d): %s",
option, opbuf);
2296 while (
ch !=
'\0') {
2331 note(
"got %s", tmp);
2343 static char optbuf[32768];
2345 int opleft =
sizeof(optbuf);
2346 unsigned char *dp =
data;
2349 error(
"option_as_string: bad code %d",
code);
2351 for (; dp <
data +
len; dp++) {
2353 if (dp + 1 !=
data +
len || *dp != 0) {
2358 }
else if (*dp ==
'"' || *dp ==
'\'' || *dp ==
'$' ||
2359 *dp ==
'`' || *dp ==
'\\') {
2373 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