]> git.ipfire.org Git - people/stevee/perl-ipset.git/commitdiff
Add support for flushing sets.
authorStefan Schantl <stefan.schantl@ipfire.org>
Sat, 17 Sep 2022 14:10:39 +0000 (16:10 +0200)
committerStefan Schantl <stefan.schantl@ipfire.org>
Sat, 17 Sep 2022 14:10:39 +0000 (16:10 +0200)
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
IPSet.xs
t/IPSet.t

index 160bfa90fbc366c92144701b3b94a9fa9c19c67c..71c29d9c7b6be5ebad5ce5b161fee46a0de1e9b3 100644 (file)
--- a/IPSet.xs
+++ b/IPSet.xs
@@ -301,6 +301,39 @@ swap_set(session, setname, setname2)
        OUTPUT:
                RETVAL
 
+bool
+flush_set(session, setname)
+       struct ipset_session *session;
+       const char *setname;
+
+       PREINIT:
+               enum ipset_cmd cmd = IPSET_CMD_FLUSH;
+
+       CODE:
+               // Assign the setname to the session data.
+               int r = ipset_session_data_set(session, IPSET_SETNAME, setname);
+               if (r < 0) {
+                       goto ERROR;
+               }
+
+               r = ipset_cmd(session, cmd, 0);
+               if (r < 0) {
+                       goto ERROR;
+               }
+
+               RETVAL = true;
+
+               goto END;
+
+               ERROR:
+                       RETVAL = false;
+
+                       // Reset session data.
+                       ipset_data_reset(ipset_session_data(session));
+               END:
+       OUTPUT:
+               RETVAL
+
 bool 
 setname_exists(session, setname)
        struct ipset_session *session;
index 76bd249280606f61098d3ea91b243bb1976622b5..375690ba14ae69d59931ab3f23cca654383d4862 100644 (file)
--- a/t/IPSet.t
+++ b/t/IPSet.t
@@ -8,7 +8,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 19;
+use Test::More tests => 21;
 BEGIN { use_ok('IPSet') };
 
 #########################
@@ -93,5 +93,13 @@ $data = &IPSet::get_set_data($session, $testset{'name'});
 ok($data->{entries} lt scalar(@addresses), "Less entries in the set than at the addresses array");
 ok($data->{entries} gt 0, "At least one entry on the testset");
 
+# Flush the set.
+my $flush = &IPSet::flush_set($session, $testset{'name'});
+ok($flush, "Successfully flushed the testset.");
+
+# Update set data.
+$data = &IPSet::get_set_data($session, $testset{'name'});
+ok($data->{entries} eq 0, "No entries anymore in the testset.");
+
 # CLEANUP: Delete the remaining set.
 &IPSet::delete_set($session, $testset{'name'});