diff --git a/vendor/libtuntap-master/tuntap-windows.c b/vendor/libtuntap-master/tuntap-windows.c index 080170b1b..0c3955de2 100644 --- a/vendor/libtuntap-master/tuntap-windows.c +++ b/vendor/libtuntap-master/tuntap-windows.c @@ -372,6 +372,7 @@ int tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s, uint32_t mask) { IPADDR sock[3]; + IPADDR pp[2]; DWORD len, ret; IPADDR ep[4]; #pragma pack(push) @@ -396,6 +397,18 @@ tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s, uint32_t mask) return -1; } + pp[0] = s->S_un.S_addr; + pp[1] = mask; + + ret = DeviceIoControl(dev->tun_fd, TAP_IOCTL_CONFIG_POINT_TO_POINT, &pp, sizeof(pp), + &pp, sizeof(pp), &len, NULL); + if(!ret) + { + int errcode = GetLastError(); + tuntap_log(TUNTAP_LOG_ERR, (const char *)formated_error(L"%1%0", errcode)); + return -1; + } + ep[0] = s->S_un.S_addr; ep[1] = mask; ep[2] = (s->S_un.S_addr | ~mask)