struct expr *osf_expr_alloc(const struct location *loc);
-extern bool osf_init;
extern int nfnl_osf_load_fingerprints(struct netlink_ctx *ctx, int del);
#endif /* NFTABLES_OSF_H */
#include <expression.h>
#include <statement.h>
+#include <netlink.h>
+#include <time.h>
#include <rule.h>
#include <erec.h>
#include <gmputil.h>
static int expr_evaluate_osf(struct eval_ctx *ctx, struct expr **expr)
{
+ struct netlink_ctx nl_ctx = {
+ .nf_sock = ctx->nf_sock,
+ .debug_mask = ctx->debug_mask,
+ .octx = ctx->octx,
+ .seqnum = time(NULL),
+ };
+
+ nfnl_osf_load_fingerprints(&nl_ctx, 0);
+
return expr_evaluate_primary(ctx, expr);
}
#define OSFPDEL ':'
#define MAXOPTSTRLEN 128
-bool osf_init;
-
static struct nf_osf_opt IANA_opts[] = {
{ .kind = 0, .length = 1,},
{ .kind=1, .length=1,},
const struct datatype *type = &string_type;
struct expr *expr;
- osf_init = true;
expr = expr_alloc(loc, &osf_expr_ops, type,
BYTEORDER_HOST_ENDIAN, len);
static int do_command_add(struct netlink_ctx *ctx, struct cmd *cmd, bool excl)
{
uint32_t flags = excl ? NLM_F_EXCL : 0;
- int err;
if (ctx->octx->echo) {
int ret;
case CMD_OBJ_CHAIN:
return netlink_add_chain_batch(ctx, cmd, flags);
case CMD_OBJ_RULE:
- err = netlink_add_rule_batch(ctx, cmd, flags | NLM_F_APPEND);
- if (osf_init)
- nfnl_osf_load_fingerprints(ctx, 0);
- return err;
+ return netlink_add_rule_batch(ctx, cmd, flags | NLM_F_APPEND);
case CMD_OBJ_SET:
return do_add_set(ctx, cmd, flags);
case CMD_OBJ_SETELEM: