53int ifconfig(
const char *ifname,
const char *addr,
const char *mask,
int up)
57 struct sockaddr_in *sin = (
struct sockaddr_in *)&ifr.ifr_addr;
59 if ((sd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0)
62 memset(&ifr, 0,
sizeof (ifr));
63 strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);
64 ifr.ifr_addr.sa_family = AF_INET;
68 if (inet_pton(AF_INET, addr, &sin->sin_addr) == 1)
69 ret = ioctl(sd, SIOCSIFADDR, &ifr);
73 if (mask && addr && strcmp(addr,
"0.0.0.0")) {
74 if (inet_pton(AF_INET, mask, &sin->sin_addr) == -1)
75 ret = ioctl(sd, SIOCSIFNETMASK, &ifr);
79 if (!ioctl(sd, SIOCGIFFLAGS, &ifr)) {
81 ifr.ifr_flags |= IFF_UP;
83 ifr.ifr_flags &= ~IFF_UP;
85 ret = ioctl(sd, SIOCSIFFLAGS, &ifr);