From patchwork Thu Oct 22 04:45:28 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Zhou X-Patchwork-Id: 534203 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 DF3FF1402B6 for ; Thu, 22 Oct 2015 15:46:23 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nicira_com.20150623.gappssmtp.com header.i=@nicira_com.20150623.gappssmtp.com header.b=thpE9hd6; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 6B56D1077A; Wed, 21 Oct 2015 21:45:57 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v1.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 5F7DF10775 for ; Wed, 21 Oct 2015 21:45:55 -0700 (PDT) Received: from bar3.cudamail.com (bar1 [192.168.15.1]) by mx3v1.cudamail.com (Postfix) with ESMTP id 592C86182E6 for ; Wed, 21 Oct 2015 22:45:51 -0600 (MDT) X-ASG-Debug-ID: 1445489151-03dd7b10671aca20001-byXFYA Received: from mx3-pf2.cudamail.com ([192.168.14.1]) by bar3.cudamail.com with ESMTP id fHrF0aoJHAvTB0gk (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 21 Oct 2015 22:45:51 -0600 (MDT) X-Barracuda-Envelope-From: azhou@nicira.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.1 Received: from unknown (HELO mail-wi0-f180.google.com) (209.85.212.180) by mx3-pf2.cudamail.com with ESMTPS (RC4-SHA encrypted); 22 Oct 2015 04:45:50 -0000 Received-SPF: unknown (mx3-pf2.cudamail.com: Multiple SPF records returned) X-Barracuda-Apparent-Source-IP: 209.85.212.180 X-Barracuda-RBL-IP: 209.85.212.180 Received: by wicfx6 with SMTP id fx6so118533816wic.1 for ; Wed, 21 Oct 2015 21:45:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nicira_com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=MqxgKD/j5piT9xfJPl7+kSbvCtpIoIFvygfVKua544Y=; b=thpE9hd6HQUhv65jGcoEUKiqAQEQFIGrpuatJYvR5qOCMy5xfEcRvsxNmbRW/jiCGK AZ9pRKmlN/r0FA/O/+vka1YC6/A7rctyV09a8HVcOTGo+fIkeIplA7+LOjJmokNi4UKd Xd0bzM61sNR1yKqoztbzEYpfHtu/hXsydm4H05shfK/gc5zaXjoWHfzo45x5C+YUyPAE ymcbzuXS5WJDVMCD3xP4NiYPd9o6G0RfSrxA8L57HCADuZWfmmRqf+2klwDryusxnfTs pU2I7UpddvCbOLIEfQwog+nT6dML5H0oW+clyHv6a2Xwf7daKCpG5uU3zwCtdEu9VHIG DQEQ== 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:in-reply-to :references; bh=MqxgKD/j5piT9xfJPl7+kSbvCtpIoIFvygfVKua544Y=; b=l1AoKaHCvkkFkreW+eJEJCIuHKrl8qqS8CYE2bKkqERWMnJGPcUc7RXYwvkUe5RoUz 98JfgUPPAIv7b/zz00m29CNdzYPGv+rnwYCmE2bnQeyaeZ12qLQfgNZVQUOXXMSRscDp RHuZZW0IKSrdDn5DBPTLZYWCs8rlQmqIHZ3WpqyQKgZUsahG4xuf09soOvBZ4Ly4dlob sFekF2qKOsST854RxIb37fbuTgH17TztlwdgdEjqmOW9rU2rrl4ABiUPcnS9vNO300N/ wh8jx3DPk5yEtQJy9wB7NBtkyVXablHRYmat3c2GT8mAjwQK+wS6luaGcyOnXeqdVKuF zCPQ== X-Gm-Message-State: ALoCoQl0DR9KGixTVnigYiIyEcztzxO93+AYwI2eOpmLjbsdtc8SrahgxHCm7fV8LDFvEykLevsS X-Received: by 10.194.57.242 with SMTP id l18mr14345736wjq.34.1445489148762; Wed, 21 Oct 2015 21:45:48 -0700 (PDT) Received: from ubuntu.localdomain ([208.91.1.34]) by smtp.gmail.com with ESMTPSA id s16sm26389112wik.16.2015.10.21.21.45.47 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 21 Oct 2015 21:45:48 -0700 (PDT) X-CudaMail-Envelope-Sender: azhou@nicira.com From: Andy Zhou To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V2-1020078637 X-CudaMail-DTE: 102115 X-CudaMail-Originating-IP: 209.85.212.180 Date: Wed, 21 Oct 2015 21:45:28 -0700 X-ASG-Orig-Subj: [##CM-V2-1020078637##][mointor2 6/9] ovsdb: enable jasonrpc-server to service monitor2 request Message-Id: <1445489131-21483-6-git-send-email-azhou@nicira.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445489131-21483-1-git-send-email-azhou@nicira.com> References: <1445489131-21483-1-git-send-email-azhou@nicira.com> X-Barracuda-Connect: UNKNOWN[192.168.14.1] X-Barracuda-Start-Time: 1445489151 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] [mointor2 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" ovsdb-server now accepts the new "monitor2" request. The next patch will switch IDL to use monitor2 by default. Signed-off-by: Andy Zhou --- NEWS | 1 + ovsdb/jsonrpc-server.c | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 9b9dff2..19e4409 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,7 @@ 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. + - Add "monitor2" and "update2", which are RFC 7047 extions. 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); } }