We can't currently match on some of the fields in struct flow_tnl via OpenFlow, but it still seems reasonable to use struct flow_tnl in place of duplicating much of it.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- lib/flow.c | 6 ++---- lib/flow.h | 4 +--- lib/learning-switch.c | 4 ++-- lib/ofp-print.c | 15 +++++++++------ lib/ofp-util.c | 16 +++++++--------- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/lib/flow.c b/lib/flow.c index 3c12984..680b3230 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 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. @@ -493,9 +493,7 @@ flow_get_metadata(const struct flow *flow, struct flow_metadata *fmd) { BUILD_ASSERT_DECL(FLOW_WC_SEQ == 20); - fmd->tun_id = flow->tunnel.tun_id; - fmd->tun_src = flow->tunnel.ip_src; - fmd->tun_dst = flow->tunnel.ip_dst; + fmd->tunnel = flow->tunnel; fmd->metadata = flow->metadata; memcpy(fmd->regs, flow->regs, sizeof fmd->regs); fmd->in_port = flow->in_port; diff --git a/lib/flow.h b/lib/flow.h index 0fdf4ef..2271418 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -117,9 +117,7 @@ BUILD_ASSERT_DECL(sizeof(struct flow) == sizeof(struct flow_tnl) + 160 && /* Represents the metadata fields of struct flow. */ struct flow_metadata { - ovs_be64 tun_id; /* Encapsulating tunnel ID. */ - ovs_be32 tun_src; /* Tunnel outer IPv4 src addr */ - ovs_be32 tun_dst; /* Tunnel outer IPv4 dst addr */ + struct flow_tnl tunnel; /* Encapsulating tunnel parameters. */ ovs_be64 metadata; /* OpenFlow 1.1+ metadata field. */ uint32_t regs[FLOW_N_REGS]; /* Registers. */ uint16_t in_port; /* OpenFlow port or zero. */ diff --git a/lib/learning-switch.c b/lib/learning-switch.c index 4a95dc1..98923fb 100644 --- a/lib/learning-switch.c +++ b/lib/learning-switch.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 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. @@ -559,7 +559,7 @@ process_packet_in(struct lswitch *sw, const struct ofp_header *oh) /* Extract flow data from 'opi' into 'flow'. */ ofpbuf_use_const(&pkt, pi.packet, pi.packet_len); flow_extract(&pkt, 0, 0, NULL, pi.fmd.in_port, &flow); - flow.tunnel.tun_id = pi.fmd.tun_id; + flow.tunnel = pi.fmd.tunnel; /* Choose output port. */ out_port = lswitch_choose_destination(sw, &flow); diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 8d99844..1b89d3d 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -107,16 +107,19 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh, ds_put_format(string, " total_len=%"PRIu16" in_port=", pin.total_len); ofputil_format_port(pin.fmd.in_port, string); - if (pin.fmd.tun_id != htonll(0)) { - ds_put_format(string, " tun_id=0x%"PRIx64, ntohll(pin.fmd.tun_id)); + if (pin.fmd.tunnel.tun_id != htonll(0)) { + ds_put_format(string, " tun_id=0x%"PRIx64, + ntohll(pin.fmd.tunnel.tun_id)); } - if (pin.fmd.tun_src != htonl(0)) { - ds_put_format(string, " tun_src="IP_FMT, IP_ARGS(pin.fmd.tun_src)); + if (pin.fmd.tunnel.ip_src != htonl(0)) { + ds_put_format(string, " tun_src="IP_FMT, + IP_ARGS(pin.fmd.tunnel.ip_src)); } - if (pin.fmd.tun_dst != htonl(0)) { - ds_put_format(string, " tun_dst="IP_FMT, IP_ARGS(pin.fmd.tun_dst)); + if (pin.fmd.tunnel.ip_dst != htonl(0)) { + ds_put_format(string, " tun_dst="IP_FMT, + IP_ARGS(pin.fmd.tunnel.ip_dst)); } if (pin.fmd.metadata != htonll(0)) { diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 2ca0077..658b541 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -2442,9 +2442,7 @@ ofputil_decode_packet_in_finish(struct ofputil_packet_in *pin, pin->packet_len = b->size; pin->fmd.in_port = match->flow.in_port; - pin->fmd.tun_id = match->flow.tunnel.tun_id; - pin->fmd.tun_src = match->flow.tunnel.ip_src; - pin->fmd.tun_dst = match->flow.tunnel.ip_dst; + pin->fmd.tunnel = match->flow.tunnel; pin->fmd.metadata = match->flow.metadata; memcpy(pin->fmd.regs, match->flow.regs, sizeof pin->fmd.regs); } @@ -2542,14 +2540,14 @@ ofputil_packet_in_to_match(const struct ofputil_packet_in *pin, int i; match_init_catchall(match); - if (pin->fmd.tun_id != htonll(0)) { - match_set_tun_id(match, pin->fmd.tun_id); + if (pin->fmd.tunnel.tun_id != htonll(0)) { + match_set_tun_id(match, pin->fmd.tunnel.tun_id); } - if (pin->fmd.tun_src != htonl(0)) { - match_set_tun_src(match, pin->fmd.tun_src); + if (pin->fmd.tunnel.ip_src != htonl(0)) { + match_set_tun_src(match, pin->fmd.tunnel.ip_src); } - if (pin->fmd.tun_dst != htonl(0)) { - match_set_tun_dst(match, pin->fmd.tun_dst); + if (pin->fmd.tunnel.ip_dst != htonl(0)) { + match_set_tun_dst(match, pin->fmd.tunnel.ip_dst); } if (pin->fmd.metadata != htonll(0)) { match_set_metadata(match, pin->fmd.metadata); -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev