From patchwork Tue Nov 24 22:16:03 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Zhou X-Patchwork-Id: 548317 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id 4CBCF1402A8 for ; Wed, 25 Nov 2015 09:16:59 +1100 (AEDT) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 9FEBF10A38; Tue, 24 Nov 2015 14:16:33 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id BB39A10A22 for ; Tue, 24 Nov 2015 14:16:30 -0800 (PST) Received: from bar3.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id 5231B1613BD for ; Tue, 24 Nov 2015 15:16:30 -0700 (MST) X-ASG-Debug-ID: 1448403389-03dd7b4646350da0001-byXFYA Received: from mx3-pf1.cudamail.com ([192.168.14.2]) by bar3.cudamail.com with ESMTP id 0JvKqRD5gAWDIQP2 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 24 Nov 2015 15:16:29 -0700 (MST) X-Barracuda-Envelope-From: azhou.ovn@gmail.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.2 Received: from unknown (HELO mail-pa0-f50.google.com) (209.85.220.50) by mx3-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 24 Nov 2015 22:16:29 -0000 Received-SPF: pass (mx3-pf1.cudamail.com: SPF record at _netblocks.google.com designates 209.85.220.50 as permitted sender) X-Barracuda-Apparent-Source-IP: 209.85.220.50 X-Barracuda-RBL-IP: 209.85.220.50 Received: by pacej9 with SMTP id ej9so34923057pac.2 for ; Tue, 24 Nov 2015 14:16:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AEo+PGuuhk/tVy4hJf05f8Osp9Y8MWxT9wSbNIu2m/M=; b=BbzzvZWK+jxYuXx8zdx4nNQ/n+FsklhJPjn2yIdzSGrXDPcMu+tiP2RdhVTi+hW3LS rzXDaAjRdKGGhaknMA9E1Bkbfh+PpkIuJ1ZphCsyKzFyZxTNUC2PLosK2Rh71JZ1tfuZ q8nxC3ehwYNvgMWVZRv2RgdnxRl6UV1e4rdGF1Gl7k1E4sSNss6CsPvN3vnVuQgMSz9A wvqSy9fNuVgYQj5XiPIKlGEYxF1PXZiI3BeVLbO1c/O2oDW9SWp/qj+wzxGw69g2Nms0 e6Ln3A2QzuzBv0jQMB69QXXUDIyOyJ0e3ldkMFIqUHv4vaSDodk9ybCZDw2KXW+MCUVU ENCg== X-Received: by 10.98.1.213 with SMTP id 204mr26487654pfb.128.1448403388168; Tue, 24 Nov 2015 14:16:28 -0800 (PST) Received: from ubuntu.localdomain ([208.91.1.34]) by smtp.gmail.com with ESMTPSA id b15sm16374570pfj.7.2015.11.24.14.16.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 Nov 2015 14:16:27 -0800 (PST) X-CudaMail-Envelope-Sender: azhou.ovn@gmail.com From: Andy Zhou To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V1-1123060754 X-CudaMail-DTE: 112415 X-CudaMail-Originating-IP: 209.85.220.50 Date: Tue, 24 Nov 2015 14:16:03 -0800 X-ASG-Orig-Subj: [##CM-V1-1123060754##][monitor2 v2 6/9] ovsdb: enable jasonrpc-server to service monitor2 request Message-Id: <1448403366-21460-6-git-send-email-azhou@ovn.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1448403366-21460-1-git-send-email-azhou@ovn.org> References: <1448403366-21460-1-git-send-email-azhou@ovn.org> X-Barracuda-Connect: UNKNOWN[192.168.14.2] X-Barracuda-Start-Time: 1448403389 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [monitor2 v2 6/9] ovsdb: enable jasonrpc-server to service monitor2 request X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" From: Andy Zhou ovsdb-server now accepts the new "monitor2" request. The next patch will switch IDL to use monitor2 by default. Signed-off-by: Andy Zhou Acked-by: Ben Pfaff --- v1->v2: update NEWS --- NEWS | 2 ++ ovsdb/jsonrpc-server.c | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index cf99844..8b28ad9 100644 --- a/NEWS +++ b/NEWS @@ -28,6 +28,8 @@ Post-v2.4.0 - Add support for connection tracking through the new "ct" action and "ct_state"/"ct_zone"/"ct_mark"/"ct_label" match fields. Only available on Linux kernels with the connection tracking module loaded. + - ovsdb-server: + * New "monitor2" and "update2" extensions to RFC 7047. v2.4.0 - 20 Aug 2015 diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c index 729b368..53c97cd 100644 --- a/ovsdb/jsonrpc-server.c +++ b/ovsdb/jsonrpc-server.c @@ -38,7 +38,6 @@ #include "timeval.h" #include "transaction.h" #include "trigger.h" -#include "monitor.h" #include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(ovsdb_jsonrpc_server); @@ -82,7 +81,7 @@ static void ovsdb_jsonrpc_trigger_complete_done( /* Monitors. */ static struct jsonrpc_msg *ovsdb_jsonrpc_monitor_create( struct ovsdb_jsonrpc_session *, struct ovsdb *, struct json *params, - const struct json *request_id); + enum ovsdb_monitor_version, const struct json *request_id); static struct jsonrpc_msg *ovsdb_jsonrpc_monitor_cancel( struct ovsdb_jsonrpc_session *, struct json_array *params, @@ -845,11 +844,15 @@ ovsdb_jsonrpc_session_got_request(struct ovsdb_jsonrpc_session *s, if (!reply) { reply = execute_transaction(s, db, request); } - } else if (!strcmp(request->method, "monitor")) { + } else if (!strcmp(request->method, "monitor") || + !strcmp(request->method, "monitor2")) { struct ovsdb *db = ovsdb_jsonrpc_lookup_db(s, request, &reply); if (!reply) { + int l = strlen(request->method) - strlen("monitor"); + enum ovsdb_monitor_version version = l ? OVSDB_MONITOR_V2 + : OVSDB_MONITOR_V1; reply = ovsdb_jsonrpc_monitor_create(s, db, request->params, - request->id); + version, request->id); } } else if (!strcmp(request->method, "monitor_cancel")) { reply = ovsdb_jsonrpc_monitor_cancel(s, json_array(request->params), @@ -1040,6 +1043,7 @@ struct ovsdb_jsonrpc_monitor { struct ovsdb_monitor *dbmon; uint64_t unflushed; /* The first transaction that has not been flushed to the jsonrpc remote client. */ + enum ovsdb_monitor_version version; }; static struct ovsdb_jsonrpc_monitor * @@ -1155,6 +1159,7 @@ ovsdb_jsonrpc_parse_monitor_request(struct ovsdb_monitor *dbmon, static struct jsonrpc_msg * ovsdb_jsonrpc_monitor_create(struct ovsdb_jsonrpc_session *s, struct ovsdb *db, struct json *params, + enum ovsdb_monitor_version version, const struct json *request_id) { struct ovsdb_jsonrpc_monitor *m = NULL; @@ -1186,6 +1191,7 @@ ovsdb_jsonrpc_monitor_create(struct ovsdb_jsonrpc_session *s, struct ovsdb *db, m->db = db; m->dbmon = ovsdb_monitor_create(db, m); m->unflushed = 0; + m->version = version; hmap_insert(&s->monitors, &m->node, json_hash(monitor_id, 0)); m->monitor_id = json_clone(monitor_id); @@ -1296,7 +1302,7 @@ ovsdb_jsonrpc_monitor_compose_update(struct ovsdb_jsonrpc_monitor *m, bool initial) { return ovsdb_monitor_get_update(m->dbmon, initial, &m->unflushed, - OVSDB_MONITOR_V1); + m->version); } static bool @@ -1322,6 +1328,27 @@ ovsdb_jsonrpc_monitor_destroy(struct ovsdb_jsonrpc_monitor *m) free(m); } +static struct jsonrpc_msg * +ovsdb_jsonrpc_create_notify(const struct ovsdb_jsonrpc_monitor *m, + struct json *params) +{ + const char *method; + + switch(m->version) { + case OVSDB_MONITOR_V1: + method = "update"; + break; + case OVSDB_MONITOR_V2: + method = "update2"; + break; + case OVSDB_MONITOR_VERSION_MAX: + default: + OVS_NOT_REACHED(); + } + + return jsonrpc_create_notify(method, params); +} + static void ovsdb_jsonrpc_monitor_flush_all(struct ovsdb_jsonrpc_session *s) { @@ -1336,7 +1363,7 @@ ovsdb_jsonrpc_monitor_flush_all(struct ovsdb_jsonrpc_session *s) struct json *params; params = json_array_create_2(json_clone(m->monitor_id), json); - msg = jsonrpc_create_notify("update", params); + msg = ovsdb_jsonrpc_create_notify(m, params); jsonrpc_session_send(s->js, msg); } }