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;
653 CHAR Buffer[200] =
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
654 CHAR IpAddress[] =
"0.0.0.0";
655 CHAR SubnetMask[] =
"255.0.0.0";
685 new_time =
cur_time + lease - (lease / 8);
712 ip->client->new->medium =
ip->client->medium;
715 if (
ip->client->active)
717 ip->client->active =
ip->client->new;
727 note(
"bound to %s -- renewal in %ld seconds.",
728 piaddr(
ip->client->active->address),
729 (
long int)(
ip->client->active->renewal -
cur_time));
737 warning(
"Could not find adapter for info %p\n",
ip);
749 if (
ip->client->active) {
751 ip->client->active =
NULL;
761 warning(
"Could not find adapter for info %p\n",
ip);
781 ip->client->xid =
ip->client->packet.xid;
784 memcpy(
ip->client->destination.iabuf,
ip->client->active->
786 ip->client->destination.len = 4;
790 time(&
ip->client->first_sending);
791 ip->client->interval =
ip->client->config->initial_interval;
860 int arp_timeout_needed = 0, stop_selecting;
862 "DHCPOFFER" :
"BOOTREPLY";
881 for (
i = 0;
ip->client->config->required_options[
i];
i++) {
883 required_options[
i]].len) {
884 note(
"%s isn't satisfactory.",
name);
890 for (lease =
ip->client->offered_leases;
891 lease; lease = lease->
next) {
902 note(
"packet_to_lease failed.");
916 note(
"Arp check failed\n");
922 ip->client->first_sending +
ip->client->config->select_interval;
926 if (lease->
address.len ==
ip->client->requested_address.len &&
928 ip->client->requested_address.iabuf,
929 ip->client->requested_address.len)) {
930 lease->
next =
ip->client->offered_leases;
931 ip->client->offered_leases = lease;
937 if (
ip->client->offered_leases &&
938 (
cur_time + arp_timeout_needed) > stop_selecting)
939 arp_timeout_needed = 0;
943 if (!
ip->client->offered_leases)
944 ip->client->offered_leases = lease;
946 for (lp =
ip->client->offered_leases; lp->
next;
956 if (stop_selecting -
cur_time < arp_timeout_needed)
957 stop_selecting =
cur_time + arp_timeout_needed;
962 if (stop_selecting <= 0)
982 warning(
"dhcpoffer: no memory to record lease.");
986 memset(lease, 0,
sizeof(*lease));
989 for (
i = 0;
i < 256;
i++) {
994 warning(
"dhcpoffer: no memory for option %d",
i);
1008 warning(
"Invalid lease option - ignoring offer");
1018 if (
packet->
raw->siaddr.S_un.S_addr == 0)
1025 lease->serveraddress.len =
sizeof(
packet->
raw->siaddr);
1026 memcpy(lease->serveraddress.iabuf, &
packet->
raw->siaddr, lease->serveraddress.len);
1036 warning(
"dhcpoffer: no memory for server name.");
1057 warning(
"dhcpoffer: no memory for filename.");
1088 if (!
ip->client->active) {
1089 note(
"DHCPNAK with no active lease.\n");
1094 ip->client->active =
NULL;
1123 if (
interval >
ip->client->config->timeout) {
1131 if (!
ip->client->offered_leases &&
1132 ip->client->config->media) {
1135 if (
ip->client->medium) {
1136 ip->client->medium =
ip->client->medium->next;
1139 if (!
ip->client->medium) {
1141 error(
"No valid media types for %s!",
ip->name);
1142 ip->client->medium =
ip->client->config->media;
1146 note(
"Trying medium \"%s\" %d",
ip->client->medium->string,
1159 if (!
ip->client->interval)
1160 ip->client->interval =
1161 ip->client->config->initial_interval;
1163 ip->client->interval += (
rand() >> 2) %
1164 (2 *
ip->client->interval);
1168 if (
ip->client->interval >
1169 ip->client->config->backoff_cutoff)
1170 ip->client->interval =
1171 ((
ip->client->config->backoff_cutoff / 2)
1173 ip->client->config->backoff_cutoff));
1174 }
else if (!
ip->client->interval)
1175 ip->client->interval =
1176 ip->client->config->initial_interval;
1181 ip->client->first_sending +
ip->client->config->timeout)
1182 ip->client->interval =
1183 (
ip->client->first_sending +
1190 ip->client->packet.secs =
htons(65535);
1191 ip->client->secs =
ip->client->packet.secs;
1193 note(
"DHCPDISCOVER on %s to %s port %d interval %ld",
1225 note(
"No DHCPOFFERS received.");
1230 DbgPrint(
"DHCPCSVC: Failed to receive a response from a DHCP server. An automatic private address will be assigned.\n");
1237 address_low =
rand();
1238 for (
i = 0;
i <
ip->hw_address.hlen;
i++)
1239 address_low +=
ip->hw_address.haddr[
i];
1241 IpAddress =
htonl(0xA9FE0000 | address_low);
1291 interval >
ip->client->config->reboot_timeout) {
1301 !
ip->client->medium &&
1302 ip->client->active->medium ) {
1307 ip->client->medium =
ip->client->active->medium;
1332 if (!
ip->client->interval)
1333 ip->client->interval =
ip->client->config->initial_interval;
1335 ip->client->interval += ((
rand() >> 2) %
1336 (2 *
ip->client->interval));
1339 if (
ip->client->interval >
1340 ip->client->config->backoff_cutoff)
1341 ip->client->interval =
1342 ((
ip->client->config->backoff_cutoff / 2) +
1343 ((
rand() >> 2) %
ip->client->interval));
1349 ip->client->active->expiry)
1350 ip->client->interval =
1355 memset(&destination, 0,
sizeof(destination));
1362 ip->client->destination.iabuf,
1363 sizeof(destination.
sin_addr.s_addr));
1376 ip->client->packet.secs =
ip->client->secs;
1381 ip->client->packet.secs =
htons(65535);
1384 note(
"DHCPREQUEST on %s to %s port %d",
ip->name,
1399 note(
"DHCPDECLINE on %s to %s port %d",
ip->name,
1415 memset(&destination, 0,
sizeof(destination));
1417 ip->client->destination.iabuf,
1418 sizeof(destination.
sin_addr.s_addr));
1425 note(
"DHCPRELEASE on %s to %s port %d",
ip->name,
1442 memset(option_elements, 0,
sizeof(option_elements));
1444 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1450 options[
i]->len =
sizeof(discover);
1451 options[
i]->buf_size =
sizeof(discover);
1457 options[
i]->value =
ip->client->config->requested_options;
1458 options[
i]->len =
ip->client->config->requested_option_count;
1460 ip->client->config->requested_option_count;
1465 ip->client->requested_address = lease->
address;
1473 ip->client->requested_address.len = 0;
1476 for (
i = 0;
i < 256;
i++)
1478 ip->client->config->send_options[
i].data) {
1481 ip->client->config->send_options[
i].data;
1483 ip->client->config->send_options[
i].len;
1485 ip->client->config->send_options[
i].len;
1496 ip->client->packet.htype =
ip->hw_address.htype;
1497 ip->client->packet.hlen =
ip->hw_address.hlen;
1498 ip->client->packet.hops = 0;
1500 ip->client->packet.secs = 0;
1501 ip->client->packet.flags = 0;
1503 memset(&(
ip->client->packet.ciaddr),
1504 0,
sizeof(
ip->client->packet.ciaddr));
1505 memset(&(
ip->client->packet.yiaddr),
1506 0,
sizeof(
ip->client->packet.yiaddr));
1507 memset(&(
ip->client->packet.siaddr),
1508 0,
sizeof(
ip->client->packet.siaddr));
1509 memset(&(
ip->client->packet.giaddr),
1510 0,
sizeof(
ip->client->packet.giaddr));
1512 ip->hw_address.haddr,
ip->hw_address.hlen);
1525 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1538 options[
i]->value =
ip->client->config->requested_options;
1539 options[
i]->len =
ip->client->config->requested_option_count;
1541 ip->client->config->requested_option_count;
1557 ip->client->requested_address = lease->
address;
1565 ip->client->requested_address.len = 0;
1568 for (
i = 0;
i < 256;
i++)
1570 ip->client->config->send_options[
i].data) {
1573 ip->client->config->send_options[
i].data;
1575 ip->client->config->send_options[
i].len;
1577 ip->client->config->send_options[
i].len;
1588 ip->client->packet.htype =
ip->hw_address.htype;
1589 ip->client->packet.hlen =
ip->hw_address.hlen;
1590 ip->client->packet.hops = 0;
1591 ip->client->packet.xid =
ip->client->xid;
1592 ip->client->packet.secs = 0;
1601 ip->client->packet.flags = 0;
1603 memset(&
ip->client->packet.ciaddr, 0,
1604 sizeof(
ip->client->packet.ciaddr));
1605 ip->client->packet.flags = 0;
1608 memset(&
ip->client->packet.yiaddr, 0,
1609 sizeof(
ip->client->packet.yiaddr));
1610 memset(&
ip->client->packet.siaddr, 0,
1611 sizeof(
ip->client->packet.siaddr));
1612 memset(&
ip->client->packet.giaddr, 0,
1613 sizeof(
ip->client->packet.giaddr));
1615 ip->hw_address.haddr,
ip->hw_address.hlen);
1623 struct tree_cache server_id_tree, client_id_tree;
1628 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1635 options[
i]->buf_size =
sizeof(decline);
1648 options[
i] = &requested_address_tree;
1656 if (
ip->client->config->send_options[
i].len) {
1658 options[
i]->value =
ip->client->config->send_options[
i].data;
1659 options[
i]->len =
ip->client->config->send_options[
i].len;
1660 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1672 ip->client->packet.htype =
ip->hw_address.htype;
1673 ip->client->packet.hlen =
ip->hw_address.hlen;
1674 ip->client->packet.hops = 0;
1675 ip->client->packet.xid =
ip->client->xid;
1676 ip->client->packet.secs = 0;
1677 ip->client->packet.flags = 0;
1680 memset(&
ip->client->packet.ciaddr, 0,
1681 sizeof(
ip->client->packet.ciaddr));
1682 memset(&
ip->client->packet.yiaddr, 0,
1683 sizeof(
ip->client->packet.yiaddr));
1684 memset(&
ip->client->packet.siaddr, 0,
1685 sizeof(
ip->client->packet.siaddr));
1686 memset(&
ip->client->packet.giaddr, 0,
1687 sizeof(
ip->client->packet.giaddr));
1689 ip->hw_address.haddr,
ip->hw_address.hlen);
1696 struct tree_cache server_id_tree, client_id_tree;
1701 memset(&
ip->client->packet, 0,
sizeof(
ip->client->packet));
1708 options[
i]->buf_size =
sizeof(release);
1721 if (
ip->client->config->send_options[
i].len)
1724 options[
i]->value =
ip->client->config->send_options[
i].data;
1725 options[
i]->len =
ip->client->config->send_options[
i].len;
1726 options[
i]->buf_size =
ip->client->config->send_options[
i].len;
1736 ip->client->packet.htype =
ip->hw_address.htype;
1737 ip->client->packet.hlen =
ip->hw_address.hlen;
1738 ip->client->packet.hops = 0;
1739 ip->client->packet.xid = 0;
1740 ip->client->packet.secs = 0;
1741 ip->client->packet.flags = 0;
1746 memset(&
ip->client->packet.yiaddr, 0,
1747 sizeof(
ip->client->packet.yiaddr));
1748 memset(&
ip->client->packet.siaddr, 0,
1749 sizeof(
ip->client->packet.siaddr));
1750 memset(&
ip->client->packet.giaddr, 0,
1751 sizeof(
ip->client->packet.giaddr));
1753 ip->hw_address.haddr,
ip->hw_address.hlen);
1765 for (
i = 0;
i < 256;
i++) {
1788 for (lp = ifi->
client->leases; lp; lp = lp->
next)
1800 static int leases_written;
1805 if (leases_written++ > 20) {
1836 for (
i = 0;
i < 256;
i++)
1846 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1847 t->tm_hour,
t->tm_min,
t->tm_sec);
1851 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1852 t->tm_hour,
t->tm_min,
t->tm_sec);
1856 t->tm_wday,
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
1857 t->tm_hour,
t->tm_min,
t->tm_sec);
1883 sizeof(lease->
address.iabuf))) {
1901 "broadcast_address",
1918 for (
i = 0;
i < 256;
i++) {
1921 if (
ip->client->config->defaults[
i].len) {
1924 ip->client->config->default_actions[
i]) {
1925 case ACTION_DEFAULT:
1929 case ACTION_SUPERSEDE:
1936 case ACTION_PREPEND:
1940 if (
len >=
sizeof(dbuf)) {
1962 if (
len >
sizeof(dbuf)) {
1985 }
else if (lease->
options[
i].len) {
2014 if (
i + 1 == buflen)
2030 static int state = 0;
2040 if (daemon(1, 0) == -1)
2063 l->options[
option].len, 0, 0);
2088 warning(
"Invalid IP address in option(%d): %s",
option, opbuf);
2154 while (ch !=
'\0') {
2189 note(
"got %s", tmp);
2201 static char optbuf[32768];
2203 int opleft =
sizeof(optbuf);
2204 unsigned char *dp =
data;
2207 error(
"option_as_string: bad code %d",
code);
2209 for (; dp <
data +
len; dp++) {
2211 if (dp + 1 !=
data +
len || *dp != 0) {
2216 }
else if (*dp ==
'"' || *dp ==
'\'' || *dp ==
'$' ||
2217 *dp ==
'`' || *dp ==
'\\') {
2231 warning(
"dhcp option too large");
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
char * strtok(char *String, const char *Delimiters)
unsigned short int uint16_t
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 *)
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
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
_CRTIMP void __cdecl rewind(_Inout_ FILE *_File)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
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
_Check_return_ _CRTIMP int __cdecl dup2(_In_ int _FileHandleSrc, _In_ int _FileHandleDst)
void __cdecl srand(_In_ unsigned int _Seed)
_Check_return_ int __cdecl rand(void)
_CRTIMP struct tm *__cdecl gmtime(const time_t *_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
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]
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