From: Stefan Schantl Date: Mon, 15 Aug 2022 16:27:24 +0000 (+0200) Subject: Add support for swapping sets. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c88747a3291d2f2a391b2d93b24ee895c32d322e;p=people%2Fstevee%2Fperl-ipset.git Add support for swapping sets. Signed-off-by: Stefan Schantl --- diff --git a/IPSet.xs b/IPSet.xs index 4f9e771..024f5af 100644 --- a/IPSet.xs +++ b/IPSet.xs @@ -183,6 +183,43 @@ rename_set(session, setname, new_setname) RETVAL +bool +swap_set(session, setname, setname2) + struct ipset_session *session; + const char *setname; + const char *setname2; + + PREINIT: + enum ipset_cmd cmd = IPSET_CMD_SWAP; + + CODE: + // Assign the setname to the session data. + int r = ipset_session_data_set(session, IPSET_SETNAME, setname); + if (r < 0) { + printf("Could not set setname: %s\n", + ipset_session_report_msg(session)); + } + + // Assign the second set data. + r = ipset_session_data_set(session, IPSET_OPT_SETNAME2, setname2); + if (r < 0) { + printf("Could not assign second set name: %s\n", + ipset_session_report_msg(session)); + } + + r = ipset_cmd(session, cmd, 0); + if (r < 0) { + printf("Command failed: %s\n", + ipset_session_report_msg(session)); + + RETVAL = false; + } + + RETVAL = true; + + OUTPUT: + RETVAL + bool setname_exists(session, setname) struct ipset_session *session; diff --git a/t/IPSet.t b/t/IPSet.t index 684dd31..8d5da7f 100644 --- a/t/IPSet.t +++ b/t/IPSet.t @@ -8,7 +8,7 @@ use strict; use warnings; -use Test::More tests => 6; +use Test::More tests => 7; BEGIN { use_ok('IPSet') }; ######################### @@ -39,6 +39,14 @@ ok($renamed, "Rename successfull."); $exists = &IPSet::setname_exists($session, $setname_renamed); ok($exists, "Renamed testset exists."); +# Create a second set for swap testing. +&IPSet::create_set($session, $setname, "hash:ip", "1024", "10"); +my $swap = &IPSet::swap_set($session, $setname, $setname_renamed); +ok($swap, "Successfully swapped sets."); + # Delete the renamed testset. my $delete = &IPSet::delete_set($session, $setname_renamed); ok($delete, "Successfully deleted set."); + +# CLEANUP: Delete the remaining set. +&IPSet::delete_set($session, $setname);