From patchwork Fri Nov 6 12:39:39 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 37853 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.176.167]) by ozlabs.org (Postfix) with ESMTP id EDF62B6F2B for ; Fri, 6 Nov 2009 23:42:24 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759190AbZKFMlG (ORCPT ); Fri, 6 Nov 2009 07:41:06 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1759104AbZKFMlG (ORCPT ); Fri, 6 Nov 2009 07:41:06 -0500 Received: from mail-ew0-f207.google.com ([209.85.219.207]:50133 "EHLO mail-ew0-f207.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752485AbZKFMlE (ORCPT ); Fri, 6 Nov 2009 07:41:04 -0500 Received: by ewy3 with SMTP id 3so975933ewy.37 for ; Fri, 06 Nov 2009 04:41:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references; bh=WBzSETPENAhngFXnU3WKwAi9cYmhxryHjyM56N0SsIs=; b=xMlb4nOEwkkYUu/VRRMQDM9afasRHP2j54RasjOdqKUlLEnwtofQTl8Qqvntc6THO/ Ywt6LOh+3b1V6wcTKHoXvsjhkWRjQ7Yr8sWlqhzpkPbsbdFZYqDHe2ldYYJY6lFS2Qhf 2O0Foo0nVXZOAEvymEcDvr/cIQp7fziA2jnU8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=fOA3+8gTWoCFbKPtCWqKzSVW1fBi3FhS9rKX3oqH2UieDIoPMk7p+SjLMQzJ5zQFVa XmnkckoyUA7aywH5mx1O3nGIFxep7BSAahamjMwSgefIsewrLzC9tmppxs2hLh67/p+P PwX+87HWHMS0nCfXNNNDzXpFYPl1igCWd/6Dg= Received: by 10.213.2.84 with SMTP id 20mr731415ebi.90.1257511268343; Fri, 06 Nov 2009 04:41:08 -0800 (PST) Received: from localhost.localdomain ([91.213.169.4]) by mx.google.com with ESMTPS id 28sm345811eyg.30.2009.11.06.04.41.06 (version=SSLv3 cipher=RC4-MD5); Fri, 06 Nov 2009 04:41:07 -0800 (PST) From: Dmitry Eremin-Solenikov To: "David S. Miller" Cc: netdev@vger.kernel.org, Sergey Lapin Subject: [PATCH 15/17] ieee802154: add two nl802154 helpers Date: Fri, 6 Nov 2009 15:39:39 +0300 Message-Id: <1257511181-19403-16-git-send-email-dbaryshkov@gmail.com> X-Mailer: git-send-email 1.6.5 In-Reply-To: <1257511181-19403-1-git-send-email-dbaryshkov@gmail.com> References: <1257511181-19403-1-git-send-email-dbaryshkov@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add two nl802154 helpers: one for starting a reply message, one for sending. Signed-off-by: Dmitry Eremin-Solenikov --- net/ieee802154/ieee802154.h | 5 +++++ net/ieee802154/netlink.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 0 deletions(-) diff --git a/net/ieee802154/ieee802154.h b/net/ieee802154/ieee802154.h index 0790eb0..aadec42 100644 --- a/net/ieee802154/ieee802154.h +++ b/net/ieee802154/ieee802154.h @@ -38,8 +38,13 @@ void __exit ieee802154_nl_exit(void); .dumpit = _dump, \ } +struct genl_info; + struct sk_buff *ieee802154_nl_create(int flags, u8 req); int ieee802154_nl_mcast(struct sk_buff *msg, unsigned int group); +struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info, + int flags, u8 req); +int ieee802154_nl_reply(struct sk_buff *msg, struct genl_info *info); extern struct genl_family nl802154_family; int nl802154_mac_register(void); diff --git a/net/ieee802154/netlink.c b/net/ieee802154/netlink.c index 8a22173..33137b9 100644 --- a/net/ieee802154/netlink.c +++ b/net/ieee802154/netlink.c @@ -75,6 +75,39 @@ out: return -ENOBUFS; } +struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info, + int flags, u8 req) +{ + void *hdr; + struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC); + + if (!msg) + return NULL; + + hdr = genlmsg_put_reply(msg, info, + &nl802154_family, flags, req); + if (!hdr) { + nlmsg_free(msg); + return NULL; + } + + return msg; +} + +int ieee802154_nl_reply(struct sk_buff *msg, struct genl_info *info) +{ + /* XXX: nlh is right at the start of msg */ + void *hdr = genlmsg_data(NLMSG_DATA(msg->data)); + + if (genlmsg_end(msg, hdr) < 0) + goto out; + + return genlmsg_reply(msg, info); +out: + nlmsg_free(msg); + return -ENOBUFS; +} + int __init ieee802154_nl_init(void) { int rc;