ctx->xout->has_normal = true;
- /* Check the dl_type, since we may check for gratuituous ARP. */
memset(&wc->masks.dl_src, 0xff, sizeof wc->masks.dl_src);
memset(&wc->masks.dl_dst, 0xff, sizeof wc->masks.dl_dst);
wc->masks.vlan_tci |= htons(VLAN_VID_MASK | VLAN_CFI);
flow->nw_tos |= dscp;
}
- if (ofport->tnl_port) {
+ if (ofport->is_tunnel) {
/* Save tunnel metadata so that changes made due to
* the Logical (tunnel) Port are not visible for any further
* matches, while explicit set actions on tunnel metadata are.
*/
struct flow_tnl flow_tnl = flow->tunnel;
- odp_port = tnl_port_send(ofport->tnl_port, flow, &ctx->xout->wc);
+ odp_port = tnl_port_send(ofport, flow, &ctx->xout->wc);
if (odp_port == ODPP_NONE) {
xlate_report(ctx, "Tunneling decided against output");
goto out; /* restore flow_nw_tos */
memset(&wc->masks.tunnel, 0xff, sizeof wc->masks.tunnel);
}
if (xin->ofproto->netflow) {
- netflow_mask_wc(wc);
+ netflow_mask_wc(flow, wc);
}
ctx.xout->tags = 0;