iproute 2.6.23 incompatibility

Arkadiusz Miskiewicz wrote:
> People are reporting that
>> ip link set multicast on dev eth0 (Invalid argument)
>> no longer works when using iproute 2.6.23 on kernel 2.6.21.
>>
>> On my testing machine it also fails:
>> # ./ip link set eth0 multicast on
>> RTNETLINK answers: Invalid argument

It seems it fails to properly detect that your kernel is missing
RTM_NEWLINK support. Apparently the reason is that the kernels
I tested with return a different error in this situation.


Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
diff --git a/ip/iplink.c b/ip/iplink.c
index 8e0ed2a..f28f91c 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -107,7 +107,8 @@
 {
 	struct nlmsgerr *err = (struct nlmsgerr *)NLMSG_DATA(n);
 
-	if (n->nlmsg_type == NLMSG_ERROR && err->error == -EOPNOTSUPP)
+	if (n->nlmsg_type == NLMSG_ERROR &&
+	    (err->error == -EOPNOTSUPP || err->error == -EINVAL))
 		have_rtnl_newlink = 0;
 	else
 		have_rtnl_newlink = 1;