static int do_chflags(char *dev, __u32 flags, __u32 mask) { struct ifreq ifr; int fd; int err; strcpy(ifr.ifr_name, dev); fd = get_ctl_fd(); if (fd < 0) return -1; err = ioctl(fd, SIOCGIFFLAGS, &ifr); if (err) { perror("SIOCGIFFLAGS"); close(fd); return -1; } if ((ifr.ifr_flags^flags)&mask) { ifr.ifr_flags &= ~mask; ifr.ifr_flags |= mask&flags; err = ioctl(fd, SIOCSIFFLAGS, &ifr); if (err) perror("SIOCSIFFLAGS"); } close(fd); return err; }
/* Exits on error */ static void do_changename(char *dev, char *newdev) { struct ifreq ifr; int fd; strncpy_IFNAMSIZ(ifr.ifr_name, dev); strncpy_IFNAMSIZ(ifr.ifr_newname, newdev); fd = get_ctl_fd(); xioctl(fd, SIOCSIFNAME, &ifr); close(fd); }
/* Exits on error */ static void set_address(struct ifreq *ifr, int brd) { int s; s = get_ctl_fd(); if (brd) xioctl(s, SIOCSIFHWBROADCAST, ifr); else xioctl(s, SIOCSIFHWADDR, ifr); close(s); }
/* Exits on error */ static void set_mtu(char *dev, int mtu) { struct ifreq ifr; int s; s = get_ctl_fd(); memset(&ifr, 0, sizeof(ifr)); strncpy_IFNAMSIZ(ifr.ifr_name, dev); ifr.ifr_mtu = mtu; xioctl(s, SIOCSIFMTU, &ifr); close(s); }
/* Exits on error */ static void set_qlen(char *dev, int qlen) { struct ifreq ifr; int s; s = get_ctl_fd(); memset(&ifr, 0, sizeof(ifr)); strncpy_IFNAMSIZ(ifr.ifr_name, dev); ifr.ifr_qlen = qlen; xioctl(s, SIOCSIFTXQLEN, &ifr); close(s); }
/* Exits on error */ static void do_chflags(char *dev, uint32_t flags, uint32_t mask) { struct ifreq ifr; int fd; strncpy_IFNAMSIZ(ifr.ifr_name, dev); fd = get_ctl_fd(); xioctl(fd, SIOCGIFFLAGS, &ifr); if ((ifr.ifr_flags ^ flags) & mask) { ifr.ifr_flags &= ~mask; ifr.ifr_flags |= mask & flags; xioctl(fd, SIOCSIFFLAGS, &ifr); } close(fd); }
static int set_address(struct ifreq *ifr, int brd) { int s; s = get_ctl_fd(); if (s < 0) return -1; if (ioctl(s, brd?SIOCSIFHWBROADCAST:SIOCSIFHWADDR, ifr) < 0) { perror(brd?"SIOCSIFHWBROADCAST":"SIOCSIFHWADDR"); close(s); return -1; } close(s); return 0; }
void devEthernet::_ioctl(const int op, Linux::ifreq& ifr, const std::string& errPrefix, ACE_HANDLE fd) { ACE_TRACE("devEthernet::_ioctl"); ACE_OS::strncpy(ifr.ifr_name, getIfaceName().c_str(), IFNAMSIZ); if ( fd == ACE_INVALID_HANDLE ) { try { fd = get_ctl_fd(); } catch (const Exception& e) { throw e; } } int err = ACE_OS::ioctl(fd, op, &ifr); ACE_OS::close(fd); if (err < 0) throw IOCtlFailed(getIfaceName() + ": " + errPrefix + std::string(ACE_OS::strerror(errno))); }
static int do_changename(const char *dev, const char *newdev) { struct ifreq ifr; int fd; int err; strncpy(ifr.ifr_name, dev, IFNAMSIZ); strncpy(ifr.ifr_newname, newdev, IFNAMSIZ); fd = get_ctl_fd(); if (fd < 0) return -1; err = ioctl(fd, SIOCSIFNAME, &ifr); if (err) { perror("SIOCSIFNAME"); close(fd); return -1; } close(fd); return err; }
static bool is_link_up(char *devname) { struct ifreq ifr; int fd; int err; strncpy(ifr.ifr_name, devname, IFNAMSIZ); fd = get_ctl_fd(); if (fd < 0) return false; err = ioctl(fd, SIOCGIFFLAGS, &ifr); if (err) { close(fd); return false; } if (ifr.ifr_flags & IFF_UP) return true; return false; }
static int set_mtu(char *dev, int mtu) { struct ifreq ifr; int s; s = get_ctl_fd(); if (s < 0) return -1; memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, dev); ifr.ifr_mtu = mtu; if (ioctl(s, SIOCSIFMTU, &ifr) < 0) { perror("SIOCSIFMTU"); close(s); return -1; } close(s); return 0; }
static int set_qlen(char *dev, int qlen) { struct ifreq ifr; int s; s = get_ctl_fd(); if (s < 0) return -1; memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, dev); ifr.ifr_qlen = qlen; if (ioctl(s, SIOCSIFTXQLEN, &ifr) < 0) { perror("SIOCSIFXQLEN"); close(s); return -1; } close(s); return 0; }
static int do_changename(char *dev, char *newdev) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) struct ifreq ifr; int fd; int err; strcpy(ifr.ifr_name, dev); strcpy(ifr.ifr_newname, newdev); fd = get_ctl_fd(); if (fd < 0) return -1; err = ioctl(fd, SIOCSIFNAME, &ifr); if (err) { perror("SIOCSIFNAME"); close(fd); return -1; } close(fd); return err; #endif return 0; }