# obtain the set name.
my ($a, $b, $c, $loc_src, $e) = split(/ /, $source);
- # Call function to load the networks list for this country.
- &ipset_restore($loc_src);
+ # Call function to load the networks list for this country,
+ # in case it is not loaded yet.
+ unless($ipset_loaded_sets{$loc_src}) {
+ # Print debug notice.
+ print "Loading set $loc_src\n" if ($DEBUG);
+
+ &Location::Functions::load_location($loc_src);
+
+ # Mark the set as loaded.
+ $ipset_loaded_sets{$loc_src} = "1";
+ }
push(@source_options, $source);
} elsif($source) {
# obtain the set name.
my ($a, $b, $c, $loc_dst, $e) = split(/ /, $destination);
- # Call function to load the networks list for this country.
- &ipset_restore($loc_dst);
+ # Call function to load the networks list for this country,
+ # if it is not loaded yet.
+ unless($ipset_loaded_sets{$loc_dst}) {
+ # Print debug notice.
+ print "Loading set $loc_dst\n" if ($DEBUG);
+
+ &Location::Functions::load_location($loc_dst);
+
+ # Mark the set as loaded.
+ $ipset_loaded_sets{$loc_dst} = "1";
+ }
push(@destination_options, $destination);
} elsif ($destination) {
# is enabled.
foreach my $location (@locations) {
if(exists $locationsettings{$location} && $locationsettings{$location} eq "on") {
- # Call function to load the networks list for this country.
- &ipset_restore($location);
+ # Call function to load the networks list for this country, if not
+ # loaded yet.
+ unless($ipset_loaded_sets{$location}) {
+ # Print debug notice.
+ print "Loading set $location\n" if ($DEBUG);
+
+ &Location::Functions::load_location($location);
+
+ # Mark the set as loaded.
+ $ipset_loaded_sets{$location} = "1";
+ }
# Call iptables and create rule to use the loaded ipset list.
run("$IPTABLES -A LOCATIONBLOCK -m set --match-set $location src -j DROP");
# Exit if there is no red interface.
return unless($RED_DEV);
- # Call function to load the network list of hostile networks.
- &ipset_restore($HOSTILE_CCODE);
+ # Call function to load the network list of hostile networks, if not loaded yet.
+ unless ($ipset_loaded_sets{$HOSTILE_CCODE}) {
+ # Print debug notice.
+ print "Loading set $HOSTILE_CCODE\n" if ($DEBUG);
+
+ &Location::Functions::load_location($HOSTILE_CCODE);
+
+ # Mark the set as loaded.
+ $ipset_loaded_sets{$HOSTILE_CCODE} = "1";
+ }
# Check traffic in incoming/outgoing direction and drop if it matches
run("$IPTABLES -A HOSTILE -i $RED_DEV -m set --match-set $HOSTILE_CCODE src -j HOSTILE_DROP_IN");