*
* @EXPR_F_CONSTANT: constant expression
* @EXPR_F_SINGLETON: singleton (implies primary and constant)
+ * @EXPR_F_PROTOCOL: expressions describes upper layer protocol
* @EXPR_F_INTERVAL_END: set member ends an open interval
*/
enum expr_flags {
EXPR_F_CONSTANT = 0x1,
EXPR_F_SINGLETON = 0x2,
- EXPR_F_INTERVAL_END = 0x4,
+ EXPR_F_PROTOCOL = 0x4,
+ EXPR_F_INTERVAL_END = 0x8,
};
#include <payload.h>
const struct payload_template *tmpl;
enum payload_bases base;
unsigned int offset;
- unsigned int flags;
} payload;
struct {
/* EXPR_EXTHDR */
};
#define PAYLOAD_BASE_MAX (__PAYLOAD_BASE_MAX - 1)
-/**
- * enum payload_expr_flags
- *
- * @PAYLOAD_PROTOCOL_EXPR: payload expression contains upper layer protocol
- */
-enum payload_expr_flags {
- PAYLOAD_PROTOCOL_EXPR = 0x1,
-};
-
/**
* struct payload_template - template for a payload header expression
*
new->payload.tmpl = expr->payload.tmpl;
new->payload.base = expr->payload.base;
new->payload.offset = expr->payload.offset;
- new->payload.flags = expr->payload.flags;
}
static const struct expr_ops payload_expr_ops = {
tmpl = &desc->templates[type];
base = desc->base;
if (type == desc->protocol_key)
- flags = PAYLOAD_PROTOCOL_EXPR;
+ flags = EXPR_F_PROTOCOL;
} else {
tmpl = &payload_unknown_template;
base = PAYLOAD_BASE_INVALID;
expr = expr_alloc(loc, &payload_expr_ops, tmpl->dtype,
tmpl->dtype->byteorder, tmpl->len);
+ expr->flags |= flags;
+
expr->payload.desc = desc;
expr->payload.tmpl = tmpl;
expr->payload.base = base;
expr->payload.offset = tmpl->offset;
- expr->payload.flags = flags;
+
return expr;
}
const struct expr *left = expr->left, *right = expr->right;
const struct payload_desc *base, *desc;
- if (!(left->payload.flags & PAYLOAD_PROTOCOL_EXPR))
+ if (!(left->flags & EXPR_F_PROTOCOL))
return;
assert(expr->op == OP_EQ);