Skip to content

Commit

Permalink
Revert "Manage ARP process locally in a DVR scenario"
Browse files Browse the repository at this point in the history
This reverts commit c0bf32d.

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Han Zhou <hzhou@ovn.org>
  • Loading branch information
LorenzoBianconi authored and hzhou8 committed May 26, 2020
1 parent 9fe1ffa commit d9ed450
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 101 deletions.
37 changes: 2 additions & 35 deletions northd/ovn-northd.8.xml
Expand Up @@ -2484,46 +2484,13 @@ output;
</p>
</li>

<li>
<p>
For distributed logical routers where one of the logical router ports
specifies a <code>redirect-chassis</code>, a priority-400 logical
flow for each <code>dnat_and_snat</code> NAT rules configured.
These flows will allow to properly forward traffic to the external
connections if available and avoid sending it through the tunnel.
Assuming the following NAT rule has been configured:
</p>

<pre>
external_ip = <var>A</var>;
external_mac = <var>B</var>;
logical_ip = <var>C</var>;
</pre>

<p>
the following action will be applied:
</p>

<pre>
ip.ttl--;
reg0 = <var>ip.dst</var>;
reg1 = <var>A</var>;
eth.src = <var>B</var>;
outport = <var>router-port</var>;
next;
</pre>

</li>

<li>
<p>
IPv4 routing table. For each route to IPv4 network <var>N</var> with
netmask <var>M</var>, on router port <var>P</var> with IP address
<var>A</var> and Ethernet
address <var>E</var>, a logical flow with match <code>ip4.dst ==
<var>N</var>/<var>M</var></code>, whose priority is <code>400</code>
+ the number of 1-bits in <var>M</var> if the router port is not a
distributed gateway port, else the priority is the number of
<var>N</var>/<var>M</var></code>, whose priority is the number of
1-bits in <var>M</var>, has the following actions:
</p>

Expand Down Expand Up @@ -2910,7 +2877,7 @@ icmp4 {
<ul>
<li>
For each NAT rule in the OVN Northbound database that can
be handled in a distributed manner, a priority-200 logical
be handled in a distributed manner, a priority-100 logical
flow with match <code>ip4.src == <var>B</var> &amp;&amp;
outport == <var>GW</var></code>, where <var>GW</var> is
the logical router distributed gateway port, with actions
Expand Down
53 changes: 1 addition & 52 deletions northd/ovn-northd.c
Expand Up @@ -7125,8 +7125,6 @@ build_routing_policy_flow(struct hmap *lflows, struct ovn_datapath *od,
ds_destroy(&actions);
}

/* default logical flow prioriry for distributed routes */
#define DROUTE_PRIO 400
struct parsed_route {
struct ovs_list list_node;
struct v46_ip prefix;
Expand Down Expand Up @@ -7514,40 +7512,6 @@ build_ecmp_route_flow(struct hmap *lflows, struct ovn_datapath *od,
ds_destroy(&actions);
}

static void
add_distributed_routes(struct hmap *lflows, struct ovn_datapath *od)
{
struct ds actions = DS_EMPTY_INITIALIZER;
struct ds match = DS_EMPTY_INITIALIZER;

for (size_t i = 0; i < od->nbr->n_nat; i++) {
const struct nbrec_nat *nat = od->nbr->nat[i];

if (strcmp(nat->type, "dnat_and_snat") ||
!nat->external_mac) {
continue;
}

bool is_ipv4 = strchr(nat->logical_ip, '.') ? true : false;
ds_put_format(&match, "ip%s.src == %s && is_chassis_resident(\"%s\")",
is_ipv4 ? "4" : "6", nat->logical_ip,
nat->logical_port);
char *prefix = is_ipv4 ? "" : "xx";
ds_put_format(&actions, "outport = %s; eth.src = %s; "
"%sreg0 = ip%s.dst; %sreg1 = %s; next;",
od->l3dgw_port->json_key, nat->external_mac,
prefix, is_ipv4 ? "4" : "6",
prefix, nat->external_ip);
ovn_lflow_add(lflows, od, S_ROUTER_IN_IP_ROUTING, DROUTE_PRIO,
ds_cstr(&match), ds_cstr(&actions));
ds_clear(&match);
ds_clear(&actions);
}

ds_destroy(&actions);
ds_destroy(&match);
}

static void
add_route(struct hmap *lflows, const struct ovn_port *op,
const char *lrp_addr_s, const char *network_s, int plen,
Expand All @@ -7569,12 +7533,6 @@ add_route(struct hmap *lflows, const struct ovn_port *op,
}
build_route_match(op_inport, network_s, plen, is_src_route, is_ipv4,
&match, &priority);
/* traffic for internal IPs of logical switch ports must be sent to
* the gw controller through the overlay tunnels
*/
if (op->nbrp && !op->nbrp->n_gateway_chassis) {
priority += DROUTE_PRIO;
}

struct ds actions = DS_EMPTY_INITIALIZER;
ds_put_format(&actions, "ip.ttl--; "REG_ECMP_GROUP_ID" = 0; %sreg0 = ",
Expand Down Expand Up @@ -9231,7 +9189,7 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
nat->logical_ip,
od->l3dgw_port->json_key);
ovn_lflow_add_with_hint(lflows, od, S_ROUTER_IN_GW_REDIRECT,
200, ds_cstr(&match), "next;",
100, ds_cstr(&match), "next;",
&nat->header_);
}

Expand Down Expand Up @@ -9537,15 +9495,6 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
ovn_lflow_add(lflows, od, S_ROUTER_IN_ND_RA_RESPONSE, 0, "1", "next;");
}

/* Logical router ingress table IP_ROUTING - IP routing for distributed
* logical router
*/
HMAP_FOR_EACH (od, key_node, datapaths) {
if (od->nbr && od->l3dgw_port) {
add_distributed_routes(lflows, od);
}
}

/* Logical router ingress table IP_ROUTING & IP_ROUTING_ECMP: IP Routing.
*
* A packet that arrives at this table is an IP packet that should be
Expand Down
14 changes: 0 additions & 14 deletions tests/ovn.at
Expand Up @@ -10141,20 +10141,6 @@ AT_CHECK([as hv3 ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=p
OVS_WAIT_UNTIL([test 1 = `as hv3 ovs-vsctl show | \
grep "Port patch-br-int-to-ln_port" | wc -l`])

AT_CHECK([test 1 = `ovn-sbctl dump-flows lr0 | grep lr_in_ip_routing | \
grep "ip4.src == 10.0.0.3 && is_chassis_resident(\"foo1\")" -c`])
AT_CHECK([test 1 = `ovn-sbctl dump-flows lr0 | grep lr_in_ip_routing | \
grep "ip4.src == 10.0.0.4 && is_chassis_resident(\"foo2\")" -c`])

key=`ovn-sbctl --bare --columns tunnel_key list datapath_Binding lr0`
# Check that the OVS flows appear for the dnat_and_snat entries in
# lr_in_ip_routing table.
OVS_WAIT_UNTIL([test 1 = `as hv3 ovs-ofctl dump-flows br-int table=17 | \
grep "priority=400,ip,metadata=0x$key,nw_src=10.0.0.3" -c`])

OVS_WAIT_UNTIL([test 1 = `as hv3 ovs-ofctl dump-flows br-int table=17 | \
grep "priority=400,ip,metadata=0x$key,nw_src=10.0.0.4" -c`])

# Re-add nat-addresses option
ovn-nbctl lsp-set-options lrp0-rp router-port=lrp0 nat-addresses="router"

Expand Down

0 comments on commit d9ed450

Please sign in to comment.