X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Fifenslave.c;h=ae97457264d81dd6446386d2b37fc46512439953;hb=08ea11ab0749a7977e6d47cd0fa7b3c9cc10af32;hp=1e983f2ba448ec172ac5bb5885b0bf8618498a43;hpb=b597564e4c1fefd641a5f26a4e53d8b65d5fdcdf;p=oweals%2Fbusybox.git diff --git a/networking/ifenslave.c b/networking/ifenslave.c index 1e983f2ba..ae9745726 100644 --- a/networking/ifenslave.c +++ b/networking/ifenslave.c @@ -100,14 +100,19 @@ #include "libbb.h" +/* #include - no. linux/if_bonding.h pulls in linux/if.h */ #include #include #include -typedef unsigned long long u64; /* hack, so we may include kernel's ethtool.h */ -typedef uint32_t u32; /* ditto */ -typedef uint16_t u16; /* ditto */ -typedef uint8_t u8; /* ditto */ +#ifndef IFNAMSIZ +#define IFNAMSIZ 16 +#endif + +typedef uint64_t u64; /* hack, so we may include kernel's ethtool.h */ +typedef uint32_t u32; /* ditto */ +typedef uint16_t u16; /* ditto */ +typedef uint8_t u8; /* ditto */ #include @@ -147,7 +152,7 @@ static int ioctl_on_skfd(unsigned request, struct ifreq *ifr) static int set_ifrname_and_do_ioctl(unsigned request, struct ifreq *ifr, const char *ifname) { - strncpy_IFNAMSIZ(ifr->ifr_name, ifname); + strncpy_IFNAMSIZ(ifr->ifr_name, ifname); return ioctl_on_skfd(request, ifr); } @@ -261,9 +266,7 @@ static void change_active(char *master_ifname, char *slave_ifname) struct ifreq ifr; if (!(slave.flags.ifr_flags & IFF_SLAVE)) { - bb_error_msg_and_die( - "%s is not a slave", - slave_ifname); + bb_error_msg_and_die("%s is not a slave", slave_ifname); } strncpy_IFNAMSIZ(ifr.ifr_slave, slave_ifname); @@ -402,8 +405,7 @@ static int release(char *master_ifname, char *slave_ifname) int res = 0; if (!(slave.flags.ifr_flags & IFF_SLAVE)) { - bb_error_msg("%s is not a slave", - slave_ifname); + bb_error_msg("%s is not a slave", slave_ifname); return 1; } @@ -449,7 +451,7 @@ static NOINLINE void get_drv_info(char *master_ifname) } int ifenslave_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) +int ifenslave_main(int argc UNUSED_PARAM, char **argv) { char *master_ifname, *slave_ifname; int rv; @@ -462,18 +464,19 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) }; #if ENABLE_GETOPT_LONG static const char ifenslave_longopts[] ALIGN1 = - "change-active\0" No_argument "c" - "detach\0" No_argument "d" - "force\0" No_argument "f" + "change-active\0" No_argument "c" + "detach\0" No_argument "d" + "force\0" No_argument "f" + /* "all-interfaces\0" No_argument "a" */ ; applet_long_options = ifenslave_longopts; #endif INIT_G(); - opt = getopt32(argv, "cdf"); + opt = getopt32(argv, "cdfa"); argv += optind; - if (opt & (opt-1)) /* options check */ + if (opt & (opt-1)) /* Only one option can be given */ bb_show_usage(); master_ifname = *argv++; @@ -505,25 +508,25 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) return EXIT_SUCCESS; } - res = get_if_settings(master_ifname, &master); - if (res) { + if (get_if_settings(master_ifname, &master)) { /* Probably a good reason not to go on */ bb_perror_msg_and_die("%s: can't get settings", master_ifname); } - /* check if master is indeed a master; + /* Check if master is indeed a master; * if not then fail any operation */ if (!(master.flags.ifr_flags & IFF_MASTER)) bb_error_msg_and_die("%s is not a master", master_ifname); - /* check if master is up; if not then fail any operation */ + /* Check if master is up; if not then fail any operation */ if (!(master.flags.ifr_flags & IFF_UP)) bb_error_msg_and_die("%s is not up", master_ifname); - /* No opts: neither -c[hange] nor -d[etach] -> it's "enslave" then; - * and -f[orce] is not there too */ - if (!opt) { +#ifdef WHY_BOTHER + /* Neither -c[hange] nor -d[etach] -> it's "enslave" then; + * and -f[orce] is not there too. Check that it's ethernet. */ + if (!(opt & (OPT_d|OPT_c|OPT_f)) { /* The family '1' is ARPHRD_ETHER for ethernet. */ if (master.hwaddr.ifr_hwaddr.sa_family != 1) { bb_error_msg_and_die( @@ -531,10 +534,11 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) master_ifname); } } +#endif /* Accepts only one slave */ if (opt & OPT_c) { - /* change active slave */ + /* Change active slave */ if (get_slave_flags(slave_ifname)) { bb_perror_msg_and_die( "%s: can't get flags", slave_ifname); @@ -543,11 +547,11 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) return EXIT_SUCCESS; } - /* Accept multiple slaves */ + /* Accepts multiple slaves */ res = 0; do { if (opt & OPT_d) { - /* detach a slave interface from the master */ + /* Detach a slave interface from the master */ rv = get_slave_flags(slave_ifname); if (rv) { /* Can't work with this slave, */ @@ -560,14 +564,12 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) } rv = release(master_ifname, slave_ifname); if (rv) { - bb_perror_msg( - "master %s, slave %s: " - "can't release", - master_ifname, slave_ifname); + bb_perror_msg("can't release %s from %s", + slave_ifname, master_ifname); res = rv; } } else { - /* attach a slave interface to the master */ + /* Attach a slave interface to the master */ rv = get_if_settings(slave_ifname, &slave); if (rv) { /* Can't work with this slave, */ @@ -580,10 +582,8 @@ int ifenslave_main(int argc ATTRIBUTE_UNUSED, char **argv) } rv = enslave(master_ifname, slave_ifname); if (rv) { - bb_perror_msg( - "master %s, slave %s: " - "can't enslave", - master_ifname, slave_ifname); + bb_perror_msg("can't enslave %s to %s", + slave_ifname, master_ifname); res = rv; } }