|
|
|
@ -119,20 +119,30 @@ tuntap_sys_set_ipv4(struct device *dev, t_tun_in_addr *s4, uint32_t bits)
|
|
|
|
|
inet_ntop(AF_INET, s4, addrbuf, sizeof(addrbuf));
|
|
|
|
|
char buf[1028];
|
|
|
|
|
const char *addr = addrbuf;
|
|
|
|
|
|
|
|
|
|
char daddrbuf[32];
|
|
|
|
|
in_addr_t daddr_s4 = {s4->s_addr & bits};
|
|
|
|
|
inet_ntop(AF_INET, &daddr_s4, daddrbuf, sizeof(daddrbuf));
|
|
|
|
|
const char *daddr = daddrbuf;
|
|
|
|
|
|
|
|
|
|
const char *netmask = inet_ntoa(mask.sin_addr);
|
|
|
|
|
/** because fuck this other stuff */
|
|
|
|
|
snprintf(buf, sizeof(buf), "ifconfig %s %s %s mtu 1380 netmask 255.255.255.255 up",
|
|
|
|
|
dev->if_name, addr, daddr);
|
|
|
|
|
tuntap_log(TUNTAP_LOG_INFO, buf);
|
|
|
|
|
system(buf);
|
|
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf),
|
|
|
|
|
"route add %s -netmask %s -interface %s", daddr, netmask, dev->if_name);
|
|
|
|
|
tuntap_log(TUNTAP_LOG_INFO, buf);
|
|
|
|
|
system(buf);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf),
|
|
|
|
|
"route add -cloning -net %s %s %s", daddr, addr, netmask);
|
|
|
|
|
"route add %s -interface lo0", addr);
|
|
|
|
|
tuntap_log(TUNTAP_LOG_INFO, buf);
|
|
|
|
|
system(buf);
|
|
|
|
|
|
|
|
|
|
/* Simpler than calling SIOCSIFADDR and/or SIOCSIFBRDADDR */
|
|
|
|
|
/*
|
|
|
|
|
if(ioctl(dev->ctrl_sock, SIOCSIFADDR, &ifa) == -1)
|
|
|
|
|