static bool versioned = false;
/* Fields in a rule. */
-#define CLS_FIELDS \
- /* struct flow all-caps */ \
- /* member name name */ \
- /* ----------- -------- */ \
- CLS_FIELD(tunnel.tun_id, TUN_ID) \
- CLS_FIELD(metadata, METADATA) \
- CLS_FIELD(nw_src, NW_SRC) \
- CLS_FIELD(nw_dst, NW_DST) \
- CLS_FIELD(in_port, IN_PORT) \
- CLS_FIELD(vlan_tci, VLAN_TCI) \
- CLS_FIELD(dl_type, DL_TYPE) \
- CLS_FIELD(tp_src, TP_SRC) \
- CLS_FIELD(tp_dst, TP_DST) \
- CLS_FIELD(dl_src, DL_SRC) \
- CLS_FIELD(dl_dst, DL_DST) \
- CLS_FIELD(nw_proto, NW_PROTO) \
- CLS_FIELD(nw_tos, NW_DSCP)
+#define CLS_FIELDS \
+ /* struct flow all-caps */ \
+ /* member name name */ \
+ /* ----------- -------- */ \
+ CLS_FIELD(tunnel.tun_id, TUN_ID) \
+ CLS_FIELD(metadata, METADATA) \
+ CLS_FIELD(nw_src, NW_SRC) \
+ CLS_FIELD(nw_dst, NW_DST) \
+ CLS_FIELD(in_port.ofp_port, IN_PORT) \
+ CLS_FIELD(vlan_tci, VLAN_TCI) \
+ CLS_FIELD(dl_type, DL_TYPE) \
+ CLS_FIELD(tp_src, TP_SRC) \
+ CLS_FIELD(tp_dst, TP_DST) \
+ CLS_FIELD(dl_src, DL_SRC) \
+ CLS_FIELD(dl_dst, DL_DST) \
+ CLS_FIELD(nw_proto, NW_PROTO) \
+ CLS_FIELD(nw_tos, NW_DSCP)
/* Field indexes.
*
static ovs_be16 tp_src_values[] = { CONSTANT_HTONS(49362),
CONSTANT_HTONS(80) };
static ovs_be16 tp_dst_values[] = { CONSTANT_HTONS(6667), CONSTANT_HTONS(22) };
-static uint8_t dl_src_values[][ETH_ADDR_LEN] = {
- { 0x00, 0x02, 0xe3, 0x0f, 0x80, 0xa4 },
- { 0x5e, 0x33, 0x7f, 0x5f, 0x1e, 0x99 } };
-static uint8_t dl_dst_values[][ETH_ADDR_LEN] = {
- { 0x4a, 0x27, 0x71, 0xae, 0x64, 0xc1 },
- { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } };
+static struct eth_addr dl_src_values[] = {
+ { { { 0x00, 0x02, 0xe3, 0x0f, 0x80, 0xa4 } } },
+ { { { 0x5e, 0x33, 0x7f, 0x5f, 0x1e, 0x99 } } } };
+static struct eth_addr dl_dst_values[] = {
+ { { { 0x4a, 0x27, 0x71, 0xae, 0x64, 0xc1 } } },
+ { { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } } } };
static uint8_t nw_proto_values[] = { IPPROTO_TCP, IPPROTO_ICMP };
static uint8_t nw_dscp_values[] = { 48, 0 };
values[CLS_F_IDX_VLAN_TCI][0] = &vlan_tci_values[0];
values[CLS_F_IDX_VLAN_TCI][1] = &vlan_tci_values[1];
- values[CLS_F_IDX_DL_SRC][0] = dl_src_values[0];
- values[CLS_F_IDX_DL_SRC][1] = dl_src_values[1];
+ values[CLS_F_IDX_DL_SRC][0] = &dl_src_values[0];
+ values[CLS_F_IDX_DL_SRC][1] = &dl_src_values[1];
- values[CLS_F_IDX_DL_DST][0] = dl_dst_values[0];
- values[CLS_F_IDX_DL_DST][1] = dl_dst_values[1];
+ values[CLS_F_IDX_DL_DST][0] = &dl_dst_values[0];
+ values[CLS_F_IDX_DL_DST][1] = &dl_dst_values[1];
values[CLS_F_IDX_DL_TYPE][0] = &dl_type_values[0];
values[CLS_F_IDX_DL_TYPE][1] = &dl_type_values[1];
flow.dl_type = dl_type_values[get_value(&x, N_DL_TYPE_VALUES)];
flow.tp_src = tp_src_values[get_value(&x, N_TP_SRC_VALUES)];
flow.tp_dst = tp_dst_values[get_value(&x, N_TP_DST_VALUES)];
- memcpy(flow.dl_src, dl_src_values[get_value(&x, N_DL_SRC_VALUES)],
- ETH_ADDR_LEN);
- memcpy(flow.dl_dst, dl_dst_values[get_value(&x, N_DL_DST_VALUES)],
- ETH_ADDR_LEN);
+ flow.dl_src = dl_src_values[get_value(&x, N_DL_SRC_VALUES)];
+ flow.dl_dst = dl_dst_values[get_value(&x, N_DL_DST_VALUES)];
flow.nw_proto = nw_proto_values[get_value(&x, N_NW_PROTO_VALUES)];
flow.nw_tos = nw_dscp_values[get_value(&x, N_NW_DSCP_VALUES)];
} else if (f_idx == CLS_F_IDX_TP_DST) {
match.wc.masks.tp_dst = OVS_BE16_MAX;
} else if (f_idx == CLS_F_IDX_DL_SRC) {
- memset(match.wc.masks.dl_src, 0xff, ETH_ADDR_LEN);
+ WC_MASK_FIELD(&match.wc, dl_src);
} else if (f_idx == CLS_F_IDX_DL_DST) {
- memset(match.wc.masks.dl_dst, 0xff, ETH_ADDR_LEN);
+ WC_MASK_FIELD(&match.wc, dl_dst);
} else if (f_idx == CLS_F_IDX_VLAN_TCI) {
match.wc.masks.vlan_tci = OVS_BE16_MAX;
} else if (f_idx == CLS_F_IDX_TUN_ID) {
flow->dl_type = dl_type_values[get_value(&x, N_DL_TYPE_VALUES)];
flow->tp_src = tp_src_values[get_value(&x, N_TP_SRC_VALUES)];
flow->tp_dst = tp_dst_values[get_value(&x, N_TP_DST_VALUES)];
- memcpy(flow->dl_src, dl_src_values[get_value(&x, N_DL_SRC_VALUES)],
- ETH_ADDR_LEN);
- memcpy(flow->dl_dst, dl_dst_values[get_value(&x, N_DL_DST_VALUES)],
- ETH_ADDR_LEN);
+ flow->dl_src = dl_src_values[get_value(&x, N_DL_SRC_VALUES)];
+ flow->dl_dst = dl_dst_values[get_value(&x, N_DL_DST_VALUES)];
flow->nw_proto = nw_proto_values[get_value(&x, N_NW_PROTO_VALUES)];
flow->nw_tos = nw_dscp_values[get_value(&x, N_NW_DSCP_VALUES)];
}