From patchwork Tue Nov 24 12:20:22 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: saloni.jain12@gmail.com X-Patchwork-Id: 548037 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (li376-54.members.linode.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 710B51402CC for ; Tue, 24 Nov 2015 23:21:13 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Nn3SzYFw; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id B5B5C108DE; Tue, 24 Nov 2015 04:21:12 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e4.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id 1FC27108C5 for ; Tue, 24 Nov 2015 04:21:11 -0800 (PST) Received: from bar2.cudamail.com (unknown [192.168.21.12]) by mx1e4.cudamail.com (Postfix) with ESMTPS id 8AA031E00F7 for ; Tue, 24 Nov 2015 05:21:10 -0700 (MST) X-ASG-Debug-ID: 1448367669-03dc5332c8a07b0001-byXFYA Received: from mx1-pf2.cudamail.com ([192.168.24.2]) by bar2.cudamail.com with ESMTP id 0sXGekGLkZrI40bW (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 24 Nov 2015 05:21:09 -0700 (MST) X-Barracuda-Envelope-From: saloni.jain12@gmail.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.2 Received: from unknown (HELO mail-pa0-f46.google.com) (209.85.220.46) by mx1-pf2.cudamail.com with ESMTPS (RC4-SHA encrypted); 24 Nov 2015 12:21:09 -0000 Received-SPF: pass (mx1-pf2.cudamail.com: SPF record at _netblocks.google.com designates 209.85.220.46 as permitted sender) X-Barracuda-Apparent-Source-IP: 209.85.220.46 X-Barracuda-RBL-IP: 209.85.220.46 Received: by pabfh17 with SMTP id fh17so21971126pab.0 for ; Tue, 24 Nov 2015 04:21:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=tFO8OjpzPnQ+F7Vp/LPNt+ct7kZflzmgWcB4Zt9t3rA=; b=Nn3SzYFwdL5Oh7+HnKrorRmihg+AwLh1rFPA5b3+YdIGPFtpvzSoxMjCxNBYTYB/P7 lBZz692ctGZ48DGY7le0VnTd/78mnHeBygNnAYQQG05EuLVYsFmQhRtzCaKx1mBJbmiL WPz8dO4FtmavXs/yPIRLJpyiunOsURly0GT8HwgFdYEJdwPP+SEGcO08pJQ1R1PX0Krb A9h8zu+jnK1lOfgndDgWl3kUqmEuWze0FxiAXosd5hgky/KjmhE2DSabV+RGJY5S8b/D bitKV6MQey7vjwOCbf0GzycO50k7ksXcQpEcszTcNlgkg95Clx0hELJSGyg1IpEKoAbz AxNA== X-Received: by 10.98.43.67 with SMTP id r64mr22464838pfr.3.1448367667654; Tue, 24 Nov 2015 04:21:07 -0800 (PST) Received: from localhost.localdomain ([14.98.135.109]) by smtp.gmail.com with ESMTPSA id sn9sm14683326pac.16.2015.11.24.04.21.03 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 Nov 2015 04:21:06 -0800 (PST) X-CudaMail-Envelope-Sender: saloni.jain12@gmail.com From: saloni.jain12@gmail.com X-Google-Original-From: saloni.jain@tcs.com To: dev@openvswitch.org X-CudaMail-MID: CM-E2-1123011956 X-CudaMail-DTE: 112415 X-CudaMail-Originating-IP: 209.85.220.46 Date: Tue, 24 Nov 2015 17:50:22 +0530 X-ASG-Orig-Subj: [##CM-E2-1123011956##][PATCH v5 2/3] Implement Vacancy Events for OFPMP_TABLE_DESC. Message-Id: <1448367622-12676-1-git-send-email-saloni.jain@tcs.com> X-Mailer: git-send-email 1.7.9.5 X-GBUdb-Analysis: 0, 209.85.220.46, Ugly c=0.49838 p=-0.460317 Source Normal X-MessageSniffer-Rules: 0-0-0-14376-c X-Barracuda-Connect: UNKNOWN[192.168.24.2] X-Barracuda-Start-Time: 1448367669 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=4.0 tests=BSF_RULE7568M, BSF_SC5_MJ1963, DKIM_SIGNED, NO_REAL_NAME, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.24678 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.50 BSF_RULE7568M Custom Rule 7568M 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Cc: deepankar.gupta@tcs.com, partha.datta@tcs.com, Hiteshi Kalra Subject: [ovs-dev] [PATCH v5 2/3] Implement Vacancy Events for OFPMP_TABLE_DESC. 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: Saloni Jain This patch adds support for vacancy events in table-desc. ovs-ofctl -O OpenFlow14 dump-tables-desc -This command is enhanced to display the Vacancy Event configuration of the tables on a , which is set using the mod-table command. Signed-off-by: Saloni Jain Co-authored-by: Hiteshi Kalra Signed-off-by: Hiteshi Kalra --- Difference between v4 and v5: - Rebased with latest master - Implemented changes suggested in review comments. lib/ofp-print.c | 11 +++++++++++ lib/ofp-util.c | 31 +++++++++++++++++++++++++++++++ ofproto/ofproto.c | 26 +++++++++++++++++++++----- tests/ofproto.at | 3 ++- 4 files changed, 65 insertions(+), 6 deletions(-) diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 168f43a..e7b05fc 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -1053,6 +1053,17 @@ ofp_print_table_desc(struct ds *string, const struct ofputil_table_desc *td) ofputil_table_eviction_to_string(td->eviction)); ofputil_put_eviction_flags(string, td->eviction_flags); ds_put_char(string, '\n'); + ds_put_format(string, " vacancy=%s", + ofputil_table_vacancy_to_string(td->vacancy)); + if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) { + ds_put_format(string, " vacancy_down=%"PRIu8"%%", + td->table_vacancy.vacancy_down); + ds_put_format(string, " vacancy_up=%"PRIu8"%%", + td->table_vacancy.vacancy_up); + ds_put_format(string, " vacancy=%"PRIu8"%%", + td->table_vacancy.vacancy); + } + ds_put_char(string, '\n'); } static void diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 1300319..819f0fd 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -4887,6 +4887,22 @@ parse_table_desc_eviction_property(struct ofpbuf *property, return 0; } +static enum ofperr +parse_table_desc_vacancy_property(struct ofpbuf *property, + struct ofputil_table_desc *td) +{ + struct ofp14_table_mod_prop_vacancy *otv = property->data; + + if (property->size != sizeof *otv) { + return OFPERR_OFPBPC_BAD_LEN; + } + + td->table_vacancy.vacancy_down = otv->vacancy_down; + td->table_vacancy.vacancy_up = otv->vacancy_up; + td->table_vacancy.vacancy = otv->vacancy; + return 0; +} + /* Decodes the next OpenFlow "table desc" message (of possibly several) from * 'msg' into an abstract form in '*td'. Returns 0 if successful, EOF if the * last "table desc" in 'msg' was already decoded, otherwise an OFPERR_* @@ -4928,6 +4944,7 @@ ofputil_decode_table_desc(struct ofpbuf *msg, ofpbuf_use_const(&properties, ofpbuf_pull(msg, length), length); td->eviction = ofputil_decode_table_eviction(otd->config, version); + td->vacancy = ofputil_decode_table_vacancy(otd->config, version); td->eviction_flags = UINT32_MAX; while (properties.size > 0) { @@ -4945,6 +4962,10 @@ ofputil_decode_table_desc(struct ofpbuf *msg, error = parse_table_desc_eviction_property(&payload, td); break; + case OFPTMPT14_VACANCY: + error = parse_table_desc_vacancy_property(&payload, td); + break; + default: log_property(true, "unknown table_desc property %"PRIu16, type); error = 0; @@ -4997,6 +5018,16 @@ ofputil_append_table_desc_reply(const struct ofputil_table_desc *td, ote->length = htons(sizeof *ote); ote->flags = htonl(td->eviction_flags); } + if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) { + struct ofp14_table_mod_prop_vacancy *otv; + + otv = ofpbuf_put_zeros(reply, sizeof *otv); + otv->type = htons(OFPTMPT14_VACANCY); + otv->length = htons(sizeof *otv); + otv->vacancy_down = td->table_vacancy.vacancy_down; + otv->vacancy_up = td->table_vacancy.vacancy_up; + otv->vacancy = td->table_vacancy.vacancy; + } otd = ofpbuf_at_assert(reply, start_otd, sizeof *otd); otd->length = htons(reply->size - start_otd); diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 26b20ba..86e6bf1 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -3588,6 +3588,26 @@ handle_table_features_request(struct ofconn *ofconn, return 0; } +static void +query_table_desc__(struct ofputil_table_desc *td, + struct ofproto *ofproto, uint8_t table_id) +{ + unsigned int count = ofproto->tables[table_id].n_flows; + unsigned int max_flows = ofproto->tables[table_id].max_flows; + + td->table_id = table_id; + td->eviction = (ofproto->tables[table_id].eviction & EVICTION_OPENFLOW + ? OFPUTIL_TABLE_EVICTION_ON + : OFPUTIL_TABLE_EVICTION_OFF); + td->eviction_flags = OFPROTO_EVICTION_FLAGS; + td->vacancy = (ofproto->tables[table_id].vacancy_enabled + ? OFPUTIL_TABLE_VACANCY_ON + : OFPUTIL_TABLE_VACANCY_OFF); + td->table_vacancy.vacancy_down = ofproto->tables[table_id].vacancy_down; + td->table_vacancy.vacancy_up = ofproto->tables[table_id].vacancy_up; + td->table_vacancy.vacancy = max_flows ? (count * 100) / max_flows : 0; +} + /* This function queries the database for dumping table-desc. */ static void query_tables_desc(struct ofproto *ofproto, struct ofputil_table_desc **descp) @@ -3598,11 +3618,7 @@ query_tables_desc(struct ofproto *ofproto, struct ofputil_table_desc **descp) table_desc = *descp = xcalloc(ofproto->n_tables, sizeof *table_desc); for (i = 0; i < ofproto->n_tables; i++) { struct ofputil_table_desc *td = &table_desc[i]; - td->table_id = i; - td->eviction = (ofproto->tables[i].eviction & EVICTION_OPENFLOW - ? OFPUTIL_TABLE_EVICTION_ON - : OFPUTIL_TABLE_EVICTION_OFF); - td->eviction_flags = OFPROTO_EVICTION_FLAGS; + query_table_desc__(td, ofproto, i); } } diff --git a/tests/ofproto.at b/tests/ofproto.at index a0d29e7..e773ab3 100644 --- a/tests/ofproto.at +++ b/tests/ofproto.at @@ -1736,7 +1736,8 @@ OVS_VSWITCHD_START while test $x -lt 254; do y=`expr $x + 1` echo " table $x: - eviction=off eviction_flags=OTHER|IMPORTANCE|LIFETIME" + eviction=off eviction_flags=OTHER|IMPORTANCE|LIFETIME + vacancy=off" x=$y done) > expout AT_CHECK([ovs-ofctl -O OpenFlow14 dump-table-desc br0 | sed '/^$/d