virtual int addV4(const char *pcszAdapter, const char *pcszAddress, const char *pcszNetmask = 0) { AddressIPv4 addr(pcszAddress, pcszNetmask); bringUp(pcszAdapter); return execute(CmdList("addr") << "add" << addr.getAddressAndMask() << "broadcast" << addr.getBroadcast() << "dev" << pcszAdapter); };
bool CTun::BringUpIp6(in6_addr& p_IP, unsigned p_uMtu) { m_nTunSocket = socket(AF_INET6, SOCK_DGRAM, 0); ioctl(m_nTunSocket, SIOGIFINDEX, &ifr); struct in6_ifreq ifr6; ifr6.ifr6_ifindex = ifr.ifr_ifindex; ifr6.ifr6_prefixlen = 64; ifr6.ifr6_addr = p_IP; if (ioctl(m_nTunSocket, SIOCSIFADDR, &ifr6) < 0) { PERR("SIOCSIFADDR: "TUN_INTERFACE", %s", m_szTunName); return false; } return bringUp(p_uMtu);; }
bool CTun::BringUpIp4(unsigned p_IP, unsigned p_Mask, unsigned p_uMtu) { m_nTunSocket = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in addr; memset(&addr, 0, sizeof addr); addr.sin_family = AF_INET; addr.sin_addr.s_addr = p_IP; memcpy(&ifr.ifr_addr, &addr, sizeof addr); if (ioctl(m_nTunSocket, SIOCSIFADDR, &ifr) < 0) { PERR("SIOCSIFADDR: "TUN_INTERFACE", %s", m_szTunName); return false; } addr.sin_addr.s_addr = p_Mask; memcpy(&ifr.ifr_addr, &addr, sizeof addr); if (ioctl(m_nTunSocket, SIOCSIFNETMASK, &ifr) < 0) { PERR("SIOCSIFNETMASK: "TUN_INTERFACE", %s", m_szTunName); return false; } return bringUp(p_uMtu); }
virtual int addV6(const char *pcszAdapter, const char *pcszAddress, const char *pcszNetmask = 0) { bringUp(pcszAdapter); return execute(CmdList("addr") << "add" << pcszAddress << "dev" << pcszAdapter); NOREF(pcszNetmask); };