]> git.ipfire.org Git - people/stevee/perl-ipset.git/commitdiff
Add support for swapping sets.
authorStefan Schantl <stefan.schantl@ipfire.org>
Mon, 15 Aug 2022 16:27:24 +0000 (18:27 +0200)
committerStefan Schantl <stefan.schantl@ipfire.org>
Mon, 15 Aug 2022 16:27:24 +0000 (18:27 +0200)
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
IPSet.xs
t/IPSet.t

index 4f9e7713c35ce31c66559f9a35ec365735799692..024f5afda44dbdc582c46f3d09f964fde528338d 100644 (file)
--- 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;
index 684dd3162a2ea9296c12f1b1d01fa53cc6808dfe..8d5da7f7c3cb388a2a370f889947179d859cfe03 100644 (file)
--- 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);