On Tue, Aug 16, 2005 at 10:09:49AM -0300, Felipe Mesquita wrote:
> in-kernel pppoe. Anyway, I've made the script that checks for the
> device ip, and Croned it every 3 minutes (Depending on the needs
> it can be higher..)

I took the smarts of your script, and also wrote a simple logging
tool.  It's just a wrapper for the syslog(3) function call (that
allows you to log to syslog via the shell).

In root's crontab, I have this entry:

*       *       *       *       *       /usr/local/sbin/chkpppoe.sh

The chkpppoe.sh script looks like this:

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
SYSLOGGER=/usr/local/sbin/syslogger
IFACE=pppoe0
PROGNAME=chkpppoe.sh

VAR=`ifconfig ${IFACE} | grep "inet " | cut -c 7`

if [ $VAR = "0" ];
    then
        ${SYSLOGGER} "${PROGNAME}: ${IFACE} appears to be down; attempting to 
bring it back up"
        ifconfig ${IFACE} up
        sleep 60
    else
        ${SYSLOGGER} "${PROGNAME}: ${IFACE} appears to be up; doing nothing"
fi

#end of chkpppoe.sh

The 'syslogger' program is this trivial program:


/* syslogger.c begin */
#include <syslog.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DEFAULT_PRIORITY LOG_INFO
#define DEFAULT_PRIORITY_STRING "LOG_INFO"

void usage (int argc, char* argv[])
{
        printf ("usage: %s [-ln] <\"user message\">\n",
                        argv[0]);
        printf ("where -ln specifies the log level, an n is is one of\n"
                        "\t-l0 LOG_EMERG\n"
                        "\t-l1 LOG_ALERT\n"
                        "\t-l2 LOG_CRIT\n"
                        "\t-l3 LOG_ERR\n"
                        "\t-l4 LOG_WARNING\n"
                        "\t-l5 LOG_NOTICE\n"
                        "\t-l6 LOG_INFO (default)\n"
                        "\t-l7 LOG_DEBUG\n"
                   );

        exit(EXIT_SUCCESS);
}

int main (int argc, char* argv[])
{
        int priority = DEFAULT_PRIORITY;
        char* msg = NULL;

        switch (argc) {
                case 3:
                        if ( (3==strlen(argv[1])) &&
                                        (0==strncmp("-l", argv[1], 2)) ) {
                                priority = (int)strtol(&argv[1][2], 
(char**)NULL, 10);
                                if ( (priority < 0) || (priority > 7) ) {
                                        fprintf(stderr, 
                                                        "warning: no such 
priority: %i; defaulting to "
                                                        "%s\n", priority, 
DEFAULT_PRIORITY_STRING);
                                        priority = DEFAULT_PRIORITY;
                                }
                        }
                        else {
                                fprintf(stderr, 
                                                "warning: invalid option '%s'; 
defaulting to "
                                                "%s\n", argv[1], 
DEFAULT_PRIORITY_STRING);
                                priority = DEFAULT_PRIORITY;
                        }
                        msg = argv[2];
                        break;
                case 2:
                        msg = argv[1];
                        break;
                default:
                        usage(argc,argv);
        }

        syslog(priority, "%s", msg);

        return 0;
}
/* syslogger.c end */

I just saw the program actually work, and can verify it in
/var/log/messages:

...
Aug 23 09:14:01 excrement syslogger: chkpppoe.sh: pppoe0 appears to be up; 
doing nothing
Aug 23 09:14:08 excrement /bsd: pppoe0: down
Aug 23 09:14:08 excrement /bsd: pppoe0: phase terminate
Aug 23 09:14:16 excrement /bsd: pppoe0: phase dead
Aug 23 09:15:01 excrement syslogger: chkpppoe.sh: pppoe0 appears to be down; 
attempting to bring it back up
Aug 23 09:15:01 excrement /bsd: pppoe0: phase establish
Aug 23 09:15:01 excrement /bsd: pppoe0: phase authenticate
Aug 23 09:15:03 excrement /bsd: pppoe0: phase network
Aug 23 09:16:01 excrement syslogger: chkpppoe.sh: pppoe0 appears to be up; 
doing nothing
...


Hopefully someone finds this useful :)

Matt

-- 
Matt Garman
email at: http://raw-sewage.net/index.php?file=email

Reply via email to