From patchwork Fri Aug 25 22:51:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yi-Hung Wei X-Patchwork-Id: 806054 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LcKCiRGq"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xfGfF1NKWz9t43 for ; Sat, 26 Aug 2017 08:53:09 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id B1DC0B49; Fri, 25 Aug 2017 22:51:39 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 18735AAC for ; Fri, 25 Aug 2017 22:51:34 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id C1A421BB for ; Fri, 25 Aug 2017 22:51:33 +0000 (UTC) Received: by mail-pg0-f65.google.com with SMTP id r133so1540869pgr.2 for ; Fri, 25 Aug 2017 15:51:33 -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:in-reply-to:references; bh=IDdLKV7G/KAo0MjNdhIsnbRVcniF/LxbXbziMmhohC8=; b=LcKCiRGqvGpswcAOXcWnfE28TxqyGSV2mq4slUqPEV9fYnHrERdfDlp9LZp8gfk85T FIEo0hIRkMSor1B75JjsN67t/asBRlXnUxg/JAGzK5w13c+Eba5FTnqrnDuWzy7aiJUy qHy6We2x+tl5BxiYoPgE6fWvv6HBl0PqpZRwFHlZhCoR2T3F9Zn8FNh0o8LrBZHkodsh MHGdr6C7yaprcAnjM7WndlyXhe4LBF96MDayi0J1DNQCdph+XBQHlszFYoR69RWlHqTA F0y5eIPgPiXWrtc8/TTF9HqwxLXJGFtRxEMEHEIAQoYg+tplA2EB3WJutlUnExZTIik0 cPSw== 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:in-reply-to :references; bh=IDdLKV7G/KAo0MjNdhIsnbRVcniF/LxbXbziMmhohC8=; b=Yt0ZUuD6pvBphtPlOs5Aekc9lDcU4lzeJjxWi4Xxe3ZuWUG5u6uP1AFEUaZKToGo5v 1YZUdCGUXGSwaqdmcTAYMhcmplRO9vNbaPMndfNnhyH/YdaC2OfWetAag8u+VzBqyKUU uGv0fDAMrSmxpm2nnsCgdzkTe0Fp8YRKH8YeCUGtDoIv8iYow0TmCv521R1ygal5tgm9 xa2psz3KA7Gv31xVN32t5q9XnKZDC5YYthOKGBng+ih8vYIbnnErVG8doUdCnE7Pahdp g0d9EP2QUSqy/d4osxJOWeLTlcZxQv4LBYXDGH6QGfjy8ZV2wPVvqLZhB6TeVbDvXeue nOsQ== X-Gm-Message-State: AHYfb5gPt0WiVQWdOAxLixYcMwYv4IvkhYoo8yw6THrfK5jooxljcpwV f0RyznFtfrgNahsbOBA= X-Received: by 10.84.248.13 with SMTP id p13mr20348pll.113.1503701492969; Fri, 25 Aug 2017 15:51:32 -0700 (PDT) Received: from vm-01.vmware.com ([208.91.2.1]) by smtp.gmail.com with ESMTPSA id b68sm12678154pfd.33.2017.08.25.15.51.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 25 Aug 2017 15:51:32 -0700 (PDT) From: Yi-Hung Wei To: dev@openvswitch.org Date: Fri, 25 Aug 2017 15:51:13 -0700 Message-Id: <1503701479-43894-4-git-send-email-yihung.wei@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503701479-43894-1-git-send-email-yihung.wei@gmail.com> References: <1503701479-43894-1-git-send-email-yihung.wei@gmail.com> X-Spam-Status: No, score=0.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH 3/9] ct-dpif: Add ct_dpif_get_info() X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This patch adds ct_dpif_get_info() to dpif_class for querying conntrack info from datapath. Later patches will use this function to query ct_fields such as ct_state, ct_mark, and ct_label for ofproto/trace command. The following commits will provide implementation of ct_dpif_get_info() on dpif-netlink and dpif-netdev. Signed-off-by: Yi-Hung Wei Reviewed-by: Greg Rose --- lib/ct-dpif.c | 19 +++++++++++++++++++ lib/ct-dpif.h | 7 +++++++ lib/dpif-netdev.c | 1 + lib/dpif-netlink.c | 1 + lib/dpif-provider.h | 8 ++++++++ 5 files changed, 36 insertions(+) diff --git a/lib/ct-dpif.c b/lib/ct-dpif.c index c79e69e23970..3e6f4cbe9be2 100644 --- a/lib/ct-dpif.c +++ b/lib/ct-dpif.c @@ -127,6 +127,25 @@ ct_dpif_flush(struct dpif *dpif, const uint16_t *zone) : EOPNOTSUPP); } +int +ct_dpif_get_info(struct dpif *dpif, struct ct_dpif_tuple *tuple, + const uint16_t zone, struct ct_dpif_info *info) +{ + return (dpif->dpif_class->ct_get_info + ? dpif->dpif_class->ct_get_info(dpif, tuple, zone, info) + : EOPNOTSUPP); +} + +void +ct_dpif_format_info(const struct ct_dpif_info *info, struct ds *output) +{ + struct ds s = DS_EMPTY_INITIALIZER; + + format_flags(&s, ct_state_to_string, info->ct_state, '|'); + ds_put_format(output, "ct_state=%s", ds_cstr(&s)); + ds_destroy(&s); +} + void ct_dpif_entry_uninit(struct ct_dpif_entry *entry) { diff --git a/lib/ct-dpif.h b/lib/ct-dpif.h index d5f966175bc0..0c82fb022f2b 100644 --- a/lib/ct-dpif.h +++ b/lib/ct-dpif.h @@ -172,6 +172,10 @@ struct ct_dpif_entry { uint32_t bkt; /* CT bucket number. */ }; +struct ct_dpif_info { + uint32_t ct_state; +}; + enum { CT_STATS_UDP, CT_STATS_TCP, @@ -196,6 +200,9 @@ int ct_dpif_dump_start(struct dpif *, struct ct_dpif_dump_state **, int ct_dpif_dump_next(struct ct_dpif_dump_state *, struct ct_dpif_entry *); int ct_dpif_dump_done(struct ct_dpif_dump_state *); int ct_dpif_flush(struct dpif *, const uint16_t *zone); +int ct_dpif_get_info(struct dpif *, struct ct_dpif_tuple *, + const uint16_t zone, struct ct_dpif_info *); +void ct_dpif_format_info(const struct ct_dpif_info *, struct ds *); void ct_dpif_entry_uninit(struct ct_dpif_entry *); void ct_dpif_format_entry(const struct ct_dpif_entry *, struct ds *, bool verbose, bool print_stats); diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index e2cd9310d51f..e9586bc46627 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -5535,6 +5535,7 @@ const struct dpif_class dpif_netdev_class = { dpif_netdev_ct_dump_next, dpif_netdev_ct_dump_done, dpif_netdev_ct_flush, + NULL, /* ct_get_info */ dpif_netdev_meter_get_features, dpif_netdev_meter_set, dpif_netdev_meter_get, diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c index 29001fbe4a54..122c59614f5a 100644 --- a/lib/dpif-netlink.c +++ b/lib/dpif-netlink.c @@ -2986,6 +2986,7 @@ const struct dpif_class dpif_netlink_class = { dpif_netlink_ct_dump_next, dpif_netlink_ct_dump_done, dpif_netlink_ct_flush, + NULL, /* ct_get_info */ dpif_netlink_meter_get_features, dpif_netlink_meter_set, dpif_netlink_meter_get, diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h index 1d82a0939aa1..829738739c6b 100644 --- a/lib/dpif-provider.h +++ b/lib/dpif-provider.h @@ -75,6 +75,8 @@ dpif_flow_dump_thread_init(struct dpif_flow_dump_thread *thread, struct ct_dpif_dump_state; struct ct_dpif_entry; +struct ct_dpif_tuple; +struct ct_dpif_info; /* Datapath interface class structure, to be defined by each implementation of * a datapath interface. @@ -428,6 +430,12 @@ struct dpif_class { * only deletes connections in '*zone'. */ int (*ct_flush)(struct dpif *, const uint16_t *zone); + /* Queries 'dpif' for the connection tracking info of a connection + * specified by 'tuple' in 'zone'. On success, returns 0 and sets + * 'info', otherwise returns nonzero value. */ + int (*ct_get_info)(struct dpif *, struct ct_dpif_tuple *tuple, + const uint16_t zone, struct ct_dpif_info *info); + /* Meters */ /* Queries 'dpif' for supported meter features.