static void cmp_nftnl_expr(struct nftnl_expr *rule_a, struct nftnl_expr *rule_b) { if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_CTR_BYTES) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_CTR_BYTES)) print_err("Expr NFTNL_EXPR_CTR_BYTES mismatches"); if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_CTR_PACKETS) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_CTR_PACKETS)) print_err("Expr NFTNL_EXPR_CTR_PACKETS mismatches"); }
static int rule_expr_cb(struct nftnl_expr *expr, void *data) { struct callback_data *cb = data; const char *name; name = nftnl_expr_get_str(expr, NFTNL_EXPR_NAME); if (strcmp(name, "counter")) { cb->value = nftnl_expr_get_u64(expr, NFTNL_EXPR_CTR_BYTES); cb->success = true; } return 0; }
static void cmp_nftnl_expr(struct nftnl_expr *rule_a, struct nftnl_expr *rule_b) { if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_LIMIT_RATE) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_LIMIT_RATE)) print_err("Expr CTR_BYTES mismatches"); if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_LIMIT_UNIT) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_LIMIT_UNIT)) print_err("Expr CTR_PACKET mismatches"); if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_LIMIT_BURST) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_LIMIT_BURST)) print_err("Expr CTR_PACKET mismatches"); if (nftnl_expr_get_u64(rule_a, NFTNL_EXPR_LIMIT_TYPE) != nftnl_expr_get_u64(rule_b, NFTNL_EXPR_LIMIT_TYPE)) print_err("Expr TYPE mismatches"); }
void nft_parse_counter(struct nftnl_expr *e, struct xt_counters *counters) { counters->pcnt = nftnl_expr_get_u64(e, NFTNL_EXPR_CTR_PACKETS); counters->bcnt = nftnl_expr_get_u64(e, NFTNL_EXPR_CTR_BYTES); }