get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1554666/
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1554666,
    "url": "http://patchwork.ozlabs.org/api/patches/1554666/",
    "web_url": "http://patchwork.ozlabs.org/project/ovn/patch/20211113094353.17690-3-odivlad@gmail.com/",
    "project": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/projects/68/",
        "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": "<20211113094353.17690-3-odivlad@gmail.com>",
    "list_archive_url": null,
    "date": "2021-11-13T09:43:50",
    "name": "[ovs-dev,v8,2/5] northd: make connected routes have higher priority than static",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2798159eaf731c9443c2fabc9b38858c851d1a36",
    "submitter": {
        "id": 80943,
        "url": "http://patchwork.ozlabs.org/api/people/80943/",
        "name": "Vladislav Odintsov",
        "email": "odivlad@gmail.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ovn/patch/20211113094353.17690-3-odivlad@gmail.com/mbox/",
    "series": [
        {
            "id": 271845,
            "url": "http://patchwork.ozlabs.org/api/series/271845/",
            "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=271845",
            "date": "2021-11-13T09:43:48",
            "name": "Add multiple routing tables support to Logical Routers",
            "version": 8,
            "mbox": "http://patchwork.ozlabs.org/series/271845/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1554666/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/1554666/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "bilbo.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20210112 header.b=HBrbFEQa;\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>)",
            "smtp2.osuosl.org (amavisd-new);\n dkim=pass (2048-bit key) header.d=gmail.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 bilbo.ozlabs.org (Postfix) with ESMTPS id 4HrrBn3llrz9sR4\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 13 Nov 2021 20:44:17 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 825EA60888;\n\tSat, 13 Nov 2021 09:44:11 +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 VM4R-wJnRGli; Sat, 13 Nov 2021 09:44:08 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 6029760769;\n\tSat, 13 Nov 2021 09:44:07 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 45090C002E;\n\tSat, 13 Nov 2021 09:44:07 +0000 (UTC)",
            "from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133])\n by lists.linuxfoundation.org (Postfix) with ESMTP id EBB3BC002E\n for <dev@openvswitch.org>; Sat, 13 Nov 2021 09:44:04 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp2.osuosl.org (Postfix) with ESMTP id C628340212\n for <dev@openvswitch.org>; Sat, 13 Nov 2021 09:44:04 +0000 (UTC)",
            "from smtp2.osuosl.org ([127.0.0.1])\n by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id xX-dOLMlysFg for <dev@openvswitch.org>;\n Sat, 13 Nov 2021 09:44:03 +0000 (UTC)",
            "from mail-lj1-x235.google.com (mail-lj1-x235.google.com\n [IPv6:2a00:1450:4864:20::235])\n by smtp2.osuosl.org (Postfix) with ESMTPS id 1A9164013B\n for <dev@openvswitch.org>; Sat, 13 Nov 2021 09:44:03 +0000 (UTC)",
            "by mail-lj1-x235.google.com with SMTP id e11so23380878ljo.13\n for <dev@openvswitch.org>; Sat, 13 Nov 2021 01:44:02 -0800 (PST)",
            "from localhost.localdomain (109-252-131-59.dynamic.spd-mgts.ru.\n [109.252.131.59])\n by smtp.gmail.com with ESMTPSA id h1sm818725lfu.277.2021.11.13.01.44.00\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Sat, 13 Nov 2021 01:44:00 -0800 (PST)"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "whitelisted by SQLgrey-1.8.0",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=JZmGTb9DB9rEl62bS2E1nGXi1VkXNzOAdDCm69FbILs=;\n b=HBrbFEQaYKTGSrRiljodpySfD2913jvFliX3XtZTW6HhrWm8YbWZe1jVR75FMR87fF\n JHhQyqQu/SbwEN1Z3WkcfJYCUZALx5QyINPtqMm4lvUu0dCPvV7z9vPTQDbTDqhzsGMU\n wMLWf2+DxJmgVTUVkwgQ2YZZuSYgrluQ8dIDP26dqsSQWbmkyOciIryqo8xJhvYUJ1mw\n nhUmMXqfigUD0NcVvv0lJsVx37dzJ/IuhCfrpZESOOVaWv1hEQaxd/VSl/ysnt7P94gA\n arTkpqL7V+jq700nOFCuE/FZDW/qXHNNiZVXC7Bbey1K1P0SfdUVioRN//S7/3TYnvtR\n x21g==",
        "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:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=JZmGTb9DB9rEl62bS2E1nGXi1VkXNzOAdDCm69FbILs=;\n b=UyFrqwJycrYWqF9DTINNHVti/GLwZcuzmqYeQlgf8Q/98vNYZQwPUayYYvPnAD1lH5\n nF0PU4R06gi7LvQORfcM+zK4eI7DmbRDRnkgiu6WTo/H5qVsbzRPNTjozRKQTFP/dUwk\n gjxY3KIXyBnWH4AlE0T4s6/EGk7zrVWvchC4ysQhkyk85pb1b5gJeOORAl0ypZG3xzKD\n ZIUlT3e1o3oFRzRCQrDLzGxXZjRJoYyJisWuRIYgQ+FqUR2XwpKIpk3zXI+kr7LmSLot\n kkvpsHPStXApUf3AKhXUmzuz4f2511ljSZ5Yy00zscTrxL88Cqfd80nEonW86XHWZAm9\n 7Wvw==",
        "X-Gm-Message-State": "AOAM530JSFX20kcG3CpVA5XKjWPwuGOgpAtQd2+J9ZoxJZMZmBuULrhX\n Lm7VlkWqZ9vOAMIXqlvSPbEd3/U5ZkjXRQ==",
        "X-Google-Smtp-Source": "\n ABdhPJwPnIm4bSLnjalcdRSuu4VAOZz+6BEZYoTNXnFvMio/v/Z+KHqexblXf0DXwCgsjeyBgGz3GQ==",
        "X-Received": "by 2002:a05:651c:106a:: with SMTP id\n y10mr21954951ljm.455.1636796640590;\n Sat, 13 Nov 2021 01:44:00 -0800 (PST)",
        "From": "Vladislav Odintsov <odivlad@gmail.com>",
        "To": "dev@openvswitch.org",
        "Date": "Sat, 13 Nov 2021 12:43:50 +0300",
        "Message-Id": "<20211113094353.17690-3-odivlad@gmail.com>",
        "X-Mailer": "git-send-email 2.30.0",
        "In-Reply-To": "<20211113094353.17690-1-odivlad@gmail.com>",
        "References": "<20211113094353.17690-1-odivlad@gmail.com>",
        "MIME-Version": "1.0",
        "Cc": "Vladislav Odintsov <odivlad@gmail.com>",
        "Subject": "[ovs-dev] [PATCH ovn v8 2/5] northd: make connected routes have\n\thigher priority than static",
        "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": "With this patch routes to connected networks have higher\npriority than static routes with same ip_prefix.\n\nThis brings commonly-used behaviour for routes lookup order:\n1: longest prefix match\n2: metric\n\nThe metric has next lookup order:\n1: connected routes\n2: static routes\n\nEarlier static and connected routes with same ip_prefix had\nthe same priority, so it was impossible to predict which one\nis used for routing decision.\n\nEach route's prefix length has its own 'slot' in lflow prios.\nNow prefix length space is calculated using next information:\nto calculate route's priority prefixlen multiplied by 3\n+ route origin offset (0 - source-based route; 1 - directly-\nconnected route; 2 - static route).\n\nAlso, enlarge prio for generic records in lr_in_ip_routing stage\nby 10000.\n\nSigned-off-by: Vladislav Odintsov <odivlad@gmail.com>\n---\n northd/northd.c         | 50 ++++++++++++++++++++++++++++-------------\n northd/ovn-northd.8.xml | 12 +++++-----\n tests/ovn-northd.at     |  8 +++----\n 3 files changed, 45 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/northd/northd.c b/northd/northd.c\nindex 1e8a3457c..0d513f039 100644\n--- a/northd/northd.c\n+++ b/northd/northd.c\n@@ -305,6 +305,15 @@ enum ovn_stage {\n  *\n  */\n \n+/*\n+ * Route offsets implement logic to prioritize traffic for routes with\n+ * same ip_prefix values:\n+ *  -  connected route overrides static one;\n+ *  -  static route overrides connected route. */\n+#define ROUTE_PRIO_OFFSET_MULTIPLIER 3\n+#define ROUTE_PRIO_OFFSET_STATIC 1\n+#define ROUTE_PRIO_OFFSET_CONNECTED 2\n+\n /* Returns an \"enum ovn_stage\" built from the arguments. */\n static enum ovn_stage\n ovn_stage_build(enum ovn_datapath_type dp_type, enum ovn_pipeline pipeline,\n@@ -8782,6 +8791,7 @@ struct ecmp_groups_node {\n     struct in6_addr prefix;\n     unsigned int plen;\n     bool is_src_route;\n+    const char *origin;\n     uint16_t route_count;\n     struct ovs_list route_list; /* Contains ecmp_route_list_node */\n };\n@@ -8819,6 +8829,7 @@ ecmp_groups_add(struct hmap *ecmp_groups,\n     eg->prefix = route->prefix;\n     eg->plen = route->plen;\n     eg->is_src_route = route->is_src_route;\n+    eg->origin = smap_get_def(&route->route->options, \"origin\", \"\");\n     ovs_list_init(&eg->route_list);\n     ecmp_groups_add_route(eg, route);\n \n@@ -8919,19 +8930,20 @@ build_route_prefix_s(const struct in6_addr *prefix, unsigned int plen)\n static void\n build_route_match(const struct ovn_port *op_inport, const char *network_s,\n                   int plen, bool is_src_route, bool is_ipv4, struct ds *match,\n-                  uint16_t *priority)\n+                  uint16_t *priority, int ofs)\n {\n     const char *dir;\n     /* The priority here is calculated to implement longest-prefix-match\n      * routing. */\n     if (is_src_route) {\n         dir = \"src\";\n-        *priority = plen * 2;\n+        ofs = 0;\n     } else {\n         dir = \"dst\";\n-        *priority = (plen * 2) + 1;\n     }\n \n+    *priority = (plen * ROUTE_PRIO_OFFSET_MULTIPLIER) + ofs;\n+\n     if (op_inport) {\n         ds_put_format(match, \"inport == %s && \", op_inport->json_key);\n     }\n@@ -9073,7 +9085,7 @@ add_ecmp_symmetric_reply_flows(struct hmap *lflows,\n                   out_port->lrp_networks.ea_s,\n                   IN6_IS_ADDR_V4MAPPED(&route->prefix) ? \"\" : \"xx\",\n                   port_ip, out_port->json_key);\n-    ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING, 300,\n+    ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_IP_ROUTING, 10300,\n                            ds_cstr(&match), ds_cstr(&actions),\n                            &st_route->header_);\n \n@@ -9103,8 +9115,10 @@ build_ecmp_route_flow(struct hmap *lflows, struct ovn_datapath *od,\n     struct ds route_match = DS_EMPTY_INITIALIZER;\n \n     char *prefix_s = build_route_prefix_s(&eg->prefix, eg->plen);\n+    int ofs = !strcmp(eg->origin, ROUTE_ORIGIN_CONNECTED) ?\n+        ROUTE_PRIO_OFFSET_CONNECTED: ROUTE_PRIO_OFFSET_STATIC;\n     build_route_match(NULL, prefix_s, eg->plen, eg->is_src_route, is_ipv4,\n-                      &route_match, &priority);\n+                      &route_match, &priority, ofs);\n     free(prefix_s);\n \n     struct ds actions = DS_EMPTY_INITIALIZER;\n@@ -9180,7 +9194,7 @@ add_route(struct hmap *lflows, struct ovn_datapath *od,\n           const struct ovn_port *op, const char *lrp_addr_s,\n           const char *network_s, int plen, const char *gateway,\n           bool is_src_route, const struct ovsdb_idl_row *stage_hint,\n-          bool is_discard_route)\n+          bool is_discard_route, int ofs)\n {\n     bool is_ipv4 = strchr(network_s, '.') ? true : false;\n     struct ds match = DS_EMPTY_INITIALIZER;\n@@ -9196,7 +9210,7 @@ add_route(struct hmap *lflows, struct ovn_datapath *od,\n         }\n     }\n     build_route_match(op_inport, network_s, plen, is_src_route, is_ipv4,\n-                      &match, &priority);\n+                      &match, &priority, ofs);\n \n     struct ds common_actions = DS_EMPTY_INITIALIZER;\n     struct ds actions = DS_EMPTY_INITIALIZER;\n@@ -9256,10 +9270,15 @@ build_static_route_flow(struct hmap *lflows, struct ovn_datapath *od,\n         }\n     }\n \n+    int ofs = !strcmp(smap_get_def(&route->options, \"origin\", \"\"),\n+                      ROUTE_ORIGIN_CONNECTED) ? ROUTE_PRIO_OFFSET_CONNECTED\n+                                              : ROUTE_PRIO_OFFSET_STATIC;\n+\n     char *prefix_s = build_route_prefix_s(&route_->prefix, route_->plen);\n     add_route(lflows, route_->is_discard_route ? od : out_port->od, out_port,\n               lrp_addr_s, prefix_s, route_->plen, route->nexthop,\n-              route_->is_src_route, &route->header_, route_->is_discard_route);\n+              route_->is_src_route, &route->header_, route_->is_discard_route,\n+              ofs);\n \n     free(prefix_s);\n }\n@@ -10672,14 +10691,14 @@ build_ip_routing_flows_for_lrouter_port(\n             add_route(lflows, op->od, op, op->lrp_networks.ipv4_addrs[i].addr_s,\n                       op->lrp_networks.ipv4_addrs[i].network_s,\n                       op->lrp_networks.ipv4_addrs[i].plen, NULL, false,\n-                      &op->nbrp->header_, false);\n+                      &op->nbrp->header_, false, ROUTE_PRIO_OFFSET_CONNECTED);\n         }\n \n         for (int i = 0; i < op->lrp_networks.n_ipv6_addrs; i++) {\n             add_route(lflows, op->od, op, op->lrp_networks.ipv6_addrs[i].addr_s,\n                       op->lrp_networks.ipv6_addrs[i].network_s,\n                       op->lrp_networks.ipv6_addrs[i].plen, NULL, false,\n-                      &op->nbrp->header_, false);\n+                      &op->nbrp->header_, false, ROUTE_PRIO_OFFSET_CONNECTED);\n         }\n     } else if (lsp_is_router(op->nbsp)) {\n         struct ovn_port *peer = ovn_port_get_peer(ports, op);\n@@ -10702,7 +10721,8 @@ build_ip_routing_flows_for_lrouter_port(\n                               peer->lrp_networks.ipv4_addrs[0].addr_s,\n                               laddrs->ipv4_addrs[k].network_s,\n                               laddrs->ipv4_addrs[k].plen, NULL, false,\n-                              &peer->nbrp->header_, false);\n+                              &peer->nbrp->header_, false,\n+                              ROUTE_PRIO_OFFSET_CONNECTED);\n                 }\n             }\n         }\n@@ -10773,7 +10793,7 @@ build_mcast_lookup_flows_for_lrouter(\n         /* Drop IPv6 multicast traffic that shouldn't be forwarded,\n          * i.e., router solicitation and router advertisement.\n          */\n-        ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 550,\n+        ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 10550,\n                       \"nd_rs || nd_ra\", \"drop;\");\n         if (!od->mcast_info.rtr.relay) {\n             return;\n@@ -10801,7 +10821,7 @@ build_mcast_lookup_flows_for_lrouter(\n             }\n             ds_put_format(actions, \"outport = \\\"%s\\\"; ip.ttl--; next;\",\n                           igmp_group->mcgroup.name);\n-            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 500,\n+            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 10500,\n                           ds_cstr(match), ds_cstr(actions));\n         }\n \n@@ -10809,7 +10829,7 @@ build_mcast_lookup_flows_for_lrouter(\n          * ports. Otherwise drop any multicast traffic.\n          */\n         if (od->mcast_info.rtr.flood_static) {\n-            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 450,\n+            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 10450,\n                           \"ip4.mcast || ip6.mcast\",\n                           \"clone { \"\n                                 \"outport = \\\"\"MC_STATIC\"\\\"; \"\n@@ -10817,7 +10837,7 @@ build_mcast_lookup_flows_for_lrouter(\n                                 \"next; \"\n                           \"};\");\n         } else {\n-            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 450,\n+            ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, 10450,\n                           \"ip4.mcast || ip6.mcast\", \"drop;\");\n         }\n     }\ndiff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml\nindex fb67395e3..4f3a9d5e3 100644\n--- a/northd/ovn-northd.8.xml\n+++ b/northd/ovn-northd.8.xml\n@@ -2945,12 +2945,12 @@ icmp6 {\n \n     <p>\n       If ECMP routes with symmetric reply are configured in the\n-      <code>OVN_Northbound</code> database for a gateway router, a priority-300\n-      flow is added for each router port on which symmetric replies are\n-      configured. The matching logic for these ports essentially reverses the\n-      configured logic of the ECMP route. So for instance, a route with a\n-      destination routing policy will instead match if the source IP address\n-      matches the static route's prefix. The flow uses the action\n+      <code>OVN_Northbound</code> database for a gateway router, a\n+      priority-10300 flow is added for each router port on which symmetric\n+      replies are configured. The matching logic for these ports essentially\n+      reverses the configured logic of the ECMP route. So for instance, a route\n+      with a destination routing policy will instead match if the source IP\n+      address matches the static route's prefix. The flow uses the action\n       <code>ct_next</code> to send IP packets to the connection tracker for\n       packet de-fragmentation and tracking before sending it to the next table.\n     </p>\ndiff --git a/tests/ovn-northd.at b/tests/ovn-northd.at\nindex 85b47a18f..3c1a97f73 100644\n--- a/tests/ovn-northd.at\n+++ b/tests/ovn-northd.at\n@@ -5430,7 +5430,7 @@ check ovn-nbctl --wait=sb --ecmp-symmetric-reply lr-route-add lr0 1.0.0.1 192.16\n \n ovn-sbctl dump-flows lr0 > lr0flows\n AT_CHECK([grep -e \"lr_in_ip_routing.*select\" lr0flows | sed 's/table=../table=??/' | sort], [0], [dnl\n-  table=??(lr_in_ip_routing   ), priority=65   , match=(ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);)\n+  table=??(lr_in_ip_routing   ), priority=97   , match=(ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);)\n ])\n AT_CHECK([grep -e \"lr_in_ip_routing_ecmp\" lr0flows | sed 's/192\\.168\\.0\\..0/192.168.0.??/' | sed 's/table=../table=??/' | sort], [0], [dnl\n   table=??(lr_in_ip_routing_ecmp), priority=100  , match=(reg8[[0..15]] == 1 && reg8[[16..31]] == 1), action=(reg0 = 192.168.0.??; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; next;)\n@@ -5443,7 +5443,7 @@ check ovn-nbctl --wait=sb --ecmp-symmetric-reply lr-route-add lr0 1.0.0.1 192.16\n \n ovn-sbctl dump-flows lr0 > lr0flows\n AT_CHECK([grep -e \"lr_in_ip_routing.*select\" lr0flows | sed 's/table=../table=??/' | sort], [0], [dnl\n-  table=??(lr_in_ip_routing   ), priority=65   , match=(ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);)\n+  table=??(lr_in_ip_routing   ), priority=97   , match=(ip4.dst == 1.0.0.1/32), action=(ip.ttl--; flags.loopback = 1; reg8[[0..15]] = 1; reg8[[16..31]] = select(1, 2);)\n ])\n AT_CHECK([grep -e \"lr_in_ip_routing_ecmp\" lr0flows | sed 's/192\\.168\\.0\\..0/192.168.0.??/' | sed 's/table=../table=??/' | sort], [0], [dnl\n   table=??(lr_in_ip_routing_ecmp), priority=100  , match=(reg8[[0..15]] == 1 && reg8[[16..31]] == 1), action=(reg0 = 192.168.0.??; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; next;)\n@@ -5458,14 +5458,14 @@ check ovn-nbctl --wait=sb lr-route-add lr0 1.0.0.0/24 192.168.0.10\n ovn-sbctl dump-flows lr0 > lr0flows\n \n AT_CHECK([grep -e \"lr_in_ip_routing.*192.168.0.10\" lr0flows | sed 's/table=../table=??/' | sort], [0], [dnl\n-  table=??(lr_in_ip_routing   ), priority=49   , match=(ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; flags.loopback = 1; next;)\n+  table=??(lr_in_ip_routing   ), priority=73   , match=(ip4.dst == 1.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = 192.168.0.10; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; flags.loopback = 1; next;)\n ])\n \n check ovn-nbctl --wait=sb lr-route-add lr0 2.0.0.0/24 lr0-public\n \n ovn-sbctl dump-flows lr0 > lr0flows\n AT_CHECK([grep -e \"lr_in_ip_routing.*2.0.0.0\" lr0flows | sed 's/table=../table=??/' | sort], [0], [dnl\n-  table=??(lr_in_ip_routing   ), priority=49   , match=(ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; flags.loopback = 1; next;)\n+  table=??(lr_in_ip_routing   ), priority=73   , match=(ip4.dst == 2.0.0.0/24), action=(ip.ttl--; reg8[[0..15]] = 0; reg0 = ip4.dst; reg1 = 192.168.0.1; eth.src = 00:00:20:20:12:13; outport = \"lr0-public\"; flags.loopback = 1; next;)\n ])\n \n AT_CLEANUP\n",
    "prefixes": [
        "ovs-dev",
        "v8",
        "2/5"
    ]
}