|
Packit |
c5a612 |
#ifndef NFTABLES_PAYLOAD_H
|
|
Packit |
c5a612 |
#define NFTABLES_PAYLOAD_H
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
#include <nftables.h>
|
|
Packit |
c5a612 |
#include <proto.h>
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
extern struct expr *payload_expr_alloc(const struct location *loc,
|
|
Packit |
c5a612 |
const struct proto_desc *desc,
|
|
Packit |
c5a612 |
unsigned int type);
|
|
Packit |
c5a612 |
extern void payload_init_raw(struct expr *expr, enum proto_bases base,
|
|
Packit |
c5a612 |
unsigned int offset, unsigned int len);
|
|
Packit |
c5a612 |
extern unsigned int payload_hdr_field(const struct expr *expr);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
struct eval_ctx;
|
|
Packit |
c5a612 |
struct stmt;
|
|
Packit |
c5a612 |
extern int payload_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
|
|
Packit |
c5a612 |
struct stmt **res);
|
|
Packit |
c5a612 |
extern int exthdr_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
|
|
Packit |
c5a612 |
const struct proto_desc *dependency,
|
|
Packit |
c5a612 |
enum proto_bases pb, struct stmt **res);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
/**
|
|
Packit |
c5a612 |
* struct payload_dep_ctx - payload protocol dependency tracking
|
|
Packit |
c5a612 |
*
|
|
Packit |
c5a612 |
* @pbase: protocol base of last dependency match
|
|
Packit |
c5a612 |
* @pdep: last dependency match
|
|
Packit |
c5a612 |
* @prev: previous statement
|
|
Packit |
c5a612 |
*/
|
|
Packit |
c5a612 |
struct payload_dep_ctx {
|
|
Packit |
c5a612 |
enum proto_bases pbase;
|
|
Packit |
c5a612 |
struct stmt *pdep;
|
|
Packit |
c5a612 |
struct stmt *prev;
|
|
Packit |
c5a612 |
};
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
extern bool payload_is_known(const struct expr *expr);
|
|
Packit |
c5a612 |
extern bool payload_is_stacked(const struct proto_desc *desc,
|
|
Packit |
c5a612 |
const struct expr *expr);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
void payload_dependency_reset(struct payload_dep_ctx *ctx);
|
|
Packit |
c5a612 |
extern void payload_dependency_store(struct payload_dep_ctx *ctx,
|
|
Packit |
c5a612 |
struct stmt *stmt,
|
|
Packit |
c5a612 |
enum proto_bases base);
|
|
Packit |
c5a612 |
extern bool payload_dependency_exists(const struct payload_dep_ctx *ctx,
|
|
Packit |
c5a612 |
enum proto_bases base);
|
|
Packit |
c5a612 |
extern void payload_dependency_release(struct payload_dep_ctx *ctx);
|
|
Packit |
c5a612 |
extern void payload_dependency_kill(struct payload_dep_ctx *ctx,
|
|
Packit |
c5a612 |
struct expr *expr, unsigned int family);
|
|
Packit |
c5a612 |
extern void exthdr_dependency_kill(struct payload_dep_ctx *ctx,
|
|
Packit |
c5a612 |
struct expr *expr, unsigned int family);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
extern bool payload_can_merge(const struct expr *e1, const struct expr *e2);
|
|
Packit |
c5a612 |
extern struct expr *payload_expr_join(const struct expr *e1,
|
|
Packit |
c5a612 |
const struct expr *e2);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
bool payload_expr_trim(struct expr *expr, struct expr *mask,
|
|
Packit |
c5a612 |
const struct proto_ctx *ctx, unsigned int *shift);
|
|
Packit |
c5a612 |
extern void payload_expr_expand(struct list_head *list, struct expr *expr,
|
|
Packit |
c5a612 |
const struct proto_ctx *ctx);
|
|
Packit |
c5a612 |
extern void payload_expr_complete(struct expr *expr,
|
|
Packit |
c5a612 |
const struct proto_ctx *ctx);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
bool payload_expr_cmp(const struct expr *e1, const struct expr *e2);
|
|
Packit |
c5a612 |
|
|
Packit |
c5a612 |
#endif /* NFTABLES_PAYLOAD_H */
|