From patchwork Tue Jul 7 17:56:57 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Gospodarek X-Patchwork-Id: 492454 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 841D11402CC for ; Wed, 8 Jul 2015 03:57:50 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b=PkjXOOwK; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932521AbbGGR5r (ORCPT ); Tue, 7 Jul 2015 13:57:47 -0400 Received: from mail-qg0-f48.google.com ([209.85.192.48]:36309 "EHLO mail-qg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932393AbbGGR5p (ORCPT ); Tue, 7 Jul 2015 13:57:45 -0400 Received: by qgeg89 with SMTP id g89so88063978qge.3 for ; Tue, 07 Jul 2015 10:57:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:cc:subject:date:message-id; bh=nEZKZHMfuXSKUDvCBk19fZNVOvj3Bu8ZqjYNtO6t2nA=; b=PkjXOOwKGf0A7HkAwTKJY33V4YWS9inaj/1OQhFTojLCPzIWUoyvGUNaWdafrChsMm qk9Jz3Eujg2UKkX38DgOZ7nx2ulX9m+duJcEXCvpoXsWllSKnX7y4GfnQrlMRB1InBem HCkVvKlf4cG5lqqHcIpWnyxUfkZAlDi2/yxzQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=nEZKZHMfuXSKUDvCBk19fZNVOvj3Bu8ZqjYNtO6t2nA=; b=hIKdPXGIfwPMuRUArD9NNG5H8kfH7U10FBo2vttFkBVAvCveQFykke50vOrBMBeE/z /d2X6ykanvO/b8IXBBSnMhBZJxRPq3WzfMJ7EHNgQspkkw2b76OV9rdAVn4jwzDkg54Y e6LCjUdeeAWllgJH0ol0HAem1L26jEJl/w4vi8ISJG9adm3gRRKJhRALZO/SukK7xSQn CW5xC/HM7xZr1B33qDk9oijB3NggEYOQkVwwebdRuoU1kjzccM1k8BN0GHzSdfG3Gcd6 2oc1VtKv0pn6wmRqEJoSKKrvYgVmF0+SOWOAsxq1hFBD1/kKKYuT5f+qVaQ2G1swk7IQ LdIQ== X-Gm-Message-State: ALoCoQlyqc2KpjqsjAM/7SxZ2g9dDtg+WTGYsG2DL7bzkVLWOW+Hf9b6PbMX1IlXSt0MaLv33FNC X-Received: by 10.141.28.147 with SMTP id f141mr9398796qhe.12.1436291864508; Tue, 07 Jul 2015 10:57:44 -0700 (PDT) Received: from fedora-devel.rdu.cumulusnetworks.com. (42-10-255-199.rev.celito.net. [199.255.10.42]) by mx.google.com with ESMTPSA id 71sm11484304qhd.4.2015.07.07.10.57.43 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Jul 2015 10:57:43 -0700 (PDT) From: Andy Gospodarek To: netdev@vger.kernel.org Cc: nicolas.dichtel@6wind.com, Andy Gospodarek Subject: [PATCH net-next v2] ipv4: add support for linkdown sysctl to netconf Date: Tue, 7 Jul 2015 13:56:57 -0400 Message-Id: <1436291817-1555-1-git-send-email-gospo@cumulusnetworks.com> X-Mailer: git-send-email 1.9.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This kernel patch exports the value of the new ignore_routes_with_linkdown via netconf. v2: changes to notify userspace via netlink when sysctl values change and proposed for 'net' since this could be considered a bugfix Signed-off-by: Andy Gospodarek Suggested-by: Nicolas Dichtel Acked-by: Nicolas Dichtel --- I realize two of these changes result in lines >80 chars, but this is to keep the coding-style used by the surrounding code. There are multiple ways to resolve this, but one would be to shorten the defines used for this feature as "IGNORE_ROUTES_WITH_LINKDOWN" is a mouthful. I would propose dropping "_WITH_" from all the defines and have only "IGNORE_ROUTES_LINKDOWN" everywhere. Doing this now in 'net' would be ideal before a release happens and it cannot be changed. include/uapi/linux/netconf.h | 1 + net/ipv4/devinet.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/uapi/linux/netconf.h b/include/uapi/linux/netconf.h index 669a1f0..23cbd34 100644 --- a/include/uapi/linux/netconf.h +++ b/include/uapi/linux/netconf.h @@ -15,6 +15,7 @@ enum { NETCONFA_RP_FILTER, NETCONFA_MC_FORWARDING, NETCONFA_PROXY_NEIGH, + NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN, __NETCONFA_MAX }; #define NETCONFA_MAX (__NETCONFA_MAX - 1) diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 7498716..e813196 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -1740,6 +1740,8 @@ static int inet_netconf_msgsize_devconf(int type) size += nla_total_size(4); if (type == -1 || type == NETCONFA_PROXY_NEIGH) size += nla_total_size(4); + if (type == -1 || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) + size += nla_total_size(4); return size; } @@ -1780,6 +1782,10 @@ static int inet_netconf_fill_devconf(struct sk_buff *skb, int ifindex, nla_put_s32(skb, NETCONFA_PROXY_NEIGH, IPV4_DEVCONF(*devconf, PROXY_ARP)) < 0) goto nla_put_failure; + if ((type == -1 || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) && + nla_put_s32(skb, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN, + IPV4_DEVCONF(*devconf, IGNORE_ROUTES_WITH_LINKDOWN)) < 0) + goto nla_put_failure; nlmsg_end(skb, nlh); return 0; @@ -1819,6 +1825,7 @@ static const struct nla_policy devconf_ipv4_policy[NETCONFA_MAX+1] = { [NETCONFA_FORWARDING] = { .len = sizeof(int) }, [NETCONFA_RP_FILTER] = { .len = sizeof(int) }, [NETCONFA_PROXY_NEIGH] = { .len = sizeof(int) }, + [NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN] = { .len = sizeof(int) }, }; static int inet_netconf_get_devconf(struct sk_buff *in_skb, @@ -2048,6 +2055,12 @@ static int devinet_conf_proc(struct ctl_table *ctl, int write, inet_netconf_notify_devconf(net, NETCONFA_PROXY_NEIGH, ifindex, cnf); } + if (i == IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN - 1 && + new_value != old_value) { + ifindex = devinet_conf_ifindex(net, cnf); + inet_netconf_notify_devconf(net, NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN, + ifindex, cnf); + } } return ret;