Thanks, pushed to master.
On 21 November 2014 13:05, Jarno Rajahalme <jrajaha...@nicira.com> wrote: > 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