devinet: show all addresses assigned to interface
Subsystems (3)
PATCH 1/1 devinet: show all addresses assigned to interface
Not all ips are shown by "ip addr show" command when IPs number assigned to an interface is more than 60-80 (in fact it depends on broadcast/label etc presence on each address).
Steps to reproduce:
It's terribly simple to reproduce:
# for i in $(seq 1 100); do ip ad add 10.0.$i.1/24 dev eth10 ; done # ip addr show
this will _not_ show all IPs.
Looks like the problem is in netlink/ipv4 message processing.
This is fix from bug submitter, it looks correct.
net/ipv4/devinet.c +1 -1
@@ -1193,7 +1193,7 @@ static int inet_dump_ifaddr(struct sk_bufor (ifa = in_dev->ifa_list, ip_idx =0 ; ifa; ifa = ifa->ifa_next, ip_idx++) {if (ip_idx < s_ip_idx) - goto cont; +continue ;if (inet_fill_ifaddr (skb, ifa,NETLINK_CB (cb->skb).pid, cb->nlh->nlmsg_seq,RTM_NEWADDR ,NLM_F_MULTI ) <=0 )
* Stephen Hemminger <[email protected]> 2007-09-06 16:10
Quoted 5 lines
Not all ips are shown by "ip addr show" command when IPs number assigned to an interface is more than 60-80 (in fact it depends on broadcast/label etc presence on each address).
The more attributes are assigned to an address, the sooner the netlink message will be full.
Quoted 10 lines
Steps to reproduce:
It's terribly simple to reproduce:# for i in $(seq 1 100); do ip ad add 10.0.$i.1/24 dev eth10 ; done # ip addr showthis will _not_ show all IPs.
Looks like the problem is in netlink/ipv4 message processing.This is fix from bug submitter, it looks correct.
The fix is correct.
Quoted 9 lines · Stephen Hemminger
Not all ips are shown by "ip addr show" command when IPs number assigned to an interface is more than 60-80 (in fact it depends on broadcast/label etc presence on each address).
Steps to reproduce:
It's terribly simple to reproduce:
Quoted 8 lines
# for i in $(seq 1 100); do ip ad add 10.0.$i.1/24 dev eth10 ; done # ip addr showthis will _not_ show all IPs.
Looks like the problem is in netlink/ipv4 message processing.This is fix from bug submitter, it looks correct.
The same bug was introduced in decnet. Both are 2.6.22 regressions.
net/decnet/dn_dev.c +1 -1
@@ -814,7 +814,7 @@ static int dn_nl_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)for (ifa = dn_db->ifa_list, dn_idx =0 ; ifa; ifa = ifa->ifa_next, dn_idx++) {if (dn_idx < skip_naddr) - goto cont; +continue ; if (dn_nl_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).pid, cb->nlh->nlmsg_seq, RTM_NEWADDR,
From: Patrick McHardy <[email protected]>
Date: Thu, 06 Sep 2007 20:15:40 +0200
Quoted 4 lines
The same bug was introduced in decnet. Both are 2.6.22 regressions.
Signed-off-by Patrick McHardy <[email protected]>
I've applied both patches, thanks.