From patchwork Thu Sep 13 00:41:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ignatius Cheng X-Patchwork-Id: 969229 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netfilter-devel-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="EFUQRPij"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 429fwD44bLz9s4V for ; Thu, 13 Sep 2018 10:41:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727805AbeIMFsP (ORCPT ); Thu, 13 Sep 2018 01:48:15 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:42619 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727795AbeIMFsP (ORCPT ); Thu, 13 Sep 2018 01:48:15 -0400 Received: by mail-qk1-f193.google.com with SMTP id g13-v6so2283408qki.9 for ; Wed, 12 Sep 2018 17:41:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=CCFSW9sJgsLGZqPX24spIUnEOlUPE+tPc2zHY4LCqJM=; b=EFUQRPijYhZgb0J/MNXrwNFH2xeBy0VOLZcdUmnvDYszA6cnJa+Z63t8keV9eHe+M4 iJkbiHt2xC5I9w+WXhemApOLNYtsdtYL4cJ1JuPbyG4FCmr/2Mn97hlLoOD4glTM+jUo J4+qQwGuDx62RCdFEfz696H8hsr4Sb8GuYU8nx2kK3WMv3w6sqAF8We2T4In52cb5q3u M1kM2mRC+L/XIGjZbR0nLPm4hHAIQB8oSF8pxIrR191aDyDANRsXdYRMPJbK0NWsqCHD pTcfnF9JBRhf0X2FRE4EnyLCi/JpL8yx3jHoYirCa8cjQvQzJULn9j0QwNMcdV6bSaix ltZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=CCFSW9sJgsLGZqPX24spIUnEOlUPE+tPc2zHY4LCqJM=; b=hzRUuMwB7ekljTSJfoa718WGf41nuVskI93mw40IPju2OTpKu5qHTNSFi4Jqa2APJV MYbICeuG6xfaz8uQ5HTkCPQhIRN/XkpgotQYcgnQbjcBDYfXibAAmKzgNnSurscB93jl NlZJGTGuiaPLva0/IfX0hRvvNvXPlt1p5VeqFbRcOygA+ba8gOJuiaBJ5OWzsvRK7XKi hp9BgN76LfK67jVcS1V2ZItpXKAwkWjUnW83vzZ3FyDgfoU8qOkwuPq03sPbVppzvN+p VwwXwERmykoPMczkB2tT85InvKJjLVjL4YYGmgWtNrG6d4eE35bp/xMVeh5EAaKG876+ Dtag== X-Gm-Message-State: APzg51CroD0sIjwhS6T8Gn10r0YGqRelqE/9XyVgh0fAPvWDoxLUUrY2 ZoDOs2kO6Ww2UMl5UIhkplQakytCio0= X-Google-Smtp-Source: ANB0Vda0yhU9PfdO5W4vLMTpF10dGKD0WHPRWIBCjZWw+IvJvRBY5VO0WJIEOFhbq6zoCDkeXMtAJg== X-Received: by 2002:ae9:f10c:: with SMTP id k12-v6mr3412579qkg.342.1536799274242; Wed, 12 Sep 2018 17:41:14 -0700 (PDT) Received: from lc-ric-004.ric.broadcom.com ([192.19.228.250]) by smtp.googlemail.com with ESMTPSA id p23-v6sm1712256qtf.6.2018.09.12.17.41.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Sep 2018 17:41:13 -0700 (PDT) From: Ignatius Cheng X-Google-Original-From: Ignatius Cheng To: ignatius.cheng@broadcom.com Cc: pablo@netfilter.org, kadlec@blackhole.kfki.hu, fw@strlen.de, davem@davemloft.net, netfilter-devel@vger.kernel.org, coreteam@netfilter.org Subject: [PATCH] Conntrack l4 protocol helper for GRE has no GRE/IPv6 support Date: Wed, 12 Sep 2018 17:41:03 -0700 Message-Id: <1536799263-32082-1-git-send-email-ignatius.cheng@broadcom.com> X-Mailer: git-send-email 2.7.4 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org Add and register l4 GRE/IPv6 support. Signed-off-by: Ignatius Cheng --- net/netfilter/nf_conntrack_proto_gre.c | 54 +++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/net/netfilter/nf_conntrack_proto_gre.c b/net/netfilter/nf_conntrack_proto_gre.c index d163225..63063ea 100644 --- a/net/netfilter/nf_conntrack_proto_gre.c +++ b/net/netfilter/nf_conntrack_proto_gre.c @@ -380,20 +380,66 @@ static const struct nf_conntrack_l4proto nf_conntrack_l4proto_gre4 = { .init_net = gre_init_net, }; +/* protocol helper struct */ +static const struct nf_conntrack_l4proto nf_conntrack_l4proto_gre6 = { + .l3proto = AF_INET6, + .l4proto = IPPROTO_GRE, + .pkt_to_tuple = gre_pkt_to_tuple, +#ifdef CONFIG_NF_CONNTRACK_PROCFS + .print_conntrack = gre_print_conntrack, +#endif + .packet = gre_packet, + .new = gre_new, + .destroy = gre_destroy, + .me = THIS_MODULE, +#if IS_ENABLED(CONFIG_NF_CT_NETLINK) + .tuple_to_nlattr = nf_ct_port_tuple_to_nlattr, + .nlattr_tuple_size = nf_ct_port_nlattr_tuple_size, + .nlattr_to_tuple = nf_ct_port_nlattr_to_tuple, + .nla_policy = nf_ct_port_nla_policy, +#endif +#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT) + .ctnl_timeout = { + .nlattr_to_obj = gre_timeout_nlattr_to_obj, + .obj_to_nlattr = gre_timeout_obj_to_nlattr, + .nlattr_max = CTA_TIMEOUT_GRE_MAX, + .obj_size = sizeof(unsigned int) * GRE_CT_MAX, + .nla_policy = gre_timeout_nla_policy, + }, +#endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */ + .net_id = &proto_gre_net_id, + .init_net = gre_init_net, +}; + static int proto_gre_net_init(struct net *net) { int ret = 0; ret = nf_ct_l4proto_pernet_register_one(net, &nf_conntrack_l4proto_gre4); - if (ret < 0) + if (ret < 0) { pr_err("nf_conntrack_gre4: pernet registration failed.\n"); + goto out; + } + + ret = nf_ct_l4proto_pernet_register_one(net, + &nf_conntrack_l4proto_gre6); + if (ret < 0) { + pr_err("nf_conntrack_gre6: pernet registration failed.\n"); + goto cleanup_gre4; + } + return 0; + +cleanup_gre4: + nf_ct_l4proto_pernet_unregister_one(net, &nf_conntrack_l4proto_gre4); +out: return ret; } static void proto_gre_net_exit(struct net *net) { nf_ct_l4proto_pernet_unregister_one(net, &nf_conntrack_l4proto_gre4); + nf_ct_l4proto_pernet_unregister_one(net, &nf_conntrack_l4proto_gre6); nf_ct_gre_keymap_flush(net); } @@ -414,8 +460,13 @@ static int __init nf_ct_proto_gre_init(void) ret = nf_ct_l4proto_register_one(&nf_conntrack_l4proto_gre4); if (ret < 0) goto out_gre4; + ret = nf_ct_l4proto_register_one(&nf_conntrack_l4proto_gre6); + if (ret < 0) + goto out_gre6; return 0; +out_gre6: + nf_ct_l4proto_unregister_one(&nf_conntrack_l4proto_gre4); out_gre4: unregister_pernet_subsys(&proto_gre_net_ops); out_pernet: @@ -425,6 +476,7 @@ static int __init nf_ct_proto_gre_init(void) static void __exit nf_ct_proto_gre_fini(void) { nf_ct_l4proto_unregister_one(&nf_conntrack_l4proto_gre4); + nf_ct_l4proto_unregister_one(&nf_conntrack_l4proto_gre6); unregister_pernet_subsys(&proto_gre_net_ops); }