From patchwork Sun Jul 3 15:35:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ryan Moats X-Patchwork-Id: 643761 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3rjDms25FXz9s9n for ; Mon, 4 Jul 2016 01:37:49 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 8841222C3AE; Sun, 3 Jul 2016 08:37:48 -0700 (PDT) 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 75F2422C3A5 for ; Sun, 3 Jul 2016 08:37:47 -0700 (PDT) Received: from bar6.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id 0C0711630F5 for ; Sun, 3 Jul 2016 09:37:47 -0600 (MDT) X-ASG-Debug-ID: 1467560266-0b32373f7e1f26b0001-byXFYA Received: from mx3-pf1.cudamail.com ([192.168.14.2]) by bar6.cudamail.com with ESMTP id uMs4qgnNz1WEoESM (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 03 Jul 2016 09:37:46 -0600 (MDT) X-Barracuda-Envelope-From: rmoats@oc7146733065.ibm.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.2 Received: from unknown (HELO fed1rmfepo102.cox.net) (68.230.241.144) by mx3-pf1.cudamail.com with SMTP; 3 Jul 2016 15:37:46 -0000 Received-SPF: none (mx3-pf1.cudamail.com: domain at oc7146733065.ibm.com does not designate permitted sender hosts) X-Barracuda-Apparent-Source-IP: 68.230.241.144 X-Barracuda-RBL-IP: 68.230.241.144 Received: from fed1rmimpo109.cox.net ([68.230.241.158]) by fed1rmfepo102.cox.net (InterMail vM.8.01.05.28 201-2260-151-171-20160122) with ESMTP id <20160703153745.PATD10482.fed1rmfepo102.cox.net@fed1rmimpo109.cox.net> for ; Sun, 3 Jul 2016 11:37:45 -0400 Received: from oc7146733065.ibm.com ([68.13.99.247]) by fed1rmimpo109.cox.net with cox id EFdk1t0055LF6cs01Fdk6X; Sun, 03 Jul 2016 11:37:44 -0400 X-CT-Class: Clean X-CT-Score: 0.00 X-CT-RefID: str=0001.0A020202.57793148.0118, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CT-Spam: 0 X-Authority-Analysis: v=2.1 cv=WtiLSYrv c=1 sm=1 tr=0 a=Jmqd6mthTashISSy/JkQqg==:117 a=Jmqd6mthTashISSy/JkQqg==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=cAmyUtKerLwA:10 a=VnNF1IyMAAAA:8 a=kYPLp0E6Bw8cb4QmuRgA:9 a=skCgnbhlp52w9zbo2JeP:22 X-CM-Score: 0.00 Authentication-Results: cox.net; none Received: by oc7146733065.ibm.com (Postfix, from userid 500) id AB7D61880388; Sun, 3 Jul 2016 10:37:43 -0500 (CDT) X-CudaMail-Envelope-Sender: rmoats@oc7146733065.ibm.com From: Ryan Moats To: dev@openvswitch.org X-CudaMail-MID: CM-V1-702007018 X-CudaMail-DTE: 070316 X-CudaMail-Originating-IP: 68.230.241.144 Date: Sun, 3 Jul 2016 10:35:32 -0500 X-ASG-Orig-Subj: [##CM-V1-702007018##][PATCH v21 7/8] Refactor neighbor flows in lflow.c Message-Id: <1467560133-5700-8-git-send-email-rmoats@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1467560133-5700-1-git-send-email-rmoats@us.ibm.com> References: <1467560133-5700-1-git-send-email-rmoats@us.ibm.com> X-GBUdb-Analysis: 0, 68.230.241.144, Ugly c=0.113212 p=-0.333333 Source Normal X-MessageSniffer-Rules: 0-0-0-8419-c X-Barracuda-Connect: UNKNOWN[192.168.14.2] X-Barracuda-Start-Time: 1467560266 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: 0.60 X-Barracuda-Spam-Status: No, SCORE=0.60 using global scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=4.0 tests=BSF_SC5_MJ1963, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.30979 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Subject: [ovs-dev] [PATCH v21 7/8] Refactor neighbor flows in lflow.c 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" Extract block within SBREC_MAC_BINDING_FOR_EACH loop within add_neighbor_flows to helper method so it can be reused when doing incremental processing. This is_new parameter is added for use in a later patch set. Signed-off-by: Ryan Moats --- ovn/controller/lflow.c | 68 +++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/ovn/controller/lflow.c b/ovn/controller/lflow.c index fd6d15f..ee613b9 100644 --- a/ovn/controller/lflow.c +++ b/ovn/controller/lflow.c @@ -559,6 +559,44 @@ put_load(const uint8_t *data, size_t len, bitwise_one(&sf->mask, sf->field->n_bytes, ofs, n_bits); } +static void +consider_neighbor_flow(const struct lport_index *lports, + const struct sbrec_mac_binding *b, + struct ofpbuf *ofpacts_p, + struct match *match_p, + bool is_new) +{ + const struct sbrec_port_binding *pb + = lport_lookup_by_name(lports, b->logical_port); + if (!pb) { + return; + } + + struct eth_addr mac; + if (!eth_addr_from_string(b->mac, &mac)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "bad 'mac' %s", b->mac); + return; + } + + ovs_be32 ip; + if (!ip_parse(b->ip, &ip)) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); + VLOG_WARN_RL(&rl, "bad 'ip' %s", b->ip); + return; + } + + match_set_metadata(match_p, htonll(pb->datapath->tunnel_key)); + match_set_reg(match_p, MFF_LOG_OUTPORT - MFF_REG0, pb->tunnel_key); + match_set_reg(match_p, 0, ntohl(ip)); + + ofpbuf_clear(ofpacts_p); + put_load(mac.ea, sizeof mac.ea, MFF_ETH_DST, 0, 48, ofpacts_p); + + ofctrl_add_flow(OFTABLE_MAC_BINDING, 100, match_p, ofpacts_p, + &b->header_.uuid, is_new); +} + /* Adds an OpenFlow flow to flow tables for each MAC binding in the OVN * southbound database, using 'lports' to resolve logical port names to * numbers. */ @@ -573,35 +611,7 @@ add_neighbor_flows(struct controller_ctx *ctx, const struct sbrec_mac_binding *b; SBREC_MAC_BINDING_FOR_EACH (b, ctx->ovnsb_idl) { - const struct sbrec_port_binding *pb - = lport_lookup_by_name(lports, b->logical_port); - if (!pb) { - continue; - } - - struct eth_addr mac; - if (!eth_addr_from_string(b->mac, &mac)) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); - VLOG_WARN_RL(&rl, "bad 'mac' %s", b->mac); - continue; - } - - ovs_be32 ip; - if (!ip_parse(b->ip, &ip)) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 1); - VLOG_WARN_RL(&rl, "bad 'ip' %s", b->ip); - continue; - } - - match_set_metadata(&match, htonll(pb->datapath->tunnel_key)); - match_set_reg(&match, MFF_LOG_OUTPORT - MFF_REG0, pb->tunnel_key); - match_set_reg(&match, 0, ntohl(ip)); - - ofpbuf_clear(&ofpacts); - put_load(mac.ea, sizeof mac.ea, MFF_ETH_DST, 0, 48, &ofpacts); - - ofctrl_add_flow(OFTABLE_MAC_BINDING, 100, &match, &ofpacts, - &b->header_.uuid, true); + consider_neighbor_flow(lports, b, &ofpacts, &match, true); } ofpbuf_uninit(&ofpacts); }