From patchwork Thu Jun 30 12:37:45 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 102754 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 365F2B6F57 for ; Thu, 30 Jun 2011 22:38:58 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752796Ab1F3Mid (ORCPT ); Thu, 30 Jun 2011 08:38:33 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:37174 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751363Ab1F3MiI (ORCPT ); Thu, 30 Jun 2011 08:38:08 -0400 Received: by mail-wy0-f174.google.com with SMTP id 8so1510445wyg.19 for ; Thu, 30 Jun 2011 05:38:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=8rspN7j+p2l1Zp9kB+JNpnxK6/LF5Y7IVAlCfcuyOUw=; b=rWwFNG2JY927J/C/9NRkxzBi/E7eZjLVcS7P2tM+rNL0YSCqkF63RFXpKdfWq4vtYQ B8FNwT8oJyDPpkZRhAQwAWIoghcYgfraJGBIwkSe7QMU6Zir2G4Ql2cA1w/RHpNHnQyu IbVp1SVZeFxQL2YGpfbEBSt+WZGTTGvy/KUeo= Received: by 10.216.135.71 with SMTP id t49mr603916wei.43.1309437487885; Thu, 30 Jun 2011 05:38:07 -0700 (PDT) Received: from doriath.ww600.siemens.net ([91.213.169.4]) by mx.google.com with ESMTPS id b70sm1113562wek.44.2011.06.30.05.38.05 (version=SSLv3 cipher=OTHER); Thu, 30 Jun 2011 05:38:07 -0700 (PDT) From: Dmitry Eremin-Solenikov To: "David S. Miller" Cc: netdev@vger.kernel.org Subject: [PATCH 2/5] ieee802154: support specifying hw address for created devices Date: Thu, 30 Jun 2011 16:37:45 +0400 Message-Id: <1309437468-31021-3-git-send-email-dbaryshkov@gmail.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1309437468-31021-1-git-send-email-dbaryshkov@gmail.com> References: <1309437468-31021-1-git-send-email-dbaryshkov@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Dmitry Eremin-Solenikov --- net/ieee802154/nl-phy.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c index 02548b2..c64a38d 100644 --- a/net/ieee802154/nl-phy.c +++ b/net/ieee802154/nl-phy.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -213,12 +214,37 @@ static int ieee802154_add_iface(struct sk_buff *skb, goto nla_put_failure; } + if (info->attrs[IEEE802154_ATTR_HW_ADDR] && + nla_len(info->attrs[IEEE802154_ATTR_HW_ADDR]) != + IEEE802154_ADDR_LEN) { + rc = -EINVAL; + goto nla_put_failure; + } + dev = phy->add_iface(phy, devname); if (IS_ERR(dev)) { rc = PTR_ERR(dev); goto nla_put_failure; } + if (info->attrs[IEEE802154_ATTR_HW_ADDR]) { + struct sockaddr addr; + + addr.sa_family = ARPHRD_IEEE802154; + nla_memcpy(&addr.sa_data, info->attrs[IEEE802154_ATTR_HW_ADDR], + IEEE802154_ADDR_LEN); + + /* + * strangely enough, some callbacks (inetdev_event) from + * dev_set_mac_address require RTNL_LOCK + */ + rtnl_lock(); + rc = dev_set_mac_address(dev, &addr); + rtnl_unlock(); + if (rc) + goto dev_unregister; + } + NLA_PUT_STRING(msg, IEEE802154_ATTR_PHY_NAME, wpan_phy_name(phy)); NLA_PUT_STRING(msg, IEEE802154_ATTR_DEV_NAME, dev->name); @@ -228,6 +254,11 @@ static int ieee802154_add_iface(struct sk_buff *skb, return ieee802154_nl_reply(msg, info); +dev_unregister: + rtnl_lock(); /* del_iface must be called with RTNL lock */ + phy->del_iface(phy, dev); + dev_put(dev); + rtnl_unlock(); nla_put_failure: nlmsg_free(msg); out_dev: