END:
OUTPUT:
RETVAL
+
+bool
+remove_address(session, setname, address)
+ struct ipset_session *session;
+ const char *setname;
+ const char *address;
+
+ PREINIT:
+ enum ipset_cmd cmd = IPSET_CMD_DEL;
+ const struct ipset_type *type;
+
+ CODE:
+ // Assign setname as session data.
+ int r = ipset_session_data_set(session, IPSET_SETNAME, setname);
+ if (r < 0) {
+ goto ERROR;
+ }
+
+ // Get the set type.
+ type = ipset_type_get(session, cmd);
+ if (type = NULL) {
+ goto ERROR;
+ }
+
+ // Parse and try to add the given address to the session data.
+ r = ipset_parse_ip(session, IPSET_OPT_IP, address);
+ 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
#
# Get functions to ask for various data or receive error messages.
use strict;
use warnings;
-use Test::More tests => 16;
+use Test::More tests => 19;
BEGIN { use_ok('IPSet') };
#########################
$data = &IPSet::get_set_data($session, $testset{'name'});
ok($data->{entries} eq scalar(@addresses), "All addresses added successfully to the set");
+# Remove the first address from array from the set.
+my $remove = &IPSet::remove_address($session, $testset{'name'}, $addresses[0]);
+ok($remove, "Successfully removed $addresses[0] from testset");
+
+# Update set data.
+$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");
+
# CLEANUP: Delete the remaining set.
&IPSet::delete_set($session, $testset{'name'});