- switch (mf->id) {
- case MFF_TUN_ID:
- mask->be64 = wc->tun_id_mask;
- break;
- case MFF_METADATA:
- mask->be64 = wc->metadata_mask;
- break;
- case MFF_IN_PORT:
- mask->be16 = htons(wc->in_port_mask);
- break;
- CASE_MFF_REGS:
- mask->be32 = htonl(wc->reg_masks[mf->id - MFF_REG0]);
- break;
-
- case MFF_ETH_DST:
- memcpy(mask->mac, wc->dl_dst_mask, ETH_ADDR_LEN);
- break;
- case MFF_ETH_SRC:
- memcpy(mask->mac, wc->dl_src_mask, ETH_ADDR_LEN);
- break;
- case MFF_ETH_TYPE:
- mask->be16 = wc->dl_type_mask;
- break;
-
- case MFF_VLAN_TCI:
- mask->be16 = wc->vlan_tci_mask;
- break;
- case MFF_DL_VLAN:
- mask->be16 = wc->vlan_tci_mask & htons(VLAN_VID_MASK);
- break;
- case MFF_VLAN_VID:
- mask->be16 = wc->vlan_tci_mask & htons(VLAN_VID_MASK | VLAN_CFI);
- break;
- case MFF_DL_VLAN_PCP:
- case MFF_VLAN_PCP:
- mask->u8 = vlan_tci_to_pcp(wc->vlan_tci_mask);
- break;
-
- case MFF_IPV4_SRC:
- mask->be32 = wc->nw_src_mask;
- break;
- case MFF_IPV4_DST:
- mask->be32 = wc->nw_dst_mask;
- break;
-
- case MFF_IPV6_SRC:
- mask->ipv6 = wc->ipv6_src_mask;
- break;
- case MFF_IPV6_DST:
- mask->ipv6 = wc->ipv6_dst_mask;
- break;
- case MFF_IPV6_LABEL:
- mask->be32 = wc->ipv6_label_mask;
- break;
-
- case MFF_IP_PROTO:
- mask->u8 = wc->nw_proto_mask;
- break;
- case MFF_IP_DSCP:
- mask->u8 = wc->nw_tos_mask & IP_DSCP_MASK;
- break;
- case MFF_IP_ECN:
- mask->u8 = wc->nw_tos_mask & IP_ECN_MASK;
- break;
-
- case MFF_ND_TARGET:
- mask->ipv6 = wc->nd_target_mask;
- break;
-
- case MFF_IP_TTL:
- mask->u8 = wc->nw_ttl_mask;
- break;
- case MFF_IP_FRAG:
- mask->u8 = wc->nw_frag_mask & FLOW_NW_FRAG_MASK;
- break;
-
- case MFF_ARP_OP:
- mask->u8 = wc->nw_proto_mask;
- break;
- case MFF_ARP_SPA:
- mask->be32 = wc->nw_src_mask;
- break;
- case MFF_ARP_TPA:
- mask->be32 = wc->nw_dst_mask;
- break;
- case MFF_ARP_SHA:
- case MFF_ND_SLL:
- memcpy(mask->mac, wc->arp_sha_mask, ETH_ADDR_LEN);
- break;
- case MFF_ARP_THA:
- case MFF_ND_TLL:
- memcpy(mask->mac, wc->arp_tha_mask, ETH_ADDR_LEN);
- break;
-
- case MFF_TCP_SRC:
- case MFF_UDP_SRC:
- mask->be16 = wc->tp_src_mask;
- break;
- case MFF_TCP_DST:
- case MFF_UDP_DST:
- mask->be16 = wc->tp_dst_mask;
- break;
-
- case MFF_ICMPV4_TYPE:
- case MFF_ICMPV6_TYPE:
- mask->u8 = ntohs(wc->tp_src_mask);
- break;
- case MFF_ICMPV4_CODE:
- case MFF_ICMPV6_CODE:
- mask->u8 = ntohs(wc->tp_dst_mask);
- break;
-
- case MFF_N_IDS:
- default:
- NOT_REACHED();
- }