scripts/update-cmd.pl: run update two times
authorFelix Fietkau <nbd@nbd.name>
Mon, 29 Aug 2022 11:16:47 +0000 (13:16 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 29 Aug 2022 11:16:49 +0000 (13:16 +0200)
Removing an IP address can clear device routes with matching network/mask.
Running the update a second time ensures that they get recreated

Signed-off-by: Felix Fietkau <nbd@nbd.name>
scripts/update-cmd.pl

index b908ff46d07cd7761026bde9e3cf60e8bc5f09e6..788a92118d8fd79795fe24eb7a4ccdd00ed0c5d5 100755 (executable)
@@ -188,23 +188,25 @@ my $json = $ARGV[0];
 my $platform = `uname`;
 my $data = JSON::PP::decode_json($json) or die "Failed to decode JSON data\n";
 
-my $delete = create_state();
-my $add = create_state();
-
-if ($platform =~ /Darwin/) {
-       fetch_active_data_darwin($data->{ifname}, $delete);
-} elsif ($platform =~ /Linux/) {
-       fetch_active_data_linux($data->{ifname}, $delete);
-} else {
-       die "Unsupported platform $platform\n";
-}
+foreach my $round (1 .. 2) {
+       my $delete = create_state();
+       my $add = create_state();
+
+       if ($platform =~ /Darwin/) {
+               fetch_active_data_darwin($data->{ifname}, $delete);
+       } elsif ($platform =~ /Linux/) {
+               fetch_active_data_linux($data->{ifname}, $delete);
+       } else {
+               die "Unsupported platform $platform\n";
+       }
 
-update_data($data, $delete, $add);
+       update_data($data, $delete, $add);
 
-if ($platform =~ /Darwin/) {
-       set_active_data_darwin($data->{ifname}, $delete, $add);
-} elsif ($platform =~ /Linux/) {
-       set_active_data_linux($data->{ifname}, $delete, $add);
+       if ($platform =~ /Darwin/) {
+               set_active_data_darwin($data->{ifname}, $delete, $add);
+       } elsif ($platform =~ /Linux/) {
+               set_active_data_linux($data->{ifname}, $delete, $add);
+       }
 }
 
 # print Data::Dumper->Dump([$add, $delete], ["add", "delete"])."\n";