I am yet to go through the full patch, but one thing that is missing is, the flows have to be deleted using ofctrl_remove_flows
> On Aug 18, 2016, at 8:46 AM, nickcooper-zhangtonghao > <nickcooper-zhangtong...@opencloud.tech> wrote: > > Add "timeout" column in MAC_Binding to support cache aging. > The ARP/NA cache expiring will be removed and logical router > send ARP/NS to get IP-MAC binding. > > Signed-off-by: nickcooper-zhangtonghao > <nickcooper-zhangtong...@opencloud.tech> > --- > ovn/controller/pinctrl.c | 25 ++++++++++++++++++------- > ovn/ovn-sb.ovsschema | 3 ++- > ovn/ovn-sb.xml | 5 +++++ > 3 files changed, 25 insertions(+), 8 deletions(-) > > diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c > index 9728e12..fb8141b 100644 > --- a/ovn/controller/pinctrl.c > +++ b/ovn/controller/pinctrl.c > @@ -1011,7 +1011,7 @@ pinctrl_handle_put_mac_binding(const struct flow *md, > inet_ntop(AF_INET6, &ip6, ip_s, sizeof(ip_s)); > } > > - /* Check to see whether the corresponding ARP request exists in the > cache. > + /* Check to see whether the corresponding ARP/NS request exists in the > cache. > * If we don't find it, return directly. */ > bool update = pinctrl_find_delete_arp_request_cache(dp_key, port_key, > ip_s); > if (!update) { > @@ -1042,9 +1042,6 @@ run_put_mac_binding(struct controller_ctx *ctx, > const struct lport_index *lports, > const struct put_mac_binding *pmb) > { > - if (time_msec() > pmb->timestamp + 1000) { > - return; > - } > > /* Convert logical datapath and logical port key into lport. */ > const struct sbrec_port_binding *pb > @@ -1066,8 +1063,8 @@ run_put_mac_binding(struct controller_ctx *ctx, > * port. > * > * XXX This is not very efficient. */ > - const struct sbrec_mac_binding *b; > - SBREC_MAC_BINDING_FOR_EACH (b, ctx->ovnsb_idl) { > + const struct sbrec_mac_binding *b, *next; > + SBREC_MAC_BINDING_FOR_EACH_SAFE (b, next, ctx->ovnsb_idl) { > if (!strcmp(b->logical_port, pb->logical_port) > && !strcmp(b->ip, pmb->ip_s)) { > if (strcmp(b->mac, mac_string)) { > @@ -1082,6 +1079,10 @@ run_put_mac_binding(struct controller_ctx *ctx, > sbrec_mac_binding_set_logical_port(b, pb->logical_port); > sbrec_mac_binding_set_ip(b, pmb->ip_s); > sbrec_mac_binding_set_mac(b, mac_string); > + > + struct ds timeout = DS_EMPTY_INITIALIZER; > + ds_put_format(&timeout, "%lld", time_msec()); > + sbrec_mac_binding_set_timeout(b, ds_cstr(&timeout)); > sbrec_mac_binding_set_datapath(b, pb->datapath); > } > > @@ -1093,9 +1094,19 @@ run_put_mac_bindings(struct controller_ctx *ctx, > return; > } > > - /* The ARP request expiring will be remove.*/ > + /* The ARP request expiring will be removed.*/ > run_update_arp_request_cache(); > > + /* The IP-MAC binding expiring for this logical > + * port will be removed from the database. Expire time is > + * 15min*/ > + const struct sbrec_mac_binding *b, *next; > + SBREC_MAC_BINDING_FOR_EACH_SAFE (b, next, ctx->ovnsb_idl) { > + if (time_msec() > strtoll(b->timeout, NULL, 10) + 15*60000) { > + sbrec_mac_binding_delete(b); > + } > + } > + > const struct put_mac_binding *pmb; > HMAP_FOR_EACH (pmb, hmap_node, &put_mac_bindings) { > run_put_mac_binding(ctx, lports, pmb); > diff --git a/ovn/ovn-sb.ovsschema b/ovn/ovn-sb.ovsschema > index 8604b4e..e9a68eb 100644 > --- a/ovn/ovn-sb.ovsschema > +++ b/ovn/ovn-sb.ovsschema > @@ -1,7 +1,7 @@ > { > "name": "OVN_Southbound", > "version": "1.8.0", > - "cksum": "59582657 7376", > + "cksum": "413692163 7423", > "tables": { > "SB_Global": { > "columns": { > @@ -126,6 +126,7 @@ > "logical_port": {"type": "string"}, > "ip": {"type": "string"}, > "mac": {"type": "string"}, > + "timeout": {"type": "string"}, > "datapath": {"type": {"key": {"type": "uuid", > "refTable": > "Datapath_Binding"}}}}, > "indexes": [["logical_port", "ip"]], > diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml > index 0829cbc..233ea30 100644 > --- a/ovn/ovn-sb.xml > +++ b/ovn/ovn-sb.xml > @@ -1960,6 +1960,11 @@ tcp.flags = RST; > <column name="mac"> > The Ethernet address to which the IP is bound. > </column> > + > + <column name="timeout"> > + The ARP/ND cache timeout. > + </column> > + > <column name="datapath"> > The logical datapath to which the logical port belongs. > </column> > -- > 1.8.3.1 > > > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev