In essence this attached the tun_key, if any, to the output processing of a packet. This allows it the packet to be transmitted using flow-based tunneling as necessary.
Cc: Kyle Mestery <kmest...@cisco.com> Signed-off-by: Simon Horman <ho...@verge.net.au> --- ofproto/ofproto-dpif.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 2e553bb..4f69b2f 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4909,9 +4909,19 @@ compose_output_action__(struct action_xlate_ctx *ctx, uint16_t ofp_port, } out_port = realdev_to_txdev(ctx->ofproto, ofport, ctx->flow.vlan_tci); - if (out_port != odp_port && !ofport->tun) { - ctx->flow.vlan_tci = htons(0); + if (out_port != odp_port) { + if (ofport->tun) { + ctx->flow.tun_key.tun_id = ofport->tun->s.out_key; + ctx->flow.tun_key.ipv4_src = ofport->tun->s.saddr; + ctx->flow.tun_key.ipv4_dst = ofport->tun->s.daddr; + ctx->flow.tun_key.ipv4_tos = ofport->tun->s.tos; + ctx->flow.tun_key.ipv4_ttl = ofport->tun->s.ttl; + } else { + ctx->flow.vlan_tci = htons(0); + } } + VLOG_INFO("%s out_port=%d->%d tun=%p", __func__, + ofport->odp_port, out_port, ofport->tun); commit_odp_actions(&ctx->flow, &ctx->base_flow, ctx->odp_actions); nl_msg_put_u32(ctx->odp_actions, OVS_ACTION_ATTR_OUTPUT, out_port); @@ -5566,7 +5576,7 @@ action_xlate_ctx_init(struct action_xlate_ctx *ctx, ctx->ofproto = ofproto; ctx->flow = *flow; ctx->base_flow = ctx->flow; - ctx->base_flow.tun_key.ipv4_src = 0; + ctx->base_flow.tun_key.ipv4_src = htonl(0); ctx->base_flow.vlan_tci = initial_tci; ctx->rule = rule; ctx->packet = packet; -- 1.7.10 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev