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);
     };
Exemple #2
0
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);;
}
Exemple #3
0
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);
     };