[ovs-dev] [PATCH v2] ovn-vtep: fix arping from vtep-gw physical port
Darrell Ball
dlu998 at gmail.com
Fri Sep 30 03:26:11 UTC 2016
On Thu, Sep 29, 2016 at 7:31 PM, Ramu Ramamurthy <ramu.ramamurthy at gmail.com>
wrote:
> > Hello Ramu
> >
> > Can you describe your configuration for this test failure when logical
> > switch
> > arp responders are skipped for logical switch "router type" ports ?
> > I know the existing OVN tests (both system and non-system) pass either
> way.
> >
> > Thanks Darrell
> >
>
> There is no test that failed. But, I found that when a VM boots, and
> gets dhcp-ip,
> it pings the default-gw IP address, and for this it arps the
> gateway-ip. That arp
> hits the arp-responder flows for the router-port.
>
There is a separate arp responder for logical-router-ports in the logical
router pipeline
/* ARP reply. These flows reply to ARP requests for the router's
own
* IP address. */
for (int i = 0; i < op->lrp_networks.n_ipv4_addrs; i++) {
ds_clear(&match);
ds_put_format(&match,
"inport == %s && arp.tpa == %s && arp.op == 1",
op->json_key,
op->lrp_networks.ipv4_addrs[i].addr_s);
ds_clear(&actions);
ds_put_format(&actions,
"eth.dst = eth.src; "
"eth.src = %s; "
"arp.op = 2; /* ARP reply */ "
"arp.tha = arp.sha; "
"arp.sha = %s; "
"arp.tpa = arp.spa; "
"arp.spa = %s; "
"outport = %s; "
"flags.loopback = 1; "
"output;",
op->lrp_networks.ea_s,
op->lrp_networks.ea_s,
op->lrp_networks.ipv4_addrs[i].addr_s,
op->json_key);
ovn_lflow_add(lflows, op->od, S_ROUTER_IN_IP_INPUT, 90,
ds_cstr(&match), ds_cstr(&actions));
}
could it be that you are hitting this type of arp responder rather than the
one for the logical switch
datapath "router type" arp responder ?
/* Ingress table 9: ARP/ND responder, reply for known IPs.
* (priority 50). */
HMAP_FOR_EACH (op, key_node, ports) {
if (!op->nbsp) {
continue;
}
/*
* Add ARP/ND reply flows if either the
* - port is up or
* - port type is router
*/
if (!lsp_is_up(op->nbsp) && strcmp(op->nbsp->type, "router")) {
continue;
}
for (size_t i = 0; i < op->n_lsp_addrs; i++) {
for (size_t j = 0; j < op->lsp_addrs[i].n_ipv4_addrs; j++) {
ds_clear(&match);
ds_put_format(&match, "arp.tpa == %s && arp.op == 1",
op->lsp_addrs[i].ipv4_addrs[j].addr_s);
ds_clear(&actions);
ds_put_format(&actions,
"eth.dst = eth.src; "
"eth.src = %s; "
"arp.op = 2; /* ARP reply */ "
"arp.tha = arp.sha; "
"arp.sha = %s; "
"arp.tpa = arp.spa; "
"arp.spa = %s; "
"outport = inport; "
"flags.loopback = 1; "
"output;",
op->lsp_addrs[i].ea_s, op->lsp_addrs[i].ea_s,
op->lsp_addrs[i].ipv4_addrs[j].addr_s);
ovn_lflow_add(lflows, op->od, S_SWITCH_IN_ARP_ND_RSP, 50,
ds_cstr(&match), ds_cstr(&actions));
}
More information about the dev
mailing list