mirror of https://github.com/toreanderson/clatd
New feature: script-up/down
Adds the possibility of making clatd run a custom script while starting up or shutting down.
This commit is contained in:
parent
a80e2f30ab
commit
0bc3bbd797
51
README.pod
51
README.pod
|
|
@ -119,6 +119,57 @@ Set this to 1 to get debugging output from B<clatd>, or 2 to get even more of
|
||||||
the stuff. These are the equivalent of providing the command line option I<-d>
|
the stuff. These are the equivalent of providing the command line option I<-d>
|
||||||
the specified number of times.
|
the specified number of times.
|
||||||
|
|
||||||
|
=item B<script-up=string> (no default)
|
||||||
|
|
||||||
|
Specify a custom script to be run when B<clatd> is starting up. The invocation
|
||||||
|
of this script is the last thing that happens before TAYGA starts up, so all
|
||||||
|
the preparations have been completed at that point (i.e., the B<clat-dev>
|
||||||
|
exists and has routing/addressing configured, forwarding has been enabled, and
|
||||||
|
so on).
|
||||||
|
|
||||||
|
The script is run by the system shell, so you can do everything you could in an
|
||||||
|
interactive shell: run multiple commands by separating them by semi-colon or
|
||||||
|
double ampersands, use standard if/else statements, use variable substitutions,
|
||||||
|
redirect output to files, set up command pipelines, and so on. However it must
|
||||||
|
all be on one line, so if you want to do complex things or use some other
|
||||||
|
programming language it's probably better to put the script itself in a
|
||||||
|
separate executable file and just make B<script-up> invoke that file instead.
|
||||||
|
|
||||||
|
If the script returns a nonzero exit status, this is considered a fatal error,
|
||||||
|
and B<clatd> will abort. This can be prevented by appending I<|| true> at the
|
||||||
|
end of the script.
|
||||||
|
|
||||||
|
All of B<clatd>'s configuration settings are available as standard variables in
|
||||||
|
the script's environment (hyphens are replaced with underscores).
|
||||||
|
|
||||||
|
Logging or debug messages from the script may simply be sent to stdout, where
|
||||||
|
it will be picked up by the init system along with B<clatd>'s own output. The
|
||||||
|
script may of course consult the I<$quiet> and I<$debug> environment variables
|
||||||
|
in order to determine how much output is appropriate.
|
||||||
|
|
||||||
|
The script should not be enclosed in quotes in the configuration file (even
|
||||||
|
though it contains whitespace). For example:
|
||||||
|
|
||||||
|
B<script-up=echo `date -Ins`: clatd started on $clat_dev | tee -a ~/clatd.log>
|
||||||
|
|
||||||
|
If on the other hand you want to supply a B<script-up> containing whitespace
|
||||||
|
directly B<clatd>'s command line, quoting is required in order to prevent the
|
||||||
|
shell from splitting it up and into multiple command line arguments. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
B<clatd 'script-up=ip route add 192.0.2.0/24 dev $clat_dev || true'>
|
||||||
|
|
||||||
|
=item B<script-up=string> (no default)
|
||||||
|
|
||||||
|
This works exactly the same as B<script-up>, only that this script is run right
|
||||||
|
after TAYGA has exited, before the clean-up process of restoring any settings
|
||||||
|
that were changed.
|
||||||
|
|
||||||
|
An unsuccessful exit code from B<script-down> will cause B<clatd> to exit
|
||||||
|
unsuccessfully too. Beyond that an unsuccessful exit won't change anything,
|
||||||
|
because B<script-down> is invoked at a point in time where the only thing left
|
||||||
|
for B<clatd> to do is to clean up after itself and exit anyway.
|
||||||
|
|
||||||
=item B<clat-dev=string> (default: I<clat>)
|
=item B<clat-dev=string> (default: I<clat>)
|
||||||
|
|
||||||
The name of the network device used by the CLAT. There should be no reason to
|
The name of the network device used by the CLAT. There should be no reason to
|
||||||
|
|
|
||||||
21
clatd
21
clatd
|
|
@ -20,6 +20,8 @@ my $VERSION = "1.3";
|
||||||
my %CFG;
|
my %CFG;
|
||||||
$CFG{"quiet"} = 0; # suppress normal output
|
$CFG{"quiet"} = 0; # suppress normal output
|
||||||
$CFG{"debug"} = 0; # debugging output level
|
$CFG{"debug"} = 0; # debugging output level
|
||||||
|
$CFG{"script-up"} = undef; # sh script to run when starting up
|
||||||
|
$CFG{"script-down"} = undef; # sh script to run when shutting down
|
||||||
$CFG{"clat-dev"} = "clat"; # TUN interface name to use
|
$CFG{"clat-dev"} = "clat"; # TUN interface name to use
|
||||||
$CFG{"clat-v4-addr"} = "192.0.0.1"; # from RFC 7335
|
$CFG{"clat-v4-addr"} = "192.0.0.1"; # from RFC 7335
|
||||||
$CFG{"clat-v6-addr"} = undef; # derive from existing SLAAC addr
|
$CFG{"clat-v6-addr"} = undef; # derive from existing SLAAC addr
|
||||||
|
|
@ -879,6 +881,18 @@ if(cfgbool("v4-defaultroute-enable")) {
|
||||||
cmd(\&err, cfg("cmd-ip"), @cmdline);
|
cmd(\&err, cfg("cmd-ip"), @cmdline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Inject %CFG into %ENV and then run the up script
|
||||||
|
for my $key (sort keys(%CFG)) {
|
||||||
|
my $var = $key;
|
||||||
|
$var =~ y/-/_/;
|
||||||
|
d2(sprintf("Script env: %s=%s", $key, $CFG{$key} || ''));
|
||||||
|
$ENV{$var} = $CFG{$key};
|
||||||
|
}
|
||||||
|
if(cfg("script-up")) {
|
||||||
|
d("Running custom startup script: ", cfg("script-up"));
|
||||||
|
cmd(\&err, cfg("script-up"));
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# All preparation done! We can now start TAYGA, which will handle the actual
|
# All preparation done! We can now start TAYGA, which will handle the actual
|
||||||
# translation of IP packets.
|
# translation of IP packets.
|
||||||
|
|
@ -899,6 +913,11 @@ $SIG{'INT'} = 'DEFAULT';
|
||||||
$SIG{'TERM'} = 'DEFAULT';
|
$SIG{'TERM'} = 'DEFAULT';
|
||||||
|
|
||||||
#
|
#
|
||||||
# TAYGA exited, probably because we're shutting down. Cleanup and exit.
|
# TAYGA exited, probably because we're shutting down. Run the down script, then
|
||||||
|
# cleanup and exit.
|
||||||
#
|
#
|
||||||
|
if(cfg("script-down")) {
|
||||||
|
d("Running custom shutdown script: ", cfg("script-down"));
|
||||||
|
cmd(\&err, cfg("script-down"));
|
||||||
|
}
|
||||||
cleanup_and_exit(0);
|
cleanup_and_exit(0);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue