[linux] Re: ADSL en default route (Aanvulling)

Kees Theunissen theuniss op rijnh.nl
Do Aug 3 03:16:39 CEST 2006


On Wed, 2 Aug 2006, Marc Fellman wrote:

>> Ah, maar dan heb je eigenlijk te maken met een point-to-point link. Die
>> heeft helemaal geen netmask, alleen twee IP's. Dat krijg je zo:
>>
>> ifconfig eth0 <jouwip> pointopoint <remoteip> netmask 255.255.255.255
>>
>> Dan is je gateway <remoteip> en is dus inderdaad niet in de buurt van
>> <jouwip>. Maar ik weet niet hoe dat via DHCP opgesteld kan worden...
>>
>
>Ik heb ook nog geen idee. Voorlopig ben ik maar begonnen aan een
>script. Hieronder staat het prototype en ik ben van plan dit script
>elke minuut te draaien zodat het automagisch de routes toevoegt als de
>interface in de lucht komt. Er zullen vast nog wel onvolkomenheden in
>zitten (Ik moet geloof ik ook nog even afvragen of er wel een zinnig
>IP-nummer op de externe interface zit (RED)).

Voor mijn gevoel ben je veel te moeilijk bezig. Als het in het verleden
gewerkt heeft met standaard tools dan zou het nu ook moeten kunnen
werken met standaard tools. Dat zou een kwestie kunnen zijn van de juiste
opties kiezen bij de installatie, of naderhand de juiste packages nog
installeren en activeren.
Ik ken jouw distributie niet en kan dus weinig concreets zeggen.
Maar bij een point-to-point verbinding met adsl denk ik toch al heel
snel aan "ppp over ethernet". Ik gebruik dat zelf niet, maar mijn
slackware 10.2 heeft het volgende ter beschikking:

kees op pcict9:~$ man -k pppoe
adsl-connect        (8) - Shell script to manage a PPPoE link
adsl-setup          (8) - Shell script to configure Roaring Penguin
                          PPPoE client
adsl-start          (8) - Shell script to bring up a PPPoE link
adsl-status         (8) - Shell script to report on status of PPPoE link
adsl-stop           (8) - Shell script to shut down a PPPoE link
pppoe               (8) - user-space PPPoE client
pppoe-relay         (8) - user-space PPPoE relay agent
pppoe-server        (8) - user-space PPPoE server
pppoe-sniff         (8) - examine network for non-standard PPPoE frames
pppoe.conf [pppoe]  (5) - Configuration file used by adsl-start(8),
                          adsl-stop(8), adsl-status(8) and adsl-connect(8)

Zoek eens in deze richting in plaats van zelf je scripts te hacken.


>
>Hieronder mijn (prototype) script:

Zomaar een paar algemene opmerkingen.
Dat staat meestal los van de functie van het script. Het heeft meer te
maken met robuust programmeren.

><BEGIN>
>#!/bin/bash
>
>PUMPTIME=`date|cut -b 10-16`

Die "cut -b 10-16" maakt je erg afhankelijk van de exacte output die
"date" prodceert. Er hoeft maar iets te veranderen in de layout van
"date" en je script werkt niet meer.
Eerst maar eens kijken wat je precies wilt.

kees op pcict9:~$ date
Thu Aug  3 00:49:56 CEST 2006
kees op pcict9:~$ date|cut -b 10-16
3 00:50

Hmm. Dag_van_de_maand uur:minuut.
Maar bedoelde je niet "cut -b 9-16"?
Of wreekt zich hier al het feit dat ik een andere versie van date heb
dan jij?

kees op pcict9:~$ date|cut -b 9-16
 3 00:50

Ook vanaf 10 augustus tot en met 31 augustus geeft "date|cut -b 9-16"
de volledige dag weer. Terwijl "date|cut -b 10-16" dan, bij mij
althans, alleen maar het laatste cijfer van de dag zou geven.
Maar je hoeft je helemaal niet afhankelijk te maken van dit soort
details in de output van "date". Je hebt een uitgebreid scala aan
opties om zelf de output van "date" te bepalen.
Bijvoorbeeld:

kees op pcict9:~$ date "+%e %H:%M"
 3 00:50

>DHCPTEST=`ps -eaf|grep "dhclient -pf"|grep -v grep|wc -l`

Dit heeft misschien meer met smaak te maken dan met robuustheid.
Persoonlijk heb ik een erge hekel aan die "grep -v grep" na een
"ps .... | grep .... |" in een pipe.
Als je voor de eerste "grep" een regular expression kunt vinden die
wel de goede output geeft, maar die niet de _letterlijke_ tekst bevat
die je zoekt, dan heb je daarna die "grep -v grep" niet meer nodig.
In dit geval zou je bijvoorbeeld hetzelfde resultaat krijgen met:

DHCPTEST=`ps -eaf|grep "[d]hclient -pf"|wc -l`

>DHCPPID=`ps -eaf|grep "dhclient -pf"|grep -v grep|cut -b 11-16`

Weer die "grep -v grep".
En die "cut -b 11-16" waarvoor hetzelfde geldt als hiervoor bij de
output van "date". Ik denk dat het robuuster is om met bijvoorbeeld
"awk" de tweede "space delimmeted" kolom uit te printen dan om met
"cut -b" exacte posities in de output van "ps -eaf" op te geven.
Dat wordt dan bijvoorbeeld:

DHCPPID=`ps -eaf|grep "dhclient -pf"|grep -v grep|awk '{print $2}'`

En als je dan toch besluit om "awk" te gebruiken dan kan je ook in een
moeite door met dezelfde "awk" de filtering doen die je nu met twee
"grep's" doet:

DHCPPID=`ps -eaf | awk '/[d]hclient -pf/ {print $2}'`

Overigens kent "ps" ook nog de optie "-o format" waarmee je je
sripts onafhankelijk kunt maken van de kolom-layout van "ps -eaf".
De manpage zegt daar over:

-o format       user-defined format.
                format is a single argument in the form of a blank-separated
                or comma-separated list, which offers a way to specify
                individual output columns. The recognized keywords are
                described in the STANDARD FORMAT SPECIFIERS section below.
[knip]

>REDINTF=`cat /var/efw/uplinks/main/settings|grep RED_DEV|cut -f 2 -d "="`
>REDUP=`netstat -rn|grep ${REDINTF}|wc -l`
>PUMPUP=`ps -eaf|grep "pump"|grep -v "pump"|wc -l`

Bedoelde je hier:

PUMPUP=`ps -eaf|grep "pump"|grep -v grep|wc -l`

>Ik hoor graag aanvullingen.

Bij deze.

>Ik moet misschien in plaats van op een bepalde time stamp greppen op
>de pid van pumpd in mijn messages maar dat volgt nog.

Als je dit script met cron elke minuut draait, dan heb je een grote
kans dat het sript aan het begin van een minuut gestart wordt.
Je time stamp ( ${PUMPTIME} ) valt dan ook in die minuut, maar de
laatste log van "pumpd" kan in een eerdere minuut geweest zijn.
Je krijgt dan geen output met:

GATEWAY=`tail -1000 /var/log/messages|grep "${PUMPTIME}"| \
   grep "pumpd"|grep "gateway"|cut -f 9 -d" "|tail -1`

Waarom zie je niet af van die hele time stamp?
Je kan toch gewoon de laatste "gateway" gebruiken die "pumpd"
heeft gelogd?

GATEWAY=`grep "pumpd" /var/log/messages | \
         grep "gateway" | tail -1 | cut -f 9 -d" "`



Ik heb trouwens nog steeds het gevoel dat je met dit script op de
verkeerde weg zit. Had ik je al aangeraden om eerst eens naar de
standaard pppoe tools te kijken?   :-)


Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica "Rijnhuizen", Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204



More information about the Linux mailing list