ip maddr show and ip maddr show dev enP20p96s0 show different data
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
The Ubuntu-power-systems project |
Fix Released
|
Medium
|
Canonical Server | ||
iproute2 (Ubuntu) |
Fix Released
|
Medium
|
Andreas Hasenack | ||
Trusty |
Fix Released
|
Medium
|
Andreas Hasenack | ||
Xenial |
Fix Released
|
Medium
|
Andreas Hasenack | ||
Zesty |
Won't Fix
|
Medium
|
Andreas Hasenack | ||
Artful |
Fix Released
|
Medium
|
Andreas Hasenack |
Bug Description
[Impact]
When a nic has a long enough name such that there is no space between the name and the ":" in /proc/net/igmp, ip maddr show dev <nic> will miss the IPV4 addresses which is otherwise shown with "ip maddr show".
This is inconsistent behavior and can break scripts and tests, as shown in this bug's original description.
Three patches from upstream were taken to fix this bug, and they were used individually instead of being merged into one single patch so it's easier to track and recognize authorship:
https:/
https:/
https:/
[Test Case]
* deploy the ubuntu release under test. Please use bare metal or a VM instead of containers, because the ip tool parses a file in /proc. Make sure iproute2 is installed:
sudo apt install iproute2
* Run these commands to setup a dummy interface with a long name and an IPv4 address. Please change the address if it conflicts with a real network you might have available on that machine:
sudo ip link add dummylongnic0 type dummy
sudo ip addr add 192.168.199.10/24 dev dummylongnic0
sudo ip link set dev dummylongnic0 up
* Compare the output of these two commands with regards to the dummylongnic0 interface:
sudo ip maddr show
sudo ip maddr show dev dummylongnic0
* With the buggy iproute2 package installed, the more specific output "ip maddr show dev dummylongnic0" should lack the "inet 224.0.0.1" line:
ip maddr show dev dummylongnic0
2: dummylongnic0
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
inet6 ff02::1
inet6 ff01::1
Whereas the less specific command, which lists all interfaces, will have it listed for dummylongnic0:
2: dummylongnic0
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
inet 224.0.0.1
inet6 ff02::1
inet6 ff01::1
* With the fixed iproute2 package, all dummylongnic0 addresses will be present in both outputs.
[Regression Potential]
In the end, the ip tool is parsing a text file produced by the kernel. As most parsing done in C, it's pretty low level and sensitive to changes in the file it's reading.
[Other Info]
I suggest to conduct the tests in VMs instead of containers (LXD) because the ip maddr command parses /proc/net/igmp, which is produced by the kernel. If you use a container, then it's the host's kernel that will be providing that file and it might not be the same as with the native kernel of that particular ubuntu release.
--- Original description ---
Attn. Canonical: Please make sure that the existing iproute2 package gets updated with the two referenced patches as the missing information is impacting our standard test suites.
Thanks.
== Comment: #0 - Alton L. Pundt - 2017-03-29 14:37:57 ==
---Problem Description---
ip maddr show and ip maddr show dev enP20p96s0 show different data
---uname output---
Linux roselp1 4.10.0-14-generic #16-Ubuntu SMP Fri Mar 17 15:19:05 UTC 2017 ppc64le ppc64le ppc64le GNU/Linux
Machine Type = 8286-42A
---Steps to Reproduce---
run these at command line:
root@roselp1:~# ip maddr show
...
10: enP20p96s0
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
link 33:33:ff:6d:d0:d0
link 01:00:5e:00:00:fc
link 33:33:00:01:00:03
inet 224.0.0.252
inet 224.0.0.1
inet6 ff02::1:3
inet6 ff02::1:ff6d:d0d0 users 3
inet6 ff02::1
inet6 ff01::1
...
root@roselp1:~# ip maddr show dev enP20p96s0
10: enP20p96s0
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
link 33:33:ff:6d:d0:d0
link 01:00:5e:00:00:fc
link 33:33:00:01:00:03
inet6 ff02::1:3
inet6 ff02::1:ff6d:d0d0 users 3
inet6 ff02::1
inet6 ff01::1
== Comment: #12 - David Z. Dai - 2017-11-13 15:07:32 ==
I found upstream already had patches that fix this problem:
1) https:/
commit 530903dd9003492
Author: Petr Vorel <email address hidden>
Date: Tue Jan 17 00:25:50 2017 +0100
ip: fix igmp parsing when iface is long
Entries with long vhost names in /proc/net/igmp have no whitespace
between name and colon, so sscanf() adds it to vhost and
'ip maddr show iface' doesn't include inet result.
Signed-off-by: Petr Vorel <email address hidden>
2) https:/
commit 21503ed2af233ff
Author: Michal Kubecek <email address hidden>
Date: Thu Oct 19 10:21:08 2017 +0200
ip maddr: fix filtering by device
Commit 530903dd9003 ("ip: fix igmp parsing when iface is long") uses
variable len to keep trailing colon from interface name comparison. This
variable is local to loop body but we set it in one pass and use it in
following one(s) so that we are actually using (pseudo)random length for
comparison. This became apparent since commit b48a1161f5f9 ("ipmaddr: Avoid
accessing uninitialized data") always initializes len to zero so that the
name comparison is always true. As a result, "ip maddr show dev eth0" shows
IPv4 multicast addresses for all interfaces.
Instead of keeping the length, let's simply replace the trailing colon with
a null byte. The bonus is that we get correct interface name in ma.name.
Fixes: 530903dd9003 ("ip: fix igmp parsing when iface is long")
Signed-off-by: Michal Kubecek <email address hidden>
Acked-by: Phil Sutter <email address hidden>
Acked-by: Petr Vorel <email address hidden>
The fix is in the same place, but different way.
This is the current implementation In ip/ipmaddr.c file:
if (buf[0] != '\t') {
}
The existing "ip" command that shows the problem:
[root@coral-
2: enP1p12s0f0
link 01:00:5e:00:00:01
inet6 ff02::1
inet6 ff01::1
I clone the latest "ip" utility from upstream to the same test box.
[root@coral-
I build the "ip" utility on same test box, which has the above 2 patches included.
[root@coral-
2: enP1p12s0f0
link 01:00:5e:00:00:01
inet 224.0.0.1 /* <--- */
inet6 ff02::1
inet6 ff01::1
tags: | added: architecture-ppc64le bugnameltc-153025 severity-medium targetmilestone-inin--- |
Changed in ubuntu: | |
assignee: | nobody → Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage) |
affects: | ubuntu → iproute2 (Ubuntu) |
Changed in ubuntu-power-systems: | |
assignee: | nobody → Canonical Server Team (canonical-server) |
importance: | Undecided → Medium |
tags: | added: triage-g |
Changed in ubuntu-power-systems: | |
assignee: | Canonical Server Team (canonical-server) → David Britton (davidpbritton) |
Changed in iproute2 (Ubuntu): | |
assignee: | Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage) → David Britton (davidpbritton) |
Changed in ubuntu-power-systems: | |
status: | New → Triaged |
Changed in ubuntu-power-systems: | |
assignee: | David Britton (davidpbritton) → Canonical Server Team (canonical-server) |
Changed in iproute2 (Ubuntu): | |
assignee: | David Britton (davidpbritton) → Andreas Hasenack (ahasenack) |
Changed in iproute2 (Ubuntu): | |
status: | New → In Progress |
description: | updated |
description: | updated |
Changed in ubuntu-power-systems: | |
status: | Triaged → In Progress |
Changed in iproute2 (Ubuntu Trusty): | |
status: | New → In Progress |
Changed in iproute2 (Ubuntu Xenial): | |
status: | New → In Progress |
Changed in iproute2 (Ubuntu Zesty): | |
status: | New → In Progress |
Changed in iproute2 (Ubuntu Artful): | |
status: | New → In Progress |
Changed in iproute2 (Ubuntu): | |
importance: | Undecided → Medium |
Changed in iproute2 (Ubuntu Trusty): | |
importance: | Undecided → Medium |
Changed in iproute2 (Ubuntu Zesty): | |
importance: | Undecided → Medium |
Changed in iproute2 (Ubuntu Artful): | |
importance: | Undecided → Medium |
Changed in iproute2 (Ubuntu Xenial): | |
importance: | Undecided → Medium |
Changed in iproute2 (Ubuntu Trusty): | |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Changed in iproute2 (Ubuntu Xenial): | |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Changed in iproute2 (Ubuntu Zesty): | |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Changed in iproute2 (Ubuntu Artful): | |
assignee: | nobody → Andreas Hasenack (ahasenack) |
Changed in ubuntu-power-systems: | |
status: | In Progress → Fix Committed |
Changed in ubuntu-power-systems: | |
status: | Fix Committed → Fix Released |
We also need to fix the FTBFS problem in order to proceed with an SRU: https:/ /bugs.launchpad .net/ubuntu/ +source/ iproute2/ +bug/1735158