static int chain_cb(const struct nlmsghdr *nlh, int event, struct callback_data *cb) { struct nftnl_chain *chain; chain = nftnl_chain_alloc(); if (!chain) return MNL_CB_OK; if (nftnl_chain_nlmsg_parse(nlh, chain) < 0) goto out; switch (cb->type) { case CALLBACK_RETURN_HANDLE: cb->value = nftnl_chain_get_u64(chain, NFTNL_CHAIN_HANDLE); cb->success = true; break; default: DBG("unhandled callback type %d\n", cb->type); break; } out: nftnl_chain_free(chain); return MNL_CB_OK; }
static void cmp_nftnl_chain(struct nftnl_chain *a, struct nftnl_chain *b) { if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_NAME), nftnl_chain_get_str(b, NFTNL_CHAIN_NAME)) != 0) print_err("Chain name mismatches"); if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_TABLE), nftnl_chain_get_str(b, NFTNL_CHAIN_TABLE)) != 0) print_err("Chain table mismatches"); if (nftnl_chain_get_u32(a, NFTNL_CHAIN_FAMILY) != nftnl_chain_get_u32(b, NFTNL_CHAIN_FAMILY)) print_err("Chain family mismatches"); if (nftnl_chain_get_u32(a, NFTNL_CHAIN_POLICY) != nftnl_chain_get_u32(b, NFTNL_CHAIN_POLICY)) print_err("Chain policy mismatches"); if (nftnl_chain_get_u32(a, NFTNL_CHAIN_HOOKNUM) != nftnl_chain_get_u32(b, NFTNL_CHAIN_HOOKNUM)) print_err("Chain hooknum mismatches"); if (nftnl_chain_get_s32(a, NFTNL_CHAIN_PRIO) != nftnl_chain_get_s32(b, NFTNL_CHAIN_PRIO)) print_err("Chain Prio mismatches"); if (nftnl_chain_get_u32(a, NFTNL_CHAIN_USE) != nftnl_chain_get_u32(b, NFTNL_CHAIN_USE)) print_err("Chain use mismatches"); if (nftnl_chain_get_u64(a, NFTNL_CHAIN_PACKETS) != nftnl_chain_get_u64(b, NFTNL_CHAIN_PACKETS)) print_err("Chain packets mismatches"); if (nftnl_chain_get_u64(a, NFTNL_CHAIN_BYTES) != nftnl_chain_get_u64(b, NFTNL_CHAIN_BYTES)) print_err("Chain bytes mismatches"); if (nftnl_chain_get_u64(a, NFTNL_CHAIN_HANDLE) != nftnl_chain_get_u64(b, NFTNL_CHAIN_HANDLE)) print_err("Chain handle mismatches"); if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_TYPE), nftnl_chain_get_str(b, NFTNL_CHAIN_TYPE)) != 0) print_err("Chain type mismatches"); if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_DEV), nftnl_chain_get_str(b, NFTNL_CHAIN_DEV)) != 0) print_err("Chain device mismatches"); }