|
|
|
@ -382,6 +382,12 @@ tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s, uint32_t mask)
|
|
|
|
|
uint8_t length;
|
|
|
|
|
uint32_t value[2];
|
|
|
|
|
} dns;
|
|
|
|
|
struct
|
|
|
|
|
{
|
|
|
|
|
uint8_t dhcp_opt;
|
|
|
|
|
uint8_t length;
|
|
|
|
|
uint32_t value;
|
|
|
|
|
} gateway;
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
sock[0] = s->S_un.S_addr;
|
|
|
|
@ -398,10 +404,10 @@ tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s, uint32_t mask)
|
|
|
|
|
|
|
|
|
|
ep[0] = s->S_un.S_addr;
|
|
|
|
|
ep[1] = mask;
|
|
|
|
|
ep[2] = (s->S_un.S_addr | ~mask)
|
|
|
|
|
- (mask + 1); /* For the 10.x.0.y subnet (in a class C config), _should_
|
|
|
|
|
ep[2] = (s->S_un.S_addr | ~mask) - htonl(1);
|
|
|
|
|
/*+ (mask + 1);*/ /* For the 10.x.0.y subnet (in a class C config), _should_
|
|
|
|
|
be 10.x.0.254 i think */
|
|
|
|
|
ep[3] = 3153600; /* one year */
|
|
|
|
|
ep[3] = 31536000; /* one year */
|
|
|
|
|
|
|
|
|
|
ret = DeviceIoControl(dev->tun_fd, TAP_IOCTL_CONFIG_DHCP_MASQ, ep, sizeof(ep),
|
|
|
|
|
ep, sizeof(ep), &len, NULL);
|
|
|
|
@ -427,6 +433,14 @@ tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s, uint32_t mask)
|
|
|
|
|
ret = DeviceIoControl(dev->tun_fd, TAP_IOCTL_CONFIG_DHCP_SET_OPT, &dns,
|
|
|
|
|
sizeof(dns), &dns, sizeof(dns), &len, NULL);
|
|
|
|
|
|
|
|
|
|
/* set router address to interface address */
|
|
|
|
|
gateway.dhcp_opt = 3;
|
|
|
|
|
gateway.length = 4;
|
|
|
|
|
gateway.value = (s->S_un.S_addr)+htonl(1);
|
|
|
|
|
|
|
|
|
|
ret = DeviceIoControl(dev->tun_fd, TAP_IOCTL_CONFIG_DHCP_SET_OPT, &gateway,
|
|
|
|
|
sizeof(gateway), &gateway, sizeof(gateway), &len, NULL);
|
|
|
|
|
|
|
|
|
|
if(!ret)
|
|
|
|
|
{
|
|
|
|
|
int errcode = GetLastError();
|
|
|
|
@ -519,4 +533,4 @@ tuntap_set_ifname(struct device *dev, const char *name)
|
|
|
|
|
tuntap_log(TUNTAP_LOG_NOTICE,
|
|
|
|
|
"Your system does not support tuntap_set_ifname()");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|