static int nft_add_element(
sd_netlink *nfnl,
sd_netlink_message **ret,
- int family,
+ int nfproto,
+ const char *table_name,
const char *set_name,
const void *key,
uint32_t klen,
assert(nfnl);
assert(ret);
- assert(IN_SET(family, AF_INET, AF_INET6));
+ assert(nfproto_is_valid(nfproto));
+ assert(table_name);
assert(set_name);
assert(key);
- assert(data);
+ assert(data || dlen == 0);
+
/*
* Ideally there would be an API that provides:
* This replicated here and each element gets added to the set
* one-by-one.
*/
- r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ true, family, NFT_SYSTEMD_TABLE_NAME, set_name);
+ r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ true, nfproto, table_name, set_name);
if (r < 0)
return r;
static int nft_del_element(
sd_netlink *nfnl,
sd_netlink_message **ret,
- int family,
+ int nfproto,
+ const char *table_name,
const char *set_name,
const void *key,
uint32_t klen,
assert(nfnl);
assert(ret);
- assert(IN_SET(family, AF_INET, AF_INET6));
+ assert(nfproto_is_valid(nfproto));
+ assert(table_name);
assert(set_name);
assert(key);
- assert(data);
+ assert(data || dlen == 0);
- r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ false, family, NFT_SYSTEMD_TABLE_NAME, set_name);
+ r = sd_nfnl_nft_message_new_setelems(nfnl, &m, /* add = */ false, nfproto, table_name, set_name);
if (r < 0)
return r;
else
memcpy(data, &previous_remote->in6, sizeof(previous_remote->in6));
- r = nft_del_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+ r = nft_del_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_DNAT_MAP_NAME,
+ key, sizeof(key), data, dlen);
if (r < 0)
return r;
}
memcpy(data, &remote->in6, sizeof(remote->in6));
if (add)
- r = nft_add_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+ r = nft_add_element(nfnl, &messages[msgcnt++], af_to_nfproto(af), NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_DNAT_MAP_NAME,
+ key, sizeof(key), data, dlen);
else
- r = nft_del_element(nfnl, &messages[msgcnt++], af, NFT_SYSTEMD_DNAT_MAP_NAME, key, sizeof(key), data, dlen);
+ r = nft_del_element(nfnl, &messages[msgcnt++], af_to_nfproto(af), NFT_SYSTEMD_TABLE_NAME, NFT_SYSTEMD_DNAT_MAP_NAME,
+ key, sizeof(key), data, dlen);
if (r < 0)
return r;