|
|
Re: execute a command after getting/loosing a IP-Address?: msg#00014
apache.mod-wackamole.general
|
Subject: |
Re: execute a command after getting/loosing a IP-Address? |
This is exactly what i was looking for.
I've just checked out from the cvs and will try it tomorow.
Btw.: your 'Browsable via web through viewcvs here.' link is broken.
Thanx a lot
Oliver Fänger
Theo Schlossnagle schrieb:
On Nov 27, 2003, at 10:13 AM, Ryan Caudy wrote:
So, we don't provide any solutions to this problem within Wackamole.
However, I'm sure someone else has had to deal with it, and might
answer you with something they've already developed. (This is a big
holiday in the US, which means a lot of people on the list probably
won't be responding for a few days).
The solution you proposed is probably the quickest and dirtiest way to
get what you want. If you wanted something more powerful, using the
same mechanism to run a pair of shell-scripts "Acquire-script" and
"Release-script" would give this to you. However, I'd be a little
worried about doing so in a general situation, because of the
privileges with which Wackamole is run.
I wouldn't recommend adding anything too complicated directly to
Wackamole, because of timing concerns. You might consider a
long-running daemon to handle this failover, that communicates
(something along the lines of "Acquire/Release address") with
Wackamole via named pipes or another Unix IPC mechanism.
Actually, wackamole in CVS has embedded an embedded perl interpreter in
it. So you can do crazy stuff like that. It is mostly untested and
undocumented, but I have used it. It also has the ability to dlopen
shared objects and run code in those -- if you'd rather write in C.
Perl works something like this in your wackamole.conf:
PerlUseLib .
PerlUse example
RunDynamic example::hup_named on up
In the local directory (.) example.pm looks like:
-- begin --
package example;
use strict;
use Data::Dumper;
sub hup_named {
my $pid;
open(A,"</var/run/named.pid") && chomp($pid = <A>);
close(A);
kill 1, $pid if($pid);
}
1;
-- end --
The following will dlopen funcs.so and run the function returned by
dlsym("shoutout"):
RunDynamic funcs:shoutout on up
A simple funcs.c is:
-- begin --
#include "config.h"
void killhup(struct interface p,
struct interface *e,
struct interface r) {
fprintf(stderr, "I am here with IP %s\n", inet_ntoa(p.ipaddr));
}
-- end --
All this being development work -- YMMV.
// Theo Schlossnagle
// Principal Engineer -- http://www.omniti.com/~jesus/
// Postal Engine -- http://www.postalengine.com/
// Ecelerity: fastest MTA on earth
_______________________________________________
wackamole-users mailing list
wackamole-users@xxxxxxxxxxxxxxxxxx
http://lists.backhand.org/mailman/listinfo/wackamole-users
|
|