Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1296/?format=api
{ "id": 1296, "url": "http://patchwork.ozlabs.org/api/patches/1296/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1222272700-28232-1-git-send-email-remi.denis-courmont@nokia.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1222272700-28232-1-git-send-email-remi.denis-courmont@nokia.com>", "list_archive_url": null, "date": "2008-09-24T16:11:38", "name": "[1/3] Phonet: Netlink factorization and cleanup", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "f7abfff2f3d184cbaaadea300db1ffae5e29ff7e", "submitter": { "id": 204, "url": "http://patchwork.ozlabs.org/api/people/204/?format=api", "name": "Rémi Denis-Courmont", "email": "remi.denis-courmont@nokia.com" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1222272700-28232-1-git-send-email-remi.denis-courmont@nokia.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/1296/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1296/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "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])\n\tby ozlabs.org (Postfix) with ESMTP id D8F09DDFC8\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 25 Sep 2008 02:12:04 +1000 (EST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752000AbYIXQL7 (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tWed, 24 Sep 2008 12:11:59 -0400", "(majordomo@vger.kernel.org) by vger.kernel.org id S1751954AbYIXQL7\n\t(ORCPT <rfc822; netdev-outgoing>); Wed, 24 Sep 2008 12:11:59 -0400", "from smtp.nokia.com ([192.100.122.233]:17736 \"EHLO\n\tmgw-mx06.nokia.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751899AbYIXQL6 (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Wed, 24 Sep 2008 12:11:58 -0400", "from esebh107.NOE.Nokia.com (esebh107.ntc.nokia.com\n\t[172.21.143.143])\n\tby mgw-mx06.nokia.com (Switch-3.2.6/Switch-3.2.6) with ESMTP id\n\tm8OGBtEa025585\n\tfor <netdev@vger.kernel.org>; Wed, 24 Sep 2008 19:11:56 +0300", "from vaebh102.NOE.Nokia.com ([10.160.244.23]) by\n\tesebh107.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 19:11:50 +0300", "from vaebh101.NOE.Nokia.com ([10.160.244.22]) by\n\tvaebh102.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 19:11:50 +0300", "from localhost.localdomain ([172.21.41.62]) by\n\tvaebh101.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); \n\tWed, 24 Sep 2008 19:11:48 +0300" ], "From": "Remi Denis-Courmont <remi.denis-courmont@nokia.com>", "To": "netdev@vger.kernel.org", "Cc": "=?utf-8?q?R=C3=A9mi=20Denis-Courmont?= <remi.denis-courmont@nokia.com>", "Subject": "[PATCH 1/3] Phonet: Netlink factorization and cleanup", "Date": "Wed, 24 Sep 2008 19:11:38 +0300", "Message-Id": "<1222272700-28232-1-git-send-email-remi.denis-courmont@nokia.com>", "X-Mailer": "git-send-email 1.5.4.3", "In-Reply-To": "<>", "References": "<>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=utf-8", "Content-Transfer-Encoding": "8bit", "X-OriginalArrivalTime": "24 Sep 2008 16:11:50.0208 (UTC)\n\tFILETIME=[4059A400:01C91E60]", "X-Nokia-AV": "Clean", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>\n\nSigned-off-by: Rémi Denis-Courmont <remi.denis-courmont@nokia.com>\n---\n net/phonet/pn_netlink.c | 91 ++++++++++++++++++-----------------------------\n 1 files changed, 35 insertions(+), 56 deletions(-)", "diff": "diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c\nindex b1ea19a..b1770d6 100644\n--- a/net/phonet/pn_netlink.c\n+++ b/net/phonet/pn_netlink.c\n@@ -54,11 +54,16 @@ errout:\n \t\trtnl_set_sk_err(dev_net(dev), RTNLGRP_PHONET_IFADDR, err);\n }\n \n-static int newaddr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n+static const struct nla_policy ifa_phonet_policy[IFA_MAX+1] = {\n+\t[IFA_LOCAL] = { .type = NLA_U8 },\n+};\n+\n+static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh, void *attr)\n {\n-\tstruct rtattr **rta = attr;\n-\tstruct ifaddrmsg *ifm = NLMSG_DATA(nlm);\n+\tstruct net *net = sock_net(skb->sk);\n+\tstruct nlattr *tb[IFA_MAX+1];\n \tstruct net_device *dev;\n+\tstruct ifaddrmsg *ifm;\n \tint err;\n \tu8 pnaddr;\n \n@@ -67,52 +72,28 @@ static int newaddr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n \n \tASSERT_RTNL();\n \n-\tif (rta[IFA_LOCAL - 1] == NULL)\n-\t\treturn -EINVAL;\n-\n-\tdev = __dev_get_by_index(&init_net, ifm->ifa_index);\n-\tif (dev == NULL)\n-\t\treturn -ENODEV;\n+\terr = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy);\n+\tif (err < 0)\n+\t\treturn err;\n \n-\tif (ifm->ifa_prefixlen > 0)\n+\tifm = nlmsg_data(nlh);\n+\tif (tb[IFA_LOCAL] == NULL)\n \t\treturn -EINVAL;\n-\n-\tmemcpy(&pnaddr, RTA_DATA(rta[IFA_LOCAL - 1]), 1);\n-\n-\terr = phonet_address_add(dev, pnaddr);\n-\tif (!err)\n-\t\trtmsg_notify(RTM_NEWADDR, dev, pnaddr);\n-\treturn err;\n-}\n-\n-static int deladdr_doit(struct sk_buff *skb, struct nlmsghdr *nlm, void *attr)\n-{\n-\tstruct rtattr **rta = attr;\n-\tstruct ifaddrmsg *ifm = NLMSG_DATA(nlm);\n-\tstruct net_device *dev;\n-\tint err;\n-\tu8 pnaddr;\n-\n-\tif (!capable(CAP_SYS_ADMIN))\n-\t\treturn -EPERM;\n-\n-\tASSERT_RTNL();\n-\n-\tif (rta[IFA_LOCAL - 1] == NULL)\n+\tpnaddr = nla_get_u8(tb[IFA_LOCAL]);\n+\tif (pnaddr & 3)\n+\t\t/* Phonet addresses only have 6 high-order bits */\n \t\treturn -EINVAL;\n \n-\tdev = __dev_get_by_index(&init_net, ifm->ifa_index);\n+\tdev = __dev_get_by_index(net, ifm->ifa_index);\n \tif (dev == NULL)\n \t\treturn -ENODEV;\n \n-\tif (ifm->ifa_prefixlen > 0)\n-\t\treturn -EADDRNOTAVAIL;\n-\n-\tmemcpy(&pnaddr, RTA_DATA(rta[IFA_LOCAL - 1]), 1);\n-\n-\terr = phonet_address_del(dev, pnaddr);\n+\tif (nlh->nlmsg_type == RTM_NEWADDR)\n+\t\terr = phonet_address_add(dev, pnaddr);\n+\telse\n+\t\terr = phonet_address_del(dev, pnaddr);\n \tif (!err)\n-\t\trtmsg_notify(RTM_DELADDR, dev, pnaddr);\n+\t\trtmsg_notify(nlh->nlmsg_type, dev, pnaddr);\n \treturn err;\n }\n \n@@ -121,25 +102,23 @@ static int fill_addr(struct sk_buff *skb, struct net_device *dev, u8 addr,\n {\n \tstruct ifaddrmsg *ifm;\n \tstruct nlmsghdr *nlh;\n-\tunsigned int orig_len = skb->len;\n \n-\tnlh = NLMSG_PUT(skb, pid, seq, event, sizeof(struct ifaddrmsg));\n-\tifm = NLMSG_DATA(nlh);\n+\tnlh = nlmsg_put(skb, pid, seq, event, sizeof(*ifm), 0);\n+\tif (nlh == NULL)\n+\t\treturn -EMSGSIZE;\n+\n+\tifm = nlmsg_data(nlh);\n \tifm->ifa_family = AF_PHONET;\n \tifm->ifa_prefixlen = 0;\n \tifm->ifa_flags = IFA_F_PERMANENT;\n-\tifm->ifa_scope = RT_SCOPE_HOST;\n+\tifm->ifa_scope = RT_SCOPE_LINK;\n \tifm->ifa_index = dev->ifindex;\n-\tRTA_PUT(skb, IFA_LOCAL, 1, &addr);\n-\tnlh->nlmsg_len = skb->len - orig_len;\n-\n-\treturn 0;\n-\n-nlmsg_failure:\n-rtattr_failure:\n-\tskb_trim(skb, orig_len);\n+\tNLA_PUT_U8(skb, IFA_LOCAL, addr);\n+\treturn nlmsg_end(skb, nlh);\n \n-\treturn -1;\n+nla_put_failure:\n+\tnlmsg_cancel(skb, nlh);\n+\treturn -EMSGSIZE;\n }\n \n static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)\n@@ -180,7 +159,7 @@ out:\n \n void __init phonet_netlink_register(void)\n {\n-\trtnl_register(PF_PHONET, RTM_NEWADDR, newaddr_doit, NULL);\n-\trtnl_register(PF_PHONET, RTM_DELADDR, deladdr_doit, NULL);\n+\trtnl_register(PF_PHONET, RTM_NEWADDR, addr_doit, NULL);\n+\trtnl_register(PF_PHONET, RTM_DELADDR, addr_doit, NULL);\n \trtnl_register(PF_PHONET, RTM_GETADDR, NULL, getaddr_dumpit);\n }\n", "prefixes": [ "1/3" ] }