utils: Introduce and use nodev() helper routine

There is a couple of places where we report error in case of no network
device is found. In all of them we output message in the same format to
stderr and either return -1 or 1 to the caller or exit with -1.

Introduce new helper function nodev() that takes name of the network
device caused error and returns -1 to it's caller. Either call exit()
or return to the caller to preserve behaviour before change.

Use -nodev() in traffic control (tc) code to return 1.

Simplify expression for checking for argument being 0/NULL in @if
statement.

Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
This commit is contained in:
Serhey Popovych 2018-03-07 10:40:36 +02:00 committed by David Ahern
parent f686f76468
commit fe99adbca4
28 changed files with 97 additions and 164 deletions

View File

@ -311,11 +311,8 @@ static int fdb_show(int argc, char **argv)
/*we'll keep around filter_dev for older kernels */
if (filter_dev) {
filter_index = ll_name_to_index(filter_dev);
if (filter_index == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
filter_dev);
return -1;
}
if (!filter_index)
return nodev(filter_dev);
req.ifm.ifi_index = filter_index;
}
@ -391,8 +388,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
} else if (strcmp(*argv, "via") == 0) {
NEXT_ARG();
via = ll_name_to_index(*argv);
if (via == 0)
invarg("invalid device\n", *argv);
if (!via)
exit(nodev(*argv));
} else if (strcmp(*argv, "self") == 0) {
req.ndm.ndm_flags |= NTF_SELF;
} else if (matches(*argv, "master") == 0) {
@ -467,10 +464,8 @@ static int fdb_modify(int cmd, int flags, int argc, char **argv)
addattr32(&req.n, sizeof(req), NDA_IFINDEX, via);
req.ndm.ndm_ifindex = ll_name_to_index(d);
if (req.ndm.ndm_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return -1;
}
if (!req.ndm.ndm_ifindex)
return nodev(d);
if (rtnl_talk(&rth, &req.n, NULL) < 0)
return -1;

View File

@ -485,11 +485,9 @@ static int brlink_show(int argc, char **argv)
}
if (filter_dev) {
if ((filter_index = ll_name_to_index(filter_dev)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
filter_dev);
return -1;
}
filter_index = ll_name_to_index(filter_dev);
if (!filter_index)
return nodev(filter_dev);
}
if (show_details) {

View File

@ -287,11 +287,8 @@ static int mdb_show(int argc, char **argv)
if (filter_dev) {
filter_index = ll_name_to_index(filter_dev);
if (filter_index == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
filter_dev);
return -1;
}
if (!filter_index)
return nodev(filter_dev);
}
new_json_obj(json);
@ -360,16 +357,12 @@ static int mdb_modify(int cmd, int flags, int argc, char **argv)
}
req.bpm.ifindex = ll_name_to_index(d);
if (req.bpm.ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return -1;
}
if (!req.bpm.ifindex)
return nodev(d);
entry.ifindex = ll_name_to_index(p);
if (entry.ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", p);
return -1;
}
if (!entry.ifindex)
return nodev(p);
if (!inet_pton(AF_INET, grp, &entry.addr.u.ip4)) {
if (!inet_pton(AF_INET6, grp, &entry.addr.u.ip6)) {

View File

@ -554,11 +554,8 @@ static int vlan_show(int argc, char **argv)
if (filter_dev) {
filter_index = ll_name_to_index(filter_dev);
if (filter_index == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
filter_dev);
return -1;
}
if (!filter_index)
return nodev(filter_dev);
}
new_json_obj(json);

View File

@ -182,6 +182,7 @@ void missarg(const char *) __attribute__((noreturn));
void invarg(const char *, const char *) __attribute__((noreturn));
void duparg(const char *, const char *) __attribute__((noreturn));
void duparg2(const char *, const char *) __attribute__((noreturn));
int nodev(const char *dev);
int check_ifname(const char *);
int get_ifname(char *, const char *);
const char *get_ifname_rta(int ifindex, const struct rtattr *rta);

View File

@ -296,10 +296,8 @@ static int parse_args(int argc, char **argv, int cmd, struct ip6_tnl_parm2 *p)
}
if (medium) {
p->link = ll_name_to_index(medium);
if (p->link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", medium);
return -1;
}
if (!p->link)
return nodev(medium);
}
return 0;
}

View File

@ -2211,10 +2211,9 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv)
if (!scoped && cmd != RTM_DELADDR)
req.ifa.ifa_scope = default_scope(&lcl);
if ((req.ifa.ifa_index = ll_name_to_index(d)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return -1;
}
req.ifa.ifa_index = ll_name_to_index(d);
if (!req.ifa.ifa_index)
return nodev(d);
if (valid_lftp || preferred_lftp) {
struct ifa_cacheinfo cinfo = {};

View File

@ -981,10 +981,8 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
}
req.i.ifi_index = ll_name_to_index(dev);
if (req.i.ifi_index == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", dev);
return -1;
}
if (!req.i.ifi_index)
return nodev(dev);
} else {
/* Allow "ip link add dev" and "ip link add name" */
if (!name)
@ -994,11 +992,8 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
int ifindex;
ifindex = ll_name_to_index(link);
if (ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
link);
return -1;
}
if (!ifindex)
return nodev(link);
addattr_l(&req.n, sizeof(req), IFLA_LINK, &ifindex, 4);
}

View File

@ -179,7 +179,7 @@ static int bond_parse_opt(struct link_util *lu, int argc, char **argv,
NEXT_ARG();
ifindex = ll_name_to_index(*argv);
if (!ifindex)
return -1;
return nodev(*argv);
addattr32(n, 1024, IFLA_BOND_ACTIVE_SLAVE, ifindex);
} else if (matches(*argv, "clear_active_slave") == 0) {
addattr32(n, 1024, IFLA_BOND_ACTIVE_SLAVE, 0);
@ -242,7 +242,7 @@ static int bond_parse_opt(struct link_util *lu, int argc, char **argv,
NEXT_ARG();
ifindex = ll_name_to_index(*argv);
if (!ifindex)
return -1;
return nodev(*argv);
addattr32(n, 1024, IFLA_BOND_PRIMARY, ifindex);
} else if (matches(*argv, "primary_reselect") == 0) {
NEXT_ARG();

View File

@ -793,11 +793,8 @@ int bridge_parse_xstats(struct link_util *lu, int argc, char **argv)
} else if (strcmp(*argv, "dev") == 0) {
NEXT_ARG();
filter_index = ll_name_to_index(*argv);
if (filter_index == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
return -1;
}
if (!filter_index)
return nodev(*argv);
} else if (strcmp(*argv, "help") == 0) {
bridge_print_xstats_help(lu, stdout);
exit(0);

View File

@ -133,11 +133,8 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
NEXT_ARG();
check_duparg(&attrs, IFLA_VXLAN_LINK, "dev", *argv);
link = ll_name_to_index(*argv);
if (link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
exit(-1);
}
if (!link)
exit(nodev(*argv));
addattr32(n, 1024, IFLA_VXLAN_LINK, link);
} else if (!matches(*argv, "ttl") ||
!matches(*argv, "hoplimit")) {

View File

@ -244,10 +244,9 @@ static int mroute_list(int argc, char **argv)
if (id) {
int idx;
if ((idx = ll_name_to_index(id)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", id);
return -1;
}
idx = ll_name_to_index(id);
if (!idx)
return nodev(id);
filter.iif = idx;
}

View File

@ -179,9 +179,10 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)
ll_init_map(&rth);
if (dev && (req.ndm.ndm_ifindex = ll_name_to_index(dev)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", dev);
return -1;
if (dev) {
req.ndm.ndm_ifindex = ll_name_to_index(dev);
if (!req.ndm.ndm_ifindex)
return nodev(dev);
}
if (rtnl_talk(&rth, &req.n, NULL) < 0)
@ -467,10 +468,9 @@ static int do_show_or_flush(int argc, char **argv, int flush)
ll_init_map(&rth);
if (filter_dev) {
if ((filter.index = ll_name_to_index(filter_dev)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", filter_dev);
return -1;
}
filter.index = ll_name_to_index(filter_dev);
if (!filter.index)
return nodev(filter_dev);
addattr32(&req.n, sizeof(req), NDA_IFINDEX, filter.index);
}

View File

@ -140,10 +140,8 @@ static int ipntable_modify(int cmd, int flags, int argc, char **argv)
NEXT_ARG();
ifindex = ll_name_to_index(*argv);
if (ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", *argv);
return -1;
}
if (!ifindex)
return nodev(*argv);
rta_addattr32(parms_rta, sizeof(parms_buf),
NDTPA_IFINDEX, ifindex);

View File

@ -973,10 +973,8 @@ static int parse_one_nh(struct nlmsghdr *n, struct rtmsg *r,
} else if (strcmp(*argv, "dev") == 0) {
NEXT_ARG();
rtnh->rtnh_ifindex = ll_name_to_index(*argv);
if (rtnh->rtnh_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", *argv);
return -1;
}
if (!rtnh->rtnh_ifindex)
return nodev(*argv);
} else if (strcmp(*argv, "weight") == 0) {
unsigned int w;
@ -1474,10 +1472,8 @@ static int iproute_modify(int cmd, unsigned int flags, int argc, char **argv)
if (d) {
int idx = ll_name_to_index(d);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return -1;
}
if (!idx)
return nodev(d);
addattr32(&req.n, sizeof(req), RTA_OIF, idx);
}
@ -1866,19 +1862,15 @@ static int iproute_list_flush_or_save(int argc, char **argv, int action)
if (id) {
idx = ll_name_to_index(id);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", id);
return -1;
}
if (!idx)
return nodev(id);
filter.iif = idx;
filter.iifmask = -1;
}
if (od) {
idx = ll_name_to_index(od);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", od);
return -1;
}
if (!idx)
return nodev(od);
filter.oif = idx;
filter.oifmask = -1;
}
@ -2028,18 +2020,14 @@ static int iproute_get(int argc, char **argv)
if (idev) {
idx = ll_name_to_index(idev);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", idev);
return -1;
}
if (!idx)
return nodev(idev);
addattr32(&req.n, sizeof(req), RTA_IIF, idx);
}
if (odev) {
idx = ll_name_to_index(odev);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", odev);
return -1;
}
if (!idx)
return nodev(odev);
addattr32(&req.n, sizeof(req), RTA_OIF, idx);
}
}

View File

@ -594,7 +594,7 @@ static int parse_encap_seg6local(struct rtattr *rta, size_t len, int *argcp,
duparg2("iif", *argv);
iif = ll_name_to_index(*argv);
if (!iif)
invarg("\"iif\" interface not found\n", *argv);
exit(nodev(*argv));
rta_addattr32(rta, len, SEG6_LOCAL_IIF, iif);
} else if (strcmp(*argv, "oif") == 0) {
NEXT_ARG();
@ -602,7 +602,7 @@ static int parse_encap_seg6local(struct rtattr *rta, size_t len, int *argcp,
duparg2("oif", *argv);
oif = ll_name_to_index(*argv);
if (!oif)
invarg("\"oif\" interface not found\n", *argv);
exit(nodev(*argv));
rta_addattr32(rta, len, SEG6_LOCAL_OIF, oif);
} else if (strcmp(*argv, "srh") == 0) {
NEXT_ARG();

View File

@ -213,10 +213,8 @@ static int parse_args(int argc, char **argv, int cmd, struct ip_tunnel_parm *p)
if (medium) {
p->link = ll_name_to_index(medium);
if (p->link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", medium);
return -1;
}
if (!p->link)
return nodev(medium);
}
if (p->i_key == 0 && IN_MULTICAST(ntohl(p->iph.daddr))) {

View File

@ -245,11 +245,8 @@ get_failed:
} else if (!matches(*argv, "dev")) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
exit(-1);
}
if (!link)
exit(nodev(*argv));
} else if (!matches(*argv, "ttl") ||
!matches(*argv, "hoplimit") ||
!matches(*argv, "hlim")) {

View File

@ -251,11 +251,8 @@ get_failed:
} else if (!matches(*argv, "dev")) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
exit(-1);
}
if (!link)
exit(nodev(*argv));
} else if (!matches(*argv, "ttl") ||
!matches(*argv, "hoplimit") ||
!matches(*argv, "hlim")) {

View File

@ -197,8 +197,8 @@ get_failed:
} else if (matches(*argv, "dev") == 0) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0)
invarg("\"dev\" is invalid", *argv);
if (!link)
exit(nodev(*argv));
} else if (strcmp(*argv, "ttl") == 0 ||
strcmp(*argv, "hoplimit") == 0 ||
strcmp(*argv, "hlim") == 0) {

View File

@ -225,8 +225,8 @@ get_failed:
} else if (matches(*argv, "dev") == 0) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0)
invarg("\"dev\" is invalid", *argv);
if (!link)
exit(nodev(*argv));
} else if (strcmp(*argv, "ttl") == 0 ||
strcmp(*argv, "hoplimit") == 0 ||
strcmp(*argv, "hlim") == 0) {

View File

@ -142,11 +142,8 @@ get_failed:
} else if (!matches(*argv, "dev")) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
exit(-1);
}
if (!link)
exit(nodev(*argv));
} else if (strcmp(*argv, "fwmark") == 0) {
NEXT_ARG();
if (get_u32(&fwmark, *argv, 0))

View File

@ -144,11 +144,8 @@ get_failed:
} else if (!matches(*argv, "dev")) {
NEXT_ARG();
link = ll_name_to_index(*argv);
if (link == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n",
*argv);
exit(-1);
}
if (!link)
exit(nodev(*argv));
} else if (strcmp(*argv, "fwmark") == 0) {
NEXT_ARG();
if (get_u32(&fwmark, *argv, 0))

View File

@ -845,6 +845,12 @@ void duparg2(const char *key, const char *arg)
exit(-1);
}
int nodev(const char *dev)
{
fprintf(stderr, "Cannot find device \"%s\"\n", dev);
return -1;
}
int check_ifname(const char *name)
{
/* These checks mimic kernel checks in dev_valid_name */

View File

@ -193,10 +193,8 @@ parse_direction(struct action_util *a, int *argc_p, char ***argv_p,
ll_init_map(&rth);
idx = ll_name_to_index(d);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return -1;
}
if (!idx)
return nodev(d);
p.ifindex = idx;
}

View File

@ -142,10 +142,9 @@ static int tc_class_modify(int cmd, unsigned int flags, int argc, char **argv)
if (d[0]) {
ll_init_map(&rth);
if ((req.t.tcm_ifindex = ll_name_to_index(d)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
req.t.tcm_ifindex = ll_name_to_index(d);
if (!req.t.tcm_ifindex)
return -nodev(d);
}
if (rtnl_talk(&rth, &req.n, NULL) < 0)
@ -440,10 +439,9 @@ static int tc_class_list(int argc, char **argv)
ll_init_map(&rth);
if (d[0]) {
if ((t.tcm_ifindex = ll_name_to_index(d)) == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
t.tcm_ifindex = ll_name_to_index(d);
if (!t.tcm_ifindex)
return -nodev(d);
filter_ifindex = t.tcm_ifindex;
}

View File

@ -198,10 +198,8 @@ static int tc_filter_modify(int cmd, unsigned int flags, int argc, char **argv,
ll_init_map(&rth);
req->t.tcm_ifindex = ll_name_to_index(d);
if (req->t.tcm_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
if (!req->t.tcm_ifindex)
return -nodev(d);
} else if (block_index) {
req->t.tcm_ifindex = TCM_IFINDEX_MAGIC_BLOCK;
req->t.tcm_block_index = block_index;
@ -529,10 +527,8 @@ static int tc_filter_get(int cmd, unsigned int flags, int argc, char **argv)
ll_init_map(&rth);
req.t.tcm_ifindex = ll_name_to_index(d);
if (req.t.tcm_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
if (!req.t.tcm_ifindex)
return -nodev(d);
filter_ifindex = req.t.tcm_ifindex;
} else if (block_index) {
req.t.tcm_ifindex = TCM_IFINDEX_MAGIC_BLOCK;
@ -695,10 +691,8 @@ static int tc_filter_list(int argc, char **argv)
if (d[0]) {
req.t.tcm_ifindex = ll_name_to_index(d);
if (req.t.tcm_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
if (!req.t.tcm_ifindex)
return -nodev(d);
filter_ifindex = req.t.tcm_ifindex;
} else if (block_index) {
if (!tc_qdisc_block_exists(block_index)) {

View File

@ -199,10 +199,8 @@ static int tc_qdisc_modify(int cmd, unsigned int flags, int argc, char **argv)
ll_init_map(&rth);
idx = ll_name_to_index(d);
if (idx == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
if (!idx)
return -nodev(d);
req.t.tcm_ifindex = idx;
}
@ -378,10 +376,8 @@ static int tc_qdisc_list(int argc, char **argv)
if (d[0]) {
t.tcm_ifindex = ll_name_to_index(d);
if (t.tcm_ifindex == 0) {
fprintf(stderr, "Cannot find device \"%s\"\n", d);
return 1;
}
if (!t.tcm_ifindex)
return -nodev(d);
filter_ifindex = t.tcm_ifindex;
}