From: Ben Pfaff Date: Wed, 23 Oct 2013 04:36:22 +0000 (-0700) Subject: fail-open: Add function to identify fail-open's flows. X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ee1afdd55567263f8a10f9bff3e5ae6fc8e42fdb;p=sliver-openvswitch.git fail-open: Add function to identify fail-open's flows. This seems slightly cleaner than embedding this logic directing into ofproto-dpif, since it is an interface that theoretically could be useful to other ofproto providers. Signed-off-by: Ben Pfaff --- diff --git a/ofproto/fail-open.h b/ofproto/fail-open.h index 4e91ea01d..c8e1f32fc 100644 --- a/ofproto/fail-open.h +++ b/ofproto/fail-open.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ #include #include -#include "flow.h" +#include "ofproto-provider.h" struct connmgr; struct fail_open; @@ -31,6 +31,14 @@ struct ofproto; * creates flows with this priority). And "f0" is mnemonic for "fail open"! */ #define FAIL_OPEN_PRIORITY 0xf0f0f0 +/* Returns true if 'rule' is one created by the "fail open" logic, false + * otherwise. */ +static inline bool +is_fail_open_rule(const struct rule *rule) +{ + return rule->cr.priority == FAIL_OPEN_PRIORITY; +} + struct fail_open *fail_open_create(struct ofproto *, struct connmgr *); void fail_open_destroy(struct fail_open *); void fail_open_wait(struct fail_open *); diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index c2812c89d..ed9ca7cf4 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -2778,7 +2778,7 @@ xlate_actions__(struct xlate_in *xin, struct xlate_out *xout) } ctx.rule = rule; } - xout->fail_open = ctx.rule && rule_dpif_fail_open(ctx.rule); + xout->fail_open = ctx.rule && rule_dpif_is_fail_open(ctx.rule); if (xin->ofpacts) { ofpacts = xin->ofpacts; diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index f53384d62..67c21f54c 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4304,9 +4304,10 @@ rule_dpif_credit_stats(struct rule_dpif *rule, } bool -rule_dpif_fail_open(const struct rule_dpif *rule) +rule_dpif_is_fail_open(const struct rule_dpif *rule) { - return rule->up.cr.priority == FAIL_OPEN_PRIORITY; + return is_fail_open_rule(&rule->up); +} } ovs_be64 diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index 0f9603189..ab5dfbbd7 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -74,7 +74,7 @@ void rule_dpif_unref(struct rule_dpif *); void rule_dpif_credit_stats(struct rule_dpif *rule , const struct dpif_flow_stats *); -bool rule_dpif_fail_open(const struct rule_dpif *rule); +bool rule_dpif_is_fail_open(const struct rule_dpif *); struct rule_actions *rule_dpif_get_actions(const struct rule_dpif *);