nft: ensure to assign rule id only once

Make sure an assigned id is not overwritten.

So far this function was guaranteed to be called only once. But I would
like to allow getting the nftables ruleset string more than once in a
future patch. Prepare that.

Change-Id: I4e8c48c01fb2f5d4cfd223fe03abbf15b1a55670
This commit is contained in:
Neels Janosch Hofmeyr
2022-12-07 23:51:21 +01:00
parent bd737c14fa
commit 08af1f15f8
2 changed files with 7 additions and 2 deletions

View File

@@ -42,6 +42,7 @@ struct upf_nft_tunmap_desc {
struct osmo_sockaddr gtp_remote_addr;
uint32_t remote_teid;
} core;
/* id as in ruleset name 'tunmap<id>'. If zero, no id has been assigned yet. */
uint32_t id;
};

View File

@@ -215,8 +215,12 @@ int upf_nft_tunmap_create(struct upf_nft_tunmap_desc *tunmap)
struct upf_nft_args args;
/* Give this tunnel mapping a new id, returned to the caller so that the tunnel mapping can be deleted later */
g_upf->nft.next_id_state++;
tunmap->id = g_upf->nft.next_id_state;
if (!tunmap->id) {
g_upf->nft.next_id_state++;
if (!g_upf->nft.next_id_state)
g_upf->nft.next_id_state++;
tunmap->id = g_upf->nft.next_id_state;
}
upf_nft_args_from_tunmap_desc(&args, tunmap);
return upf_nft_run(upf_nft_ruleset_tunmap_create_c(OTC_SELECT, &args));