On Aug 27, 2013, at 11:12 AM, Ben Pfaff <[email protected]> wrote:
> Suggested-by: pritesh <[email protected]>
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
> ofproto/tunnel.c | 100 +++++++++++++++++++++++++-----------------------------
> 1 file changed, 46 insertions(+), 54 deletions(-)
>
> diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c
> index 202358b..4729f5f 100644
> --- a/ofproto/tunnel.c
> +++ b/ofproto/tunnel.c
...
> +/* Returns the tnl_port that is the best match for the tunnel data in 'flow',
> + * or NULL if no tnl_port matches 'flow'. */
> static struct tnl_port *
> -tnl_find(struct tnl_match *match_) OVS_REQ_RDLOCK(rwlock)
> +tnl_find(const struct flow *flow) OVS_REQ_RDLOCK(rwlock)
> {
> - struct tnl_match match = *match_;
> - struct tnl_port *tnl_port;
> + enum ip_src_type {
> + IP_SRC_EXACT, /* ip_src must match exactly. */
> + IP_SRC_ANY, /* Any ip_src is acceptable. */
> + IP_SRC_FLOW /* ip_src is handled in flow table. */
> + };
> +
> + struct tnl_match_pattern {
> + bool in_key_flow;
> + bool ip_dst_flow;
> + enum ip_src_type ip_src;
> + };
> +
> + static const struct tnl_match_pattern patterns[] = {
> + { false, false, IP_SRC_EXACT }, /* remote_ip, local_ip, in_key. */
> + { false, false, IP_SRC_ANY }, /* remote_ip, in_key. */
> + { true, false, IP_SRC_EXACT }, /* remote_ip, local_ip. */
> + { true, false, IP_SRC_ANY }, /* remote_ip. */
> + { true, true, IP_SRC_ANY }, /* Flow-based remote. */
> + { true, true, IP_SRC_FLOW }, /* Flow-based everything. */
> + };
> +
Sorry to mention this now rather than sooner, but the above would be even more
self explanatory if the booleans were replaced with enums, like this:
+ static const struct tnl_match_pattern patterns[] = {
+ { KEY_CFG, IP_DST_CFG, IP_SRC_CFG }, /* remote_ip, local_ip, in_key. */
+ { KEY_CFG, IP_DST_CFG, IP_SRC_ANY }, /* remote_ip, in_key. */
+ { KEY_FLOW, IP_DST_CFG, IP_SRC_CFG }, /* remote_ip, local_ip. */
+ { KEY_FLOW, IP_DST_CFG, IP_SRC_ANY }, /* remote_ip. */
+ { KEY_FLOW, IP_DST_FLOW, IP_SRC_ANY }, /* Flow-based remote. */
+ { KEY_FLOW, IP_DST_FLOW, IP_SRC_FLOW }, /* Flow-based everything. */
+ };
The key and dst fields could still be used like booleans, so no code needs to
change because of this.
(Note the renamed IP_SRC_EXACT -> IP_SRC_CFG also.)
Jarno
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev