Re: execute a command after getting/loosing a IP-Address?

Oliver Fänger <[email protected]> Thu, 27 Nov 2003 17:49:40 +0100
Newsgroups gmane.comp.apache.mod-wackamole.general
Message-ID <[email protected]>
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
> [email protected]
> http://lists.backhand.org/mailman/listinfo/wackamole-users
>