- if (wc & FWW_ND_TARGET) {
- memset(&flow->nd_target, 0, sizeof flow->nd_target);
- }
- flow->priority = 0;
+ flow->nd_target = ipv6_addr_bitand(&flow->nd_target,
+ &wildcards->nd_target_mask);
+ flow->skb_priority = 0;
+}
+
+/* Initializes 'fmd' with the metadata found in 'flow'. */
+void
+flow_get_metadata(const struct flow *flow, struct flow_metadata *fmd)
+{
+ BUILD_ASSERT_DECL(FLOW_WC_SEQ == 10);
+
+ fmd->tun_id = flow->tun_id;
+ fmd->tun_id_mask = htonll(UINT64_MAX);
+
+ memcpy(fmd->regs, flow->regs, sizeof fmd->regs);
+ memset(fmd->reg_masks, 0xff, sizeof fmd->reg_masks);
+
+ fmd->in_port = flow->in_port;