]> git.ipfire.org Git - people/mfischer/ipfire-2.x.git/blobdiff - src/scripts/connscheduler
Merge branch 'master' into next
[people/mfischer/ipfire-2.x.git] / src / scripts / connscheduler
index 9a4e44fe83f8fdb341594a6ab8533dce21455b51..a6de9cf721b3ea58c15c52092ddc88d5e9f42759 100644 (file)
@@ -1,16 +1,29 @@
 #!/usr/bin/perl
-#
-# IPFire Connection Scheduler (F)Cron Job
-#
-# This code is distributed under the terms of the GPL
-#
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2022  IPFire Team  <info@ipfire.org>                     #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
 
 use strict;
 
 require '/var/ipfire/general-functions.pl';
 require '/var/ipfire/connscheduler/lib.pl';
 
-
 # seems to be necessary
 my $sleep_after_profile = 5;
 
@@ -62,6 +75,9 @@ exit 0;
 #
 sub hangup
 {
+  # Kill connectd if running to prevent redial
+  system('/bin/killall', 'connectd');
+
   unless ( -e "${General::swroot}/red/active" )
   {
     &General::log("ConnSched already disconnected");
@@ -69,17 +85,20 @@ sub hangup
   }
 
   &General::log("ConnSched disconnect");
-  unless ( system('/etc/rc.d/rc.red', 'stop') == 0 )
+  unless ( system('/etc/rc.d/init.d/network', 'stop', 'red') == 0 )
   {
     &General::log("ConnSched disconnect failed: $?");
     return;
   }
 
-  # now wait for active triggerfile and ppp daemon to disappear 
+  # now wait for active triggerfile and ppp daemon to disappear
+  # wait maximum 60 seconds
+  my $counter = 60;
   sleep 1;
-  while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipcop.pid' ) 
+  while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipfire.pid' || $counter == 0 )
   {
     sleep 1;
+    $counter--;
   }
 }
 
@@ -93,7 +112,7 @@ sub dial
   }
 
   &General::log("ConnSched connect");
-  unless ( system('/etc/rc.d/rc.red', 'start') == 0 )
+  unless ( system('/etc/rc.d/init.d/network', 'start', 'red') == 0 )
   {
     &General::log("ConnSched connect failed: $?");
     return;
@@ -112,6 +131,15 @@ sub dial
 sub reconnect
 {
   &hangup() if ( -e "${General::swroot}/red/active" );
+  # now wait for active triggerfile and ppp daemon to disappear
+  # wait maximum 60 seconds
+  my $counter = 60;
+  sleep 1;
+  while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipfire.pid' || $counter == 0 )
+  {
+    sleep 1;
+    $counter--;
+  }
   &dial();
 }
 
@@ -145,14 +173,14 @@ sub profile
   # Method to change Profile from pppsetup.cgi
        unlink("${General::swroot}/ppp/settings");
        link("${General::swroot}/ppp/settings-$profile", "${General::swroot}/ppp/settings");
-       system ("/bin/touch", "${General::swroot}/ppp/updatesettings");
+       system ("/usr/bin/touch", "${General::swroot}/ppp/updatesettings");
 
   if ( $restart_red == 1 )
   {
     ## FIXME: do we need to do this ?
     sleep($sleep_after_profile);
     &dial();
-  }  
+  }
 }
 
 
@@ -184,7 +212,7 @@ sub timer
     }
 
 
-    if ( $CONNSCHED::config[$i]{'ACTION'} eq 'reconnect' )    
+    if ( $CONNSCHED::config[$i]{'ACTION'} eq 'reconnect' )
     {
       &reconnect()
     }
@@ -210,5 +238,19 @@ sub timer
       &General::log("ConnSched shutdown");
        system ("/usr/local/bin/ipfirereboot", "down");
     }
+    elsif ( $CONNSCHED::config[$i]{'ACTION'} eq 'ipsecstart' )
+    {
+      &General::log("ConnSched ipsecstart");
+       system ("/usr/local/bin/ipsecctrl", "S");
+    }
+    elsif ( $CONNSCHED::config[$i]{'ACTION'} eq 'ipsecstop' )
+    {
+      &General::log("ConnSched ipsecstop");
+       system ("/usr/local/bin/ipsecctrl", "D");
+    }
+    else
+    {
+      # okay ? an event we don't know about
+    }
   }
 }