LOCAL STATUS ifIoctlGet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int code, /* network interface ioctl function code */ int *val /* where to return result */ ) { struct ifreq ifr; strncpy (ifr.ifr_name, interfaceName, sizeof (ifr.ifr_name)); if (ifIoctlCall (code, &ifr) == ERROR) return (ERROR); switch ((u_int) code) { case SIOCGIFFLAGS: *val = ifr.ifr_flags; break; case SIOCGIFMETRIC: *val = ifr.ifr_metric; break; default: *val = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; break; } return (OK); }
LOCAL STATUS ifIoctlSet ( char *interfaceName, /* name of the network interface, i.e. ei0 */ int code, /* network interface ioctl function code */ int val /* value to be changed */ ) { struct ifreq ifr; strncpy (ifr.ifr_name, interfaceName, sizeof (ifr.ifr_name)); switch ((u_int) code) { case SIOCSIFFLAGS: ifr.ifr_flags = (short) val; break; case SIOCSIFMETRIC: ifr.ifr_metric = val; break; default: bzero ((caddr_t) &ifr.ifr_addr, sizeof (ifr.ifr_addr)); ifr.ifr_addr.sa_len = sizeof (struct sockaddr_in); ifr.ifr_addr.sa_family = AF_INET; ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = val; break; } return (ifIoctlCall (code, &ifr)); }
LOCAL STATUS ifIoctlGet(char *ifname, int cmd, int *val) { struct ifreq ifr; /* Copy string */ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); if ( ifIoctlCall(cmd, &ifr) == ERROR) return ERROR; /* Select command */ switch (cmd) { case SIOCGIFFLAGS: *val = ifr.ifr_flags; break; case SIOCGIFMETRIC: *val = ifr.ifr_metric; break; default: /* Get address */ *val = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr; break; } /* End select command */ return OK; }
LOCAL STATUS ifIoctlSet(char *ifname, int cmd, int val) { struct ifreq ifr; /* Copy string */ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); /* Select command */ switch (cmd) { case SIOCSIFFLAGS: ifr.ifr_flags = (short) val; break; case SIOCSIFMETRIC: ifr.ifr_metric = val; break; default: /* Set address */ memset(&ifr.ifr_addr, 0, sizeof(ifr.ifr_addr)); ifr.ifr_addr.sa_family = AF_INET; ifr.ifr_addr.sa_len = sizeof(struct sockaddr_in); ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = val; break; } /* End select command */ return ifIoctlCall(cmd, &ifr); }