commit c71a164fb3abbce177cb2692e25ebc54e0156d5a (refs/remotes/origin/getindex) Author: Коренберг ☢️ Марк Date: Thu May 13 15:43:14 2021 +0500 ip: "ip link get dev if%u" now works diff --git a/ip/ip_common.h b/ip/ip_common.h index 9a31e837..1eb40a1e 100644 --- a/ip/ip_common.h +++ b/ip/ip_common.h @@ -89,7 +89,7 @@ int do_seg6(int argc, char **argv); int do_ipnh(int argc, char **argv); int do_mptcp(int argc, char **argv); -int iplink_get(char *name, __u32 filt_mask); +int iplink_get(unsigned ifindex, __u32 filt_mask); int iplink_ifla_xstats(int argc, char **argv); int ip_link_list(req_filter_fn_t filter_fn, struct nlmsg_chain *linfo); diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 0bbcee2b..9be6ea4d 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -10,6 +10,7 @@ * */ +#include #include #include #include @@ -2111,7 +2112,8 @@ static int ipaddr_list_flush_or_save(int argc, char **argv, int action) * the link device */ if (filter_dev && filter.group == -1 && do_link == 1) { - if (iplink_get(filter_dev, RTEXT_FILTER_VF) < 0) { + assert(filter.ifindex); + if (iplink_get(filter.ifindex, RTEXT_FILTER_VF) < 0) { perror("Cannot send link get request"); delete_json_obj(); exit(1); diff --git a/ip/iplink.c b/ip/iplink.c index 27c9be44..43272c6b 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -1101,21 +1101,17 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv) return 0; } -int iplink_get(char *name, __u32 filt_mask) +int iplink_get(unsigned ifindex, __u32 filt_mask) { struct iplink_req req = { .n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)), .n.nlmsg_flags = NLM_F_REQUEST, .n.nlmsg_type = RTM_GETLINK, .i.ifi_family = preferred_family, + .i.ifi_index = ifindex, }; struct nlmsghdr *answer; - if (name) { - addattr_l(&req.n, sizeof(req), - !check_ifname(name) ? IFLA_IFNAME : IFLA_ALT_IFNAME, - name, strlen(name) + 1); - } addattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask); if (rtnl_talk(&rth, &req.n, &answer) < 0)