Looks good to me, Jarno
Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> > On Nov 21, 2014, at 12:52 PM, Joe Stringer <joestrin...@nicira.com> wrote: > > Jarno, do you have time to look at this? > >> On 13 November 2014 11:17, Joe Stringer <joestrin...@nicira.com> wrote: >> This patch adds a new 'ovs-appctl revalidator/purge' command which >> flushes all flows from all datapaths, and updates the revalidator >> udpif_key cache at the same time. >> >> Update the ofproto-dpif fragment tests which may fail when ukeys are >> created from handler threads. >> >> Signed-off-by: Joe Stringer <joestrin...@nicira.com> >> CC: Jarno Rajahalme <jrajaha...@nicira.com> >> --- >> v10: First post. >> --- >> ofproto/ofproto-dpif-upcall.c | 20 ++++++++++++++++++++ >> tests/ofproto-dpif.at | 8 ++++---- >> 2 files changed, 24 insertions(+), 4 deletions(-) >> >> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c >> index 1f9c484..eba9816 100644 >> --- a/ofproto/ofproto-dpif-upcall.c >> +++ b/ofproto/ofproto-dpif-upcall.c >> @@ -234,6 +234,8 @@ static void upcall_unixctl_set_flow_limit(struct >> unixctl_conn *conn, int argc, >> const char *argv[], void *aux); >> static void upcall_unixctl_dump_wait(struct unixctl_conn *conn, int argc, >> const char *argv[], void *aux); >> +static void upcall_unixctl_purge(struct unixctl_conn *conn, int argc, >> + const char *argv[], void *aux); >> >> static struct udpif_key *ukey_create(const struct nlattr *key, size_t >> key_len, >> long long int used); >> @@ -273,6 +275,8 @@ udpif_create(struct dpif_backer *backer, struct dpif >> *dpif) >> upcall_unixctl_set_flow_limit, NULL); >> unixctl_command_register("revalidator/wait", "", 0, 0, >> upcall_unixctl_dump_wait, NULL); >> + unixctl_command_register("revalidator/purge", "", 0, 0, >> + upcall_unixctl_purge, NULL); >> ovsthread_once_done(&once); >> } >> >> @@ -1768,3 +1772,19 @@ upcall_unixctl_dump_wait(struct unixctl_conn *conn, >> unixctl_command_reply_error(conn, "can't wait on multiple udpifs."); >> } >> } >> + >> +static void >> +upcall_unixctl_purge(struct unixctl_conn *conn, int argc OVS_UNUSED, >> + const char *argv[] OVS_UNUSED, void *aux OVS_UNUSED) >> +{ >> + struct udpif *udpif; >> + >> + LIST_FOR_EACH (udpif, list_node, &all_udpifs) { >> + int n; >> + >> + for (n = 0; n < udpif->n_revalidators; n++) { >> + revalidator_purge(&udpif->revalidators[n]); >> + } >> + } >> + unixctl_command_reply(conn, ""); >> +} >> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at >> index 5349386..eb4d4cb 100644 >> --- a/tests/ofproto-dpif.at >> +++ b/tests/ofproto-dpif.at >> @@ -3410,7 +3410,7 @@ >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), >> packets:0, b >> >> mode=drop >> >> -AT_CHECK([ovs-appctl dpctl/del-flows], [0]) >> +AT_CHECK([ovs-appctl revalidator/purge], [0]) >> AT_CHECK([ovs-ofctl set-frags br0 $mode]) >> for type in no first later; do >> eval flow=\$${type}_flow >> @@ -3427,7 +3427,7 @@ >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(frag=later), packets:0, >> bytes:0, >> >> mode=nx-match >> >> -AT_CHECK([ovs-appctl dpctl/del-flows], [0]) >> +AT_CHECK([ovs-appctl revalidator/purge], [0]) >> AT_CHECK([ovs-ofctl set-frags br0 $mode]) >> for type in no first later; do >> eval flow=\$${type}_flow >> @@ -3513,7 +3513,7 @@ >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=33419 >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), >> packets:1, bytes:74, used:0.001s, actions:1 >> ]) >> >> -AT_CHECK([ovs-appctl dpctl/del-flows], [0]) >> +AT_CHECK([ovs-appctl revalidator/purge], [0]) >> AT_CHECK([ovs-ofctl set-frags br0 $mode]) >> for frag in 4000 6000 6008 4010; do >> printf "\n%s\n" "----$mode $frag truncated transport header -----" >> @@ -3527,7 +3527,7 @@ >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=first),tcp(src=0), >> p >> recirc_id(0),in_port(90),eth_type(0x0800),ipv4(proto=6,frag=later), >> packets:1, bytes:60, used:0.001s, actions:1 >> ]) >> >> -AT_CHECK([ovs-appctl dpctl/del-flows], [0]) >> +AT_CHECK([ovs-appctl revalidator/purge], [0]) >> AT_CHECK([ovs-ofctl set-frags br0 $mode]) >> for frag in 4000 6000 6001 4002; do >> printf "\n%s\n" "----$mode $frag missing transport header-----" >> -- >> 1.7.10.4 >> _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev