static int delete_entry(const char *chain, const char *table, struct iptables_command_state *cs, int family, const struct addr_mask s, const struct addr_mask d, bool verbose, struct nft_handle *h) { unsigned int i, j; int ret = 1; for (i = 0; i < s.naddrs; i++) { if (family == AF_INET) { cs->fw.ip.src.s_addr = s.addr.v4[i].s_addr; cs->fw.ip.smsk.s_addr = s.mask.v4[i].s_addr; for (j = 0; j < d.naddrs; j++) { cs->fw.ip.dst.s_addr = d.addr.v4[j].s_addr; cs->fw.ip.dmsk.s_addr = d.mask.v4[j].s_addr; ret = nft_rule_delete(h, chain, table, cs, verbose); } } else if (family == AF_INET6) { memcpy(&cs->fw6.ipv6.src, &s.addr.v6[i], sizeof(struct in6_addr)); memcpy(&cs->fw6.ipv6.smsk, &s.mask.v6[i], sizeof(struct in6_addr)); for (j = 0; j < d.naddrs; j++) { memcpy(&cs->fw6.ipv6.dst, &d.addr.v6[j], sizeof(struct in6_addr)); memcpy(&cs->fw6.ipv6.dmsk, &d.mask.v6[j], sizeof(struct in6_addr)); ret = nft_rule_delete(h, chain, table, cs, verbose); } } } return ret; }
static int delete_entry(struct nft_handle *h, const char *chain, const char *table, struct ebtables_command_state *cs, int rule_nr, int rule_nr_end, bool verbose) { int ret = 1; if (rule_nr == -1) ret = nft_rule_delete(h, chain, table, cs, verbose); else { do { ret = nft_rule_delete_num(h, chain, table, rule_nr, verbose); rule_nr++; } while (rule_nr < rule_nr_end); } return ret; }
static int delete_entry(const char *chain, const char *table, struct arptables_command_state *cs, unsigned int nsaddrs, const struct in_addr saddrs[], unsigned int ndaddrs, const struct in_addr daddrs[], bool verbose, struct nft_handle *h) { unsigned int i, j; int ret = 1; for (i = 0; i < nsaddrs; i++) { cs->fw.arp.src.s_addr = saddrs[i].s_addr; for (j = 0; j < ndaddrs; j++) { cs->fw.arp.tgt.s_addr = daddrs[j].s_addr; ret = nft_rule_delete(h, chain, table, cs, verbose); } } return ret; }