From patchwork Thu Apr 1 23:21:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Pfaff X-Patchwork-Id: 1461459 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4FBK5h0TjNz9sVq for ; Fri, 2 Apr 2021 10:24:40 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id B353E40F52; Thu, 1 Apr 2021 23:23:42 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1iZZCCxNieuV; Thu, 1 Apr 2021 23:23:40 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTP id 9CD56406A2; Thu, 1 Apr 2021 23:23:26 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id B612BC000A; Thu, 1 Apr 2021 23:23:25 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 28228C0011 for ; Thu, 1 Apr 2021 23:23:24 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 9013F40E53 for ; Thu, 1 Apr 2021 23:21:56 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zag0HtueKeXK for ; Thu, 1 Apr 2021 23:21:54 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by smtp2.osuosl.org (Postfix) with ESMTPS id 008FD406A7 for ; Thu, 1 Apr 2021 23:21:47 +0000 (UTC) X-Originating-IP: 75.54.222.30 Received: from sigfpe.attlocal.net (75-54-222-30.lightspeed.rdcyca.sbcglobal.net [75.54.222.30]) (Authenticated sender: blp@ovn.org) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 313831C0005; Thu, 1 Apr 2021 23:21:44 +0000 (UTC) From: Ben Pfaff To: dev@openvswitch.org Date: Thu, 1 Apr 2021 16:21:00 -0700 Message-Id: <20210401232108.3902274-19-blp@ovn.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210401232108.3902274-1-blp@ovn.org> References: <20210401232108.3902274-1-blp@ovn.org> MIME-Version: 1.0 Cc: Leonid Ryzhyk , Ben Pfaff Subject: [ovs-dev] [PATCH v2 18/26] ovn-northd-ddlog: Intern the RouterPort table. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Leonid Ryzhyk Change the type of record in the `RouterPort` table from `Ref` to `Intern`. Signed-off-by: Leonid Ryzhyk Signed-off-by: Ben Pfaff --- northd/lrouter.dl | 37 +++++++++++++++++++++---------------- northd/lswitch.dl | 4 ++-- northd/ovn_northd.dl | 14 +++++++------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/northd/lrouter.dl b/northd/lrouter.dl index b2b429af3c96..e4e5cbf9f212 100644 --- a/northd/lrouter.dl +++ b/northd/lrouter.dl @@ -23,7 +23,7 @@ import lswitch function is_enabled(lr: nb::Logical_Router): bool { is_enabled(lr.enabled) } function is_enabled(lrp: nb::Logical_Router_Port): bool { is_enabled(lrp.enabled) } function is_enabled(rp: RouterPort): bool { rp.lrp.is_enabled() } -function is_enabled(rp: Ref): bool { rp.lrp.is_enabled() } +function is_enabled(rp: Intern): bool { rp.lrp.is_enabled() } /* default logical flow prioriry for distributed routes */ function dROUTE_PRIO(): bit<32> = 400 @@ -575,7 +575,7 @@ RouterPortHasBfd(lrp_uuid, false) :- /* FIXME: what should happen when extract_lrp_networks fails? */ /* RouterPort relation collects all attributes of a logical router port */ -relation &RouterPort( +typedef RouterPort = RouterPort { lrp: nb::Logical_Router_Port, json_name: string, networks: lport_addresses, @@ -584,17 +584,22 @@ relation &RouterPort( peer: RouterPeer, mcast_cfg: Ref, sb_options: Map, - has_bfd: bool) - -&RouterPort(.lrp = lrp, - .json_name = json_string_escape(lrp.name), - .networks = networks, - .router = router, - .is_redirect = is_redirect, - .peer = peer, - .mcast_cfg = mcast_cfg, - .sb_options = sb_options, - .has_bfd = has_bfd) :- + has_bfd: bool +} + +relation RouterPort[Intern] + +RouterPort[RouterPort{ + .lrp = lrp, + .json_name = json_string_escape(lrp.name), + .networks = networks, + .router = router, + .is_redirect = is_redirect, + .peer = peer, + .mcast_cfg = mcast_cfg, + .sb_options = sb_options, + .has_bfd = has_bfd + }.intern()] :- nb::Logical_Router_Port[lrp], Some{var networks} = extract_lrp_networks(lrp.mac, lrp.networks), LogicalRouterPort(lrp._uuid, lrouter_uuid), @@ -605,13 +610,13 @@ relation &RouterPort( RouterPortSbOptions(lrp._uuid, sb_options), RouterPortHasBfd(lrp._uuid, has_bfd). -relation RouterPortNetworksIPv4Addr(port: Ref, addr: ipv4_netaddr) +relation RouterPortNetworksIPv4Addr(port: Intern, addr: ipv4_netaddr) RouterPortNetworksIPv4Addr(port, addr) :- port in &RouterPort(.networks = networks), var addr = FlatMap(networks.ipv4_addrs). -relation RouterPortNetworksIPv6Addr(port: Ref, addr: ipv6_netaddr) +relation RouterPortNetworksIPv6Addr(port: Intern, addr: ipv6_netaddr) RouterPortNetworksIPv6Addr(port, addr) :- port in &RouterPort(.networks = networks), @@ -733,7 +738,7 @@ RouterStaticRoute_(.router = router, typedef route_dst = RouteDst { nexthop: v46_ip, src_ip: v46_ip, - port: Ref, + port: Intern, ecmp_symmetric_reply: bool } diff --git a/northd/lswitch.dl b/northd/lswitch.dl index c089fadac863..aff265bbf82c 100644 --- a/northd/lswitch.dl +++ b/northd/lswitch.dl @@ -27,7 +27,7 @@ function is_enabled(lsp: Ref): bool { lsp.deref().is_en function is_enabled(sp: SwitchPort): bool { sp.lsp.is_enabled() } function is_enabled(sp: Intern): bool { sp.lsp.is_enabled() } -relation SwitchRouterPeerRef(lsp: uuid, rport: Option>) +relation SwitchRouterPeerRef(lsp: uuid, rport: Option>) SwitchRouterPeerRef(lsp, Some{rport}) :- SwitchRouterPeer(lsp, _, lrp), @@ -555,7 +555,7 @@ typedef SwitchPort = SwitchPort { lsp: nb::Logical_Switch_Port, json_name: string, sw: Intern, - peer: Option>, + peer: Option>, static_addresses: Vec, dynamic_address: Option, static_dynamic_mac: Option, diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl index c4d46b2a8406..9e53821719c9 100644 --- a/northd/ovn_northd.dl +++ b/northd/ovn_northd.dl @@ -192,7 +192,7 @@ OutProxy_Port_Binding(._uuid = lsp._uuid, Some{"router"} -> match ((l3dgw_port, opt_chassis, peer)) { (None, None, _) -> set_empty(), (_, _, None) -> set_empty(), - (_, _, Some{rport}) -> get_nat_addresses(deref(rport)) + (_, _, Some{rport}) -> get_nat_addresses(rport) }, Some{nat_addresses} -> { /* Only accept manual specification of ethernet address @@ -233,7 +233,7 @@ OutProxy_Port_Binding(._uuid = lsp._uuid, (rport.router.options.contains_key("chassis") and not sw.localnet_ports.is_empty())) { false -> set_empty(), - true -> set_singleton(get_garp_nat_addresses(deref(rport))) + true -> set_singleton(get_garp_nat_addresses(rport)) }, None -> set_empty() }, @@ -316,7 +316,7 @@ function get_router_load_balancer_ips(router: Intern) : * external IP addresses of all NAT rules defined on that router, and all * of the IP addresses used in load balancer VIPs defined on that router. */ -function get_nat_addresses(rport: RouterPort): Set = +function get_nat_addresses(rport: Intern): Set = { var addresses = set_empty(); var has_redirect = rport.router.l3dgw_port.is_some(); @@ -391,7 +391,7 @@ function get_nat_addresses(rport: RouterPort): Set = } } -function get_garp_nat_addresses(rport: RouterPort): string = { +function get_garp_nat_addresses(rport: Intern): string = { var garp_info = ["${rport.networks.ea}"]; for (ipv4_addr in rport.networks.ipv4_addrs) { garp_info.push("${ipv4_addr.addr}") @@ -4037,7 +4037,7 @@ for (SwitchPortStaticAddresses(.port = &SwitchPort{.lsp = lsp, .json_name = json /* Returns 'true' if the IP 'addr' is on the same subnet with one of the * IPs configured on the router port. */ -function lrouter_port_ip_reachable(rp: Ref, addr: v46_ip): bool { +function lrouter_port_ip_reachable(rp: Intern, addr: v46_ip): bool { match (addr) { IPv4{ipv4} -> { for (na in rp.networks.ipv4_addrs) { @@ -4086,7 +4086,7 @@ UniqueFlow[Flow{.logical_datapath = sw._uuid, * router port. * Priority: 80. */ -function get_arp_forward_ips(rp: Ref): (Set, Set) = { +function get_arp_forward_ips(rp: Intern): (Set, Set) = { var all_ips_v4 = set_empty(); var all_ips_v6 = set_empty(); @@ -6322,7 +6322,7 @@ for (&Router(._uuid = lr_uuid)) * the following rule. */ relation Route(key: route_key, // matching criteria - port: Ref, // output port + port: Intern, // output port src_ip: v46_ip, // source IP address for output gateway: Option) // next hop (unless being delivered)