+ bool eq;
+
+ if (f_idx == CLS_F_IDX_NW_SRC) {
+ eq = !((fixed->nw_src ^ wild->match.flow.nw_src)
+ & wild->match.wc.masks.nw_src);
+ } else if (f_idx == CLS_F_IDX_NW_DST) {
+ eq = !((fixed->nw_dst ^ wild->match.flow.nw_dst)
+ & wild->match.wc.masks.nw_dst);
+ } else if (f_idx == CLS_F_IDX_TP_SRC) {
+ eq = !((fixed->tp_src ^ wild->match.flow.tp_src)
+ & wild->match.wc.masks.tp_src);
+ } else if (f_idx == CLS_F_IDX_TP_DST) {
+ eq = !((fixed->tp_dst ^ wild->match.flow.tp_dst)
+ & wild->match.wc.masks.tp_dst);
+ } else if (f_idx == CLS_F_IDX_DL_SRC) {
+ eq = eth_addr_equal_except(fixed->dl_src, wild->match.flow.dl_src,
+ wild->match.wc.masks.dl_src);
+ } else if (f_idx == CLS_F_IDX_DL_DST) {
+ eq = eth_addr_equal_except(fixed->dl_dst, wild->match.flow.dl_dst,
+ wild->match.wc.masks.dl_dst);
+ } else if (f_idx == CLS_F_IDX_VLAN_TCI) {
+ eq = !((fixed->vlan_tci ^ wild->match.flow.vlan_tci)
+ & wild->match.wc.masks.vlan_tci);
+ } else if (f_idx == CLS_F_IDX_TUN_ID) {
+ eq = !((fixed->tun_id ^ wild->match.flow.tun_id)
+ & wild->match.wc.masks.tun_id);
+ } else if (f_idx == CLS_F_IDX_METADATA) {
+ eq = !((fixed->metadata ^ wild->match.flow.metadata)
+ & wild->match.wc.masks.metadata);
+ } else if (f_idx == CLS_F_IDX_NW_DSCP) {
+ eq = !((fixed->nw_tos ^ wild->match.flow.nw_tos) &
+ (wild->match.wc.masks.nw_tos & IP_DSCP_MASK));
+ } else if (f_idx == CLS_F_IDX_NW_PROTO) {
+ eq = !((fixed->nw_proto ^ wild->match.flow.nw_proto)
+ & wild->match.wc.masks.nw_proto);
+ } else if (f_idx == CLS_F_IDX_DL_TYPE) {
+ eq = !((fixed->dl_type ^ wild->match.flow.dl_type)
+ & wild->match.wc.masks.dl_type);
+ } else if (f_idx == CLS_F_IDX_IN_PORT) {
+ eq = !((fixed->in_port ^ wild->match.flow.in_port)
+ & wild->match.wc.masks.in_port);
+ } else {
+ NOT_REACHED();