[FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)] \
: 0)
-/* Get a pointer to the ovs_u128 value of struct flow 'FIELD' from miniflow
- * 'FLOW'. */
-#define MINIFLOW_GET_U128_PTR(FLOW, FIELD) \
- ((MINIFLOW_IN_MAP(FLOW, FLOW_U64_OFFSET(FIELD)) \
- && (MINIFLOW_IN_MAP(FLOW, FLOW_U64_OFFSET(FIELD) + 1))) \
- ? &((OVS_FORCE const ovs_u128 *)miniflow_get__(FLOW, FLOW_U64_OFFSET(FIELD))) \
- [FLOW_U64_OFFREM(FIELD) / sizeof(ovs_u128)] \
- : NULL)
+#define MINIFLOW_GET_U128(FLOW, FIELD) \
+ (ovs_u128) { .u64 = { \
+ (MINIFLOW_IN_MAP(FLOW, FLOW_U64_OFFSET(FIELD)) ? \
+ *miniflow_get__(FLOW, FLOW_U64_OFFSET(FIELD)) : 0), \
+ (MINIFLOW_IN_MAP(FLOW, FLOW_U64_OFFSET(FIELD) + 1) ? \
+ *miniflow_get__(FLOW, FLOW_U64_OFFSET(FIELD) + 1) : 0) } }
#define MINIFLOW_GET_U8(FLOW, FIELD) \
MINIFLOW_GET_TYPE(FLOW, uint8_t, FIELD)
rule_check(struct rule *rule)
{
uint16_t ct_state, ct_zone;
- const ovs_u128 *labelp;
- ovs_u128 ct_label = { { 0, 0 } };
+ ovs_u128 ct_label;
uint32_t ct_mark;
ct_state = MINIFLOW_GET_U16(rule->cr.match.flow, ct_state);
ct_zone = MINIFLOW_GET_U16(rule->cr.match.flow, ct_zone);
ct_mark = MINIFLOW_GET_U32(rule->cr.match.flow, ct_mark);
- labelp = MINIFLOW_GET_U128_PTR(rule->cr.match.flow, ct_label);
- if (labelp) {
- ct_label = *labelp;
- }
+ ct_label = MINIFLOW_GET_U128(rule->cr.match.flow, ct_label);
if (ct_state || ct_zone || ct_mark
|| !ovs_u128_is_zero(&ct_label)) {