On 11/15/2015 02:11 AM, Han Zhou wrote: > For lswitch ports with known IPs, ARP is responded directly from > local ovn-controller to avoid flooding. > > Signed-off-by: Han Zhou <zhou...@gmail.com> > --- > ovn/northd/ovn-northd.c | 39 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c > index 8fe0c2c..c072224 100644 > --- a/ovn/northd/ovn-northd.c > +++ b/ovn/northd/ovn-northd.c > @@ -1151,6 +1151,45 @@ build_lswitch_flows(struct hmap *datapaths, struct > hmap *ports, Looks like there is a word wrap here, so I couldn't apply the patch using git-am. > ds_destroy(&match); > } > > + /* Ingress table 3: Destination lookup, ARP reply for known IPs. > + * (priority 150). */ > + HMAP_FOR_EACH (op, key_node, ports) { > + if (!op->nbs) { > + continue; > + } > + > + for (size_t i = 0; i < op->nbs->n_addresses; i++) { > + struct eth_addr ea; > + ovs_be32 ip; > + > + if (ovs_scan(op->nbs->addresses[i], > + ETH_ADDR_SCAN_FMT" "IP_SCAN_FMT, > + ETH_ADDR_SCAN_ARGS(ea), IP_SCAN_ARGS(&ip))) { > + char *match = xasprintf( > + "arp.tpa == "IP_FMT" && arp.op == 1", IP_ARGS(ip)); > + char *actions = xasprintf( > + "eth.dst = eth.src; " > + "eth.src = "ETH_ADDR_FMT"; " > + "arp.op = 2; /* ARP reply */ " > + "arp.tha = arp.sha; " > + "arp.sha = "ETH_ADDR_FMT"; " > + "arp.tpa = arp.spa; " > + "arp.spa = "IP_FMT"; " > + "outport = inport; " > + "inport = \"\"; /* Allow sending out inport. */ " > + "output;", > + ETH_ADDR_ARGS(ea), > + ETH_ADDR_ARGS(ea), > + IP_ARGS(ip), > + op->json_key); op->json(key) is not required as there are only 3 formatters to xasprintf.
I tested this patch and it is working as expected. Just one comment though - When I create a logical port which is still not bound to any vif (ie. just do "neutron port-create") and try to do arping to the ip address of this port, I get an arp reply, which ideally should not happen. Not sure if it is a big concern though. > + ovn_lflow_add(lflows, op->od, S_SWITCH_IN_L2_LKUP, 150, > + match, actions); > + free(match); > + free(actions); > + } > + } > + } > + > /* Ingress table 3: Destination lookup, broadcast and multicast > handling > * (priority 100). */ > HMAP_FOR_EACH (op, key_node, ports) { Thanks Numan _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev