[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

cannot change IP of my NIC via ioctl(2)



sorry , i dont know whom to ask , i have the following problem :
i'm trying to change IP of NIC via ioctl from C program .

--------------- start of sample code ---------------------------------
	skfd = socket(AF_INET,SOCK_DGRAM,0); // open socket
	memset((void *)&ifr, 0, sizeof(struct ifreq));
	memmove(ifr.ifr_name, iface_name, IFNAMSIZ);

//-- setting ip ---------------------
	((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = ip;
	ioctl(skfd, SIOCSIFADDR, ifr);

//-- setting netmaks ----------------
#if defined(__linux__) 
	((struct sockaddr_in *) &ifr.ifr_netmask)->sin_addr.s_addr = netmask;
#endif
#if defined(__OpenBSD__)||defined(__NetBSD__)
	((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr    = netmask;
#endif
	ioctl(skfd, SIOCSIFNETMASK, ifr);
//-- setting bcast ------------------
	((struct sockaddr_in *) &ifr.ifr_broadaddr)->sin_addr.s_addr =
broadcast;
	ioctl(skfd, SIOCSIFBRDADDR, ifr);
--------------- end of sample code -----------------------------------
ip,netmask,broadcast are already in network byte order .

the following sample code runs without and error (i just didn't mention
here all checks of ioctl(2) and socket(2))
however when i'm running `ifconfig` from the shell the
ip,netmask,broadcast remain the same .
i've tried the same C code on linux - it changes ip,netmak,broadcast .
-- 
yurii oleynikov <oleyniko_(_at_)_jct_(_dot_)_ac_(_dot_)_il>
JCT



Visit your host, monkey.org