Blame include/payload.h

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 */