Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1526189/?format=api
http://patchwork.ozlabs.org/api/patches/1526189/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ovn/patch/3ee28b22a6379522182d1b3e00edf5854b44e4a5.1631191707.git.lorenzo.bianconi@redhat.com/", "project": { "id": 68, "url": "http://patchwork.ozlabs.org/api/projects/68/?format=api", "name": "Open Virtual Network development", "link_name": "ovn", "list_id": "ovs-dev.openvswitch.org", "list_email": "ovs-dev@openvswitch.org", "web_url": "http://openvswitch.org/", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<3ee28b22a6379522182d1b3e00edf5854b44e4a5.1631191707.git.lorenzo.bianconi@redhat.com>", "list_archive_url": null, "date": "2021-09-09T12:50:24", "name": "[ovs-dev,v3] northd: reduce number of nd_na lb logical flows", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "98bed6f70372fc7fbe7f506c995178e8039894d8", "submitter": { "id": 73083, "url": "http://patchwork.ozlabs.org/api/people/73083/?format=api", "name": "Lorenzo Bianconi", "email": "lorenzo.bianconi@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/ovn/patch/3ee28b22a6379522182d1b3e00edf5854b44e4a5.1631191707.git.lorenzo.bianconi@redhat.com/mbox/", "series": [ { "id": 261606, "url": "http://patchwork.ozlabs.org/api/series/261606/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=261606", "date": "2021-09-09T12:50:24", "name": "[ovs-dev,v3] northd: reduce number of nd_na lb logical flows", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/261606/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1526189/comments/", "check": "fail", "checks": "http://patchwork.ozlabs.org/api/patches/1526189/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<ovs-dev-bounces@openvswitch.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "ovs-dev@openvswitch.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "ovs-dev@lists.linuxfoundation.org" ], "Authentication-Results": [ "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=akkwNNM6;\n\tdkim-atps=neutral", "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN>)", "smtp4.osuosl.org (amavisd-new);\n dkim=pass (1024-bit key) header.d=redhat.com", "relay.mimecast.com;\n auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lorenzo.bianconi@redhat.com" ], "Received": [ "from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 4H4zPx2z0qz9t9y\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 9 Sep 2021 22:50:44 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 2EF5960B16;\n\tThu, 9 Sep 2021 12:50:42 +0000 (UTC)", "from smtp3.osuosl.org ([127.0.0.1])\n\tby localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id LTStqm6XxA0i; Thu, 9 Sep 2021 12:50:40 +0000 (UTC)", "from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 0E93560ADF;\n\tThu, 9 Sep 2021 12:50:40 +0000 (UTC)", "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id D04D1C0011;\n\tThu, 9 Sep 2021 12:50:39 +0000 (UTC)", "from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])\n by lists.linuxfoundation.org (Postfix) with ESMTP id BD754C000D\n for <ovs-dev@openvswitch.org>; Thu, 9 Sep 2021 12:50:37 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id ACD9040348\n for <ovs-dev@openvswitch.org>; Thu, 9 Sep 2021 12:50:37 +0000 (UTC)", "from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id h-imGpD7RB2M for <ovs-dev@openvswitch.org>;\n Thu, 9 Sep 2021 12:50:35 +0000 (UTC)", "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [216.205.24.124])\n by smtp4.osuosl.org (Postfix) with ESMTPS id 8B53140342\n for <ovs-dev@openvswitch.org>; Thu, 9 Sep 2021 12:50:35 +0000 (UTC)", "from mail-ed1-f72.google.com (mail-ed1-f72.google.com\n [209.85.208.72]) (Using TLS) by relay.mimecast.com with ESMTP id\n us-mta-175-HX1W2dk2Nzuk-xi0N_v4dQ-1; Thu, 09 Sep 2021 08:50:33 -0400", "by mail-ed1-f72.google.com with SMTP id\n g17-20020a056402425100b003cd5ba2852fso926400edb.1\n for <ovs-dev@openvswitch.org>; Thu, 09 Sep 2021 05:50:33 -0700 (PDT)", "from lore-desk.redhat.com (net-37-179-26-33.cust.vodafonedsl.it.\n [37.179.26.33])\n by smtp.gmail.com with ESMTPSA id t16sm890897ejj.54.2021.09.09.05.50.30\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 09 Sep 2021 05:50:30 -0700 (PDT)" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.8.0", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1631191834;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=Ohz/jV7GY4NaKY6CwxeZBBNfRmaW11TQgrQt7rZt7/Q=;\n b=akkwNNM6+o3+Fds2K8tvfZAfaZqe4RpehqITjfI+Uj/tQO8BQvw5/gc3YKzSCNSSoK3Vxj\n npLtG9K1YOoYxfpE5qYrsGYGNMnuGl48lKSYOFPPMPoozUMTPGC7GLeTw/1zE9qkpZ5H6J\n aWhmzUgeFsAIAweeIo5az5Uxhs43R1k=", "X-MC-Unique": "HX1W2dk2Nzuk-xi0N_v4dQ-1", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20210112;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version\n :content-transfer-encoding;\n bh=Ohz/jV7GY4NaKY6CwxeZBBNfRmaW11TQgrQt7rZt7/Q=;\n b=f9zPKmH/D4+ivJS8fZB8mK6cuM3Yhe+x7ygGJp8VwEa7nYP1CrOtvJM5V1+7uh6+Ks\n uc70AGF58SMfGKnAKTjORl5a5dWyx0mx3r4E/1nd+y5OVOYN3lfgc7lUZ+VvQdgO14oh\n ajRnbAuoH5L4ko8TJMZVCx4T70+Nkd3KAM7Sq8Kr/qIF1bg5JLdjj8NAdckcA3AZj8uU\n A3h0BNVsWSvI+OgD8lZ38Nxcw0X2BfWwb/7LyU3SpQ5uNId2hTMLNKuILbCfANSZzHcD\n QsIBZRFLwf8aXBRLBVBo2ic9wF1qW18oldToX7c+HEVen1nKOjAMr/FBTltV1ch1A3Nt\n 1w6Q==", "X-Gm-Message-State": "AOAM531XYaBKhvhY8YR8DMjVVWy7cs7FHehqxGoNmFLZf/gAs24N56zf\n fteregC6b9MTZpHlLrmOUtS4cy3KuQiuh50fPMCCN1zN/zGJ4J0N8C4wikjyxZm2OcHkEx3IPvU\n 1XevbBslfefplbwDyWytnG0sRH7osZCx/egtC5NnTNXxi8RYxU9i53sQnw/IQ9yMqaGEitPaZWp\n a7GCky", "X-Received": [ "by 2002:aa7:c993:: with SMTP id c19mr3039825edt.239.1631191831667;\n Thu, 09 Sep 2021 05:50:31 -0700 (PDT)", "by 2002:aa7:c993:: with SMTP id c19mr3039779edt.239.1631191831149;\n Thu, 09 Sep 2021 05:50:31 -0700 (PDT)" ], "X-Google-Smtp-Source": "\n ABdhPJwBGeCmnG5UDQJ8RWkbhDPU1ZvkUxzvCmEuzOMIbYyqGw1rg7/hI7NnEETKV6FbEDAcr1g+qQ==", "From": "Lorenzo Bianconi <lorenzo.bianconi@redhat.com>", "To": "ovs-dev@openvswitch.org", "Date": "Thu, 9 Sep 2021 14:50:24 +0200", "Message-Id": "\n <3ee28b22a6379522182d1b3e00edf5854b44e4a5.1631191707.git.lorenzo.bianconi@redhat.com>", "X-Mailer": "git-send-email 2.31.1", "MIME-Version": "1.0", "X-Mimecast-Spam-Score": "0", "X-Mimecast-Originator": "redhat.com", "Subject": "[ovs-dev] [PATCH v3 ovn] northd: reduce number of nd_na lb logical\n\tflows", "X-BeenThere": "ovs-dev@openvswitch.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "<ovs-dev.openvswitch.org>", "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>", "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>", "List-Post": "<mailto:ovs-dev@openvswitch.org>", "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>", "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "ovs-dev-bounces@openvswitch.org", "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>" }, "content": "As it has been already done for IPv4, collapse IPv6 Neighbour\nAdvertisment flows for load balancer using address list and\nreduce the number of logical flows from N*M to N where N is\nthe number of logical router port and M is the number of\nVirtual IPs.\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id=1970258\nSigned-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>\n---\nChanges since v2:\n- remove open code and run build_lrouter_nd_flow() instead\n\nChanges since v1:\n- rebase on top of ovn master\n- add DDlog support\n---\n northd/ovn-northd.c | 25 ++++++++++-------\n northd/ovn_northd.dl | 66 ++++++++++++++++++++++++++++++++------------\n tests/ovn-northd.at | 36 ++++++++----------------\n 3 files changed, 75 insertions(+), 52 deletions(-)", "diff": "diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c\nindex ee761cef0..fc623bcbe 100644\n--- a/northd/ovn-northd.c\n+++ b/northd/ovn-northd.c\n@@ -9851,8 +9851,7 @@ build_lrouter_nd_flow(struct ovn_datapath *od, struct ovn_port *op,\n ds_put_format(&actions,\n \"%s { \"\n \"eth.src = %s; \"\n- \"ip6.src = %s; \"\n- \"nd.target = %s; \"\n+ \"ip6.src = nd.target; \"\n \"nd.tll = %s; \"\n \"outport = inport; \"\n \"flags.loopback = 1; \"\n@@ -9860,8 +9859,6 @@ build_lrouter_nd_flow(struct ovn_datapath *od, struct ovn_port *op,\n \"};\",\n action,\n eth_addr,\n- ip_address,\n- ip_address,\n eth_addr);\n ovn_lflow_add_with_hint__(lflows, od, S_ROUTER_IN_IP_INPUT, priority,\n ds_cstr(&match), ds_cstr(&actions), NULL,\n@@ -11899,7 +11896,6 @@ build_lrouter_ipv4_ip_input(struct ovn_port *op,\n &op->nbrp->header_, lflows);\n }\n \n- const char *ip_address;\n if (sset_count(&op->od->lb_ips_v4)) {\n ds_clear(match);\n if (is_l3dgw_port(op)) {\n@@ -11920,17 +11916,26 @@ build_lrouter_ipv4_ip_input(struct ovn_port *op,\n ds_destroy(&load_balancer_ips_v4);\n }\n \n- SSET_FOR_EACH (ip_address, &op->od->lb_ips_v6) {\n+ if (sset_count(&op->od->lb_ips_v6)) {\n ds_clear(match);\n+ ds_clear(actions);\n+\n+ struct ds load_balancer_ips_v6 = DS_EMPTY_INITIALIZER;\n+\n+ ds_put_cstr(&load_balancer_ips_v6, \"{ \");\n+ ds_put_and_free_cstr(&load_balancer_ips_v6,\n+ sset_join(&op->od->lb_ips_v6, \", \", \" }\"));\n+\n if (is_l3dgw_port(op)) {\n ds_put_format(match, \"is_chassis_resident(%s)\",\n op->cr_port->json_key);\n }\n-\n build_lrouter_nd_flow(op->od, op, \"nd_na\",\n- ip_address, NULL, REG_INPORT_ETH_ADDR,\n- match, false, 90, NULL,\n- lflows, meter_groups);\n+ ds_cstr(&load_balancer_ips_v6), NULL,\n+ REG_INPORT_ETH_ADDR, match, false, 90,\n+ NULL, lflows, meter_groups);\n+\n+ ds_destroy(&load_balancer_ips_v6);\n }\n \n if (!op->od->is_gw_router && !op->od->n_l3dgw_ports) {\ndiff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl\nindex ff92c989c..d91f8111f 100644\n--- a/northd/ovn_northd.dl\n+++ b/northd/ovn_northd.dl\n@@ -5537,6 +5537,44 @@ LogicalRouterNdFlow(router, lrp, \"nd_na\", ipv6, true, mac, extra_match, drop, pr\n LogicalRouterArpNdFlow(router, nat@NAT{.external_ip = IPv6{ipv6}}, lrp,\n mac, extra_match, drop, priority).\n \n+relation LogicalRouterNdFlowLB(\n+ lr: Intern<Router>,\n+ lrp: Option<Intern<nb::Logical_Router_Port>>,\n+ ip: string,\n+ mac: string,\n+ extra_match: Option<string>,\n+ stage_hint: bit<32>)\n+Flow(.logical_datapath = lr._uuid,\n+ .stage = s_ROUTER_IN_IP_INPUT(),\n+ .priority = 90,\n+ .__match = __match.intern(),\n+ .actions = actions,\n+ .stage_hint = stage_hint,\n+ .io_port = None,\n+ .controller_meter = lr.copp.get(cOPP_ND_NA())) :-\n+ LogicalRouterNdFlowLB(.lr = lr, .lrp = lrp, .ip = ip,\n+ .mac = mac, .extra_match = extra_match,\n+ .stage_hint = stage_hint),\n+ var __match = {\n+ var clauses = vec_with_capacity(4);\n+ match (lrp) {\n+ Some{p} -> clauses.push(\"inport == ${json_string_escape(p.name)}\"),\n+ None -> ()\n+ };\n+ clauses.push(\"nd_ns && nd.target == ${ip}\");\n+ clauses.append(extra_match.to_vec());\n+ clauses.join(\" && \")\n+ },\n+ var actions =\n+ i\"nd_na { \"\n+ \"eth.src = ${mac}; \"\n+ \"ip6.src = nd.target; \"\n+ \"nd.tll = ${mac}; \"\n+ \"outport = inport; \"\n+ \"flags.loopback = 1; \"\n+ \"output; \"\n+ \"};\".\n+\n relation LogicalRouterArpFlow(\n lr: Intern<Router>,\n lrp: Option<Intern<nb::Logical_Router_Port>>,\n@@ -5622,8 +5660,7 @@ Flow(.logical_datapath = lr._uuid,\n } else {\n (i\"${action} { \"\n \"eth.src = ${mac}; \"\n- \"ip6.src = ${ip}; \"\n- \"nd.target = ${ip}; \"\n+ \"ip6.src = nd.target; \"\n \"nd.tll = ${mac}; \"\n \"outport = inport; \"\n \"flags.loopback = 1; \"\n@@ -5693,7 +5730,7 @@ var residence_check = match (is_redirect) {\n true -> Some{\"is_chassis_resident(${json_string_escape(chassis_redirect_name(lrp.name))})\"},\n false -> None\n } in {\n- (var all_ips_v4, _) = get_router_load_balancer_ips(router, false) in {\n+ (var all_ips_v4, var all_ips_v6) = get_router_load_balancer_ips(router, false) in {\n if (not all_ips_v4.is_empty()) {\n LogicalRouterArpFlow(.lr = router,\n .lrp = Some{lrp},\n@@ -5703,21 +5740,14 @@ var residence_check = match (is_redirect) {\n .drop = false,\n .priority = 90,\n .stage_hint = 0)\n- }\n- };\n- for (RouterLBVIP(.router = &Router{._uuid= lr_uuid}, .vip = vip)) {\n- Some{(var ip_address, _)} = ip_address_and_port_from_lb_key(vip) in {\n- IPv6{var ipv6} = ip_address in\n- LogicalRouterNdFlow(.lr = router,\n- .lrp = Some{lrp},\n- .action = \"nd_na\",\n- .ip = ipv6,\n- .sn_ip = false,\n- .mac = rEG_INPORT_ETH_ADDR(),\n- .extra_match = residence_check,\n- .drop = false,\n- .priority = 90,\n- .stage_hint = 0)\n+ };\n+ if (not all_ips_v6.is_empty()) {\n+ LogicalRouterNdFlowLB(.lr = router,\n+ .lrp = Some{lrp},\n+ .ip = \"{ \" ++ all_ips_v6.join(\", \") ++ \" }\",\n+ .mac = rEG_INPORT_ETH_ADDR(),\n+ .extra_match = residence_check,\n+ .stage_hint = 0)\n }\n }\n }\ndiff --git a/tests/ovn-northd.at b/tests/ovn-northd.at\nindex 11886b94e..8200eb655 100644\n--- a/tests/ovn-northd.at\n+++ b/tests/ovn-northd.at\n@@ -1707,13 +1707,10 @@ match=(inport == \"lrp\" && arp.op == 1 && arp.tpa == { 192.168.2.1, 192.168.2.4,\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp\" && ip6.dst == {fe80::200:ff:fe00:1, ff02::1:ff00:1} && nd_ns && nd.target == fe80::200:ff:fe00:1), dnl\n-action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:1; nd.target = fe80::200:ff:fe00:1; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp\" && nd_ns && nd.target == fe80::200:ff:fe00:101:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:101:8080; nd.target = fe80::200:ff:fe00:101:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n- table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp\" && nd_ns && nd.target == fe80::200:ff:fe00:102:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:102:8080; nd.target = fe80::200:ff:fe00:102:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+match=(inport == \"lrp\" && nd_ns && nd.target == { fe80::200:ff:fe00:101:8080, fe80::200:ff:fe00:102:8080 }), dnl\n+action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp-public\" && arp.op == 1 && arp.tpa == 43.43.43.1 && arp.spa == 43.43.43.0/24), dnl\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n@@ -1722,13 +1719,10 @@ match=(inport == \"lrp-public\" && arp.op == 1 && arp.tpa == { 192.168.2.1, 192.16\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp-public\" && ip6.dst == {fe80::200:ff:fe00:100, ff02::1:ff00:100} && nd_ns && nd.target == fe80::200:ff:fe00:100), dnl\n-action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:100; nd.target = fe80::200:ff:fe00:100; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n- table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp-public\" && nd_ns && nd.target == fe80::200:ff:fe00:101:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:101:8080; nd.target = fe80::200:ff:fe00:101:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp-public\" && nd_ns && nd.target == fe80::200:ff:fe00:102:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:102:8080; nd.target = fe80::200:ff:fe00:102:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+match=(inport == \"lrp-public\" && nd_ns && nd.target == { fe80::200:ff:fe00:101:8080, fe80::200:ff:fe00:102:8080 }), dnl\n+action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n ])\n \n # xreg0[0..47] isn't used anywhere else.\n@@ -1782,13 +1776,10 @@ match=(inport == \"lrp\" && arp.op == 1 && arp.tpa == { 192.168.2.1, 192.168.2.4,\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp\" && ip6.dst == {fe80::200:ff:fe00:1, ff02::1:ff00:1} && nd_ns && nd.target == fe80::200:ff:fe00:1), dnl\n-action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:1; nd.target = fe80::200:ff:fe00:1; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp\" && nd_ns && nd.target == fe80::200:ff:fe00:101:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:101:8080; nd.target = fe80::200:ff:fe00:101:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n- table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp\" && nd_ns && nd.target == fe80::200:ff:fe00:102:8080), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:102:8080; nd.target = fe80::200:ff:fe00:102:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+match=(inport == \"lrp\" && nd_ns && nd.target == { fe80::200:ff:fe00:101:8080, fe80::200:ff:fe00:102:8080 }), dnl\n+action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp-public\" && arp.op == 1 && arp.tpa == 43.43.43.1 && arp.spa == 43.43.43.0/24), dnl\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n@@ -1797,13 +1788,10 @@ match=(inport == \"lrp-public\" && arp.op == 1 && arp.tpa == { 192.168.2.1, 192.16\n action=(eth.dst = eth.src; eth.src = xreg0[[0..47]]; arp.op = 2; /* ARP reply */ arp.tha = arp.sha; arp.sha = xreg0[[0..47]]; arp.tpa <-> arp.spa; outport = inport; flags.loopback = 1; output;)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n match=(inport == \"lrp-public\" && ip6.dst == {fe80::200:ff:fe00:100, ff02::1:ff00:100} && nd_ns && nd.target == fe80::200:ff:fe00:100 && is_chassis_resident(\"cr-lrp-public\")), dnl\n-action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:100; nd.target = fe80::200:ff:fe00:100; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n- table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp-public\" && nd_ns && nd.target == fe80::200:ff:fe00:101:8080 && is_chassis_resident(\"cr-lrp-public\")), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:101:8080; nd.target = fe80::200:ff:fe00:101:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+action=(nd_na_router { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n table=3 (lr_in_ip_input ), priority=90 , dnl\n-match=(inport == \"lrp-public\" && nd_ns && nd.target == fe80::200:ff:fe00:102:8080 && is_chassis_resident(\"cr-lrp-public\")), dnl\n-action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = fe80::200:ff:fe00:102:8080; nd.target = fe80::200:ff:fe00:102:8080; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n+match=(inport == \"lrp-public\" && nd_ns && nd.target == { fe80::200:ff:fe00:101:8080, fe80::200:ff:fe00:102:8080 } && is_chassis_resident(\"cr-lrp-public\")), dnl\n+action=(nd_na { eth.src = xreg0[[0..47]]; ip6.src = nd.target; nd.tll = xreg0[[0..47]]; outport = inport; flags.loopback = 1; output; };)\n ])\n \n # Priority 91 drop flows (per distributed gw port), if port is not resident.\n", "prefixes": [ "ovs-dev", "v3" ] }{ "id": 1526189, "url": "