-
Notifications
You must be signed in to change notification settings - Fork 391
fix: prefer using iproute2 instead of ifconfig #1090
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we add a comment, preferably in the commit message, about why are we making this change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The commit message starts with chore:
(which is used for something outside the code, such as library and CI setups), but I think this is more like fix:
because this fixes an actual problem #1089.
Also, a test for wol
is failing.
Thanks for your review and patience :) I learned the |
I rebased it and adjusted the code comment and the commit message. |
The test for |
Thanks! So a
for
for |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you. I added another commit to solve another issue in the test framework. I think now this is ready.
For `_comp_compgen_available_interfaces`, we prefer to use ip (iproute) since long interface names will be truncated by ifconfig (respective packages in the operating system, e.g. inetutils) [1]. Even for the other functions that use "ifconfig" and "ip", we change to use `ip` because `ip`'s behavior is more uniform among the systems and also `ip` is becoming more common in Linux distributions. [1]: https://github.com/scop/bash-completion/pull/1090/files Co-authored-by: Koichi Murase <myoga.murase@gmail.com> Co-authored-by: Yedaya Katsman <43016107+yedayak@users.noreply.github.com>
To test `_comp_compgen_xinetd_services`, we have been using a directory /test/fixtures/shared/bin (which contained two files `arp` and `ifconfig`as a mock /etc/xinetd.d. However, the directory /test/fixtures/shared/bin is shared with other tests, and the contents of the files therein are not proper xinetd configurations. We want to prepare a separate directory for a mock /etc/xinetd.d. This patch adds it under /test/fixtures/_comp_compgen_xinetd_services/xinetd.d.
I rebased on origin/main |
|
Thank you. So, does that mean the issue of truncation will be totally solved by this PR? Or does it mean there is another issue with the truncation with |
Yeah this should totally fix the problem, I think we should merge this. Since the other ifconfig doesn't have an issue there is no need to fix it in a new PR |
Thank you for your clarification! |
Unfortunately this has fallen through the cracks based on my old "changes requested" review that has not been reset (I look through open PR's from the list view but do not generally open all of them, including those in that state). And because of that, it also missed the 2.15.0 release :/ Sorry about that, merging now. |
Follow up to scop#1090
Follow up to scop#1090
Since scop#1090, iproute2 is preferred over ifconfig, however iproute2 provide the list of network interface in name@link in case an interface is bound to another one (such as macvtap for example), while the real interface name is not. $ ip link show 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 48:21:0b:52:19:22 brd ff:ff:ff:ff:ff:ff 4: eth0.128@eth0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 48:21:0b:52:19:22 brd ff:ff:ff:ff:ff:ff bash-completion using name@link as provided by iproute2 output then provide such name in auto completion list, leading to invalid interface name when auto completing tcpdump arguments. $ tcpdump -i <TAB> eth0 eth0.128@eth0 This commit handle this use case to drop link name after name@. $ tcpdump -i <TAB> eth0 eth0.128 See: scop#1090 See: https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/lib/utils.c?h=v6.15.0#n1306
Since scop#1090, iproute2 is preferred over ifconfig, however iproute2 provide the list of network interface in name@link in case an interface is bound to another one (such as macvtap for example), while the real interface name is not. $ ip link show 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 48:21:0b:52:19:22 brd ff:ff:ff:ff:ff:ff 4: eth0.128@eth0: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 48:21:0b:52:19:22 brd ff:ff:ff:ff:ff:ff bash-completion using name@link as provided by iproute2 output then provide such name in auto completion list, leading to invalid interface name when auto completing tcpdump arguments. $ tcpdump -i <TAB> eth0 eth0.128@eth0 This commit handle this use case to drop link name after name@. $ tcpdump -i <TAB> eth0 eth0.128 See: scop#1090 See: https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/lib/utils.c?h=v6.15.0#n1306
We have a fallback to `ifconfig` if `ip` doesn't exist, but it wasn't tested anywhere that does have `ip` (pretty sure that's all of our current distro tests). Introduce a parameterized fixture that "hides" `ip` or `ifconfig` and, use it in tests. Also introduce another test that actually makes sure that we find the correct interfaces. Follow up to scop#1090
resolves #1089
Same with this
bash-completion/completions/wol
Line 18 in 2b7fc19