]> err.no Git - linux-2.6/blobdiff - net/core/rtnetlink.c
[NET]: ethtool ops are the only way
[linux-2.6] / net / core / rtnetlink.c
index 7b6b16396745d729489c6046295337cb05480f4b..06eccca8cb5d305e0a6d2750e724cc65f0666235 100644 (file)
@@ -98,7 +98,7 @@ int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len)
 }
 
 int __rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr,
-                                struct rtattr *rta, int len)
+                                struct rtattr *rta, int len)
 {
        if (RTA_PAYLOAD(rta) < len)
                return -1;
@@ -1032,8 +1032,7 @@ replay:
 
                if (ifm->ifi_index || ifm->ifi_flags || ifm->ifi_change)
                        return -EOPNOTSUPP;
-               if (tb[IFLA_ADDRESS] || tb[IFLA_BROADCAST] || tb[IFLA_MAP] ||
-                   tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
+               if (tb[IFLA_MAP] || tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
                        return -EOPNOTSUPP;
 
                if (!ops) {
@@ -1065,6 +1064,12 @@ replay:
 
                if (tb[IFLA_MTU])
                        dev->mtu = nla_get_u32(tb[IFLA_MTU]);
+               if (tb[IFLA_ADDRESS])
+                       memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
+                              nla_len(tb[IFLA_ADDRESS]));
+               if (tb[IFLA_BROADCAST])
+                       memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
+                              nla_len(tb[IFLA_BROADCAST]));
                if (tb[IFLA_TXQLEN])
                        dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
                if (tb[IFLA_WEIGHT])