RFC: rc.inet1.smart

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

RFC: rc.inet1.smart

Messaggio da absinthe »

salve,

vi volevo mostrare una cosetta che ho fatto e vorrei avere un pò di commenti al riguardo.

premessa

la situazione è la seguente: la slack non ha nessun tool che consenta un avvio selettivo delle interfacce di rete. mi spiego meglio:
1- o configurate a mano le schede di rete una volta avviata la macchina e poi le attivate
2- oppure inserite i vari dati in rc.inet1.conf e lasciate che rc.inet1 le attivi per voi.

ora io ho un laptop e con esso una scheda cablata (eth0) ed una wireless(wlan0). accade che a seconda del luogo dove mi trovo debba usare o l'una o l'altra. finchè si usano ip statici no problem: rc.inet1 attiva le interfacce in maniera rapida. quando però si vuole/deve usare il dhcp occorre attendere che rc.inet1 lanci il demone dhcp e che esso acquisisca un ip per ogni interfaccia. ovviamente se un'interfaccia non è collegata alla rete il dhcp gira "a vuoto" andando in time out... questa attesa è un pò snervante... so che esistono applicativi che gestiscono la cosa in maniera intelligente (mi pare esista qualcosa su debian...) tuttavia sulla slack io avevo trovato 2 sole soluzioni:
1- accorciare il tempo di timeout
2-mettere in background l'esecuzione di dhcpcd...

la mia soluzione

dato che la cosa non mi piaceva molto, per il mio laptop ho fatto uno scriptino che cerca di attivare in maniera selettiva le interfacce... ovviamente è una cosa molto rude dato che l'ho fatta per il mio portatile che ha 1 wireless ed una wired... e che funziona senza wpa: quindi non è una soluzione completa per tutti. ma volevo sapere se poteva essere di aiuto...

la logica è questa: innanzi tutto viene data la precedenza alle schede wireless. se iwlist non trova alcuna rete il cui essid è stato configurato dall'utente allora le schede wireless non vengono fatte attivare a rc.inet1.
se invece è presente un essid indicato dall'amministratore allora la scheda wireless viene lasciata così com'è mentre vengono bypassate le schede wired. vi pasto lo script:

Codice: Seleziona tutto

#!/bin/sh
# /etc/rc.d/rc.inet1.smart
#
#	personal hack by MN
#
# rc.wireless code has been partially reused in this script
#
# This file contains the smart selector of network interfaces.
# usage:
#
#	rc.inet1.smart
#
#this script is usable if only one wireless devise is avaible...


# =============================================================================

ESSIDLIST=("casa" "smipp"  "pcmgroup" "Unifi02")
KEYLIST=("************** open" "************ open" "************** open" "off")

# Find the path where wireless tools are installed
for IWPATH in /usr/{bin,sbin} /usr/local/{bin,sbin} /sbin /bin ; do
	if [ -x $IWPATH/iwconfig ] ; then
		break ;
	fi
done

SCANCMD="$IWPATH/iwlist" #no check is done so BE sure you've it installed and setted in your path
SCANDIRECTIVE="scan"
CHECKCMD="$IWPATH/iwconfig"

#find position of wireless interface
j=0;
while [ $j -lt $MAXNICS ]; do
	[ -x $IWPATH/iwconfig ] || return 1
	LC_ALL=C $IWPATH/iwconfig "${IFNAME[$j]}" 2>&1 | \
	grep -Eiq "no wireless extensions|no such device" || break;
	j=$(($j+1))
done

WLAN_ESSID[$j]=""
IPADDR[$j]=""
AVAIBLENET=$($SCANCMD ${IFNAME[$j]} $SCANDIRECTIVE)
POWER_OLD=-1000;
w=-1
for (( k=0; k<${#ESSIDLIST[@]}; k++ )); do
	[ `echo "$AVAIBLENET" | grep ${ESSIDLIST[k]}` ] && {
		POWER=`echo "$AVAIBLENET" | grep -A7 ${ESSIDLIST[k]} | tail -1 | awk '{printf $3}' | cut -f2 -d = \
		| cut -f1 -d "/" `
		echo "detected wireless essid \"${ESSIDLIST[k]}\" with level: $POWER dB"
		[ $POWER -gt $POWER_OLD ] && { WLAN_ESSID[$j]=${ESSIDLIST[k]}; w=$k;}
		POWER_OLD=$POWER
	};
done

#if we haven't any matching net we disable dhcp and we leave IPADDR empty
#so rc.inet1 will skip this interface;
#else we set the right key and we disable wired devices (we need just one interface on a common laptop).
[ "${WLAN_ESSID[$j]}" = "" ] && { USE_DHCP[$j]=""; echo "switch to wired network";} || {
	WLAN_KEY[$j]="${KEYLIST[w]}";
	for (( k=0; k<$MAXNICS; k++ )); do
		[ ! $k -eq $j ] && { USE_DHCP[$k]=""; IPADDR[$k]=""; }
	done
	echo "selected wireless network: ${WLAN_ESSID[$j]}"
}
lo script deve essere lanciato da rc.inet1 prima di avviare le operzioni di avvio delle schede. io l'ho inserito qua, proprio prima dell'attivazione del loopback:

Codice: Seleziona tutto

##################################
# run my personal smart selector #
##################################
. /etc/rc.d/rc.inet1.smart

######################
# LOOPBACK FUNCTIONS #
######################
che ne pensate?

ciao,
M
Ultima modifica di absinthe il lun 9 lug 2007, 21:38, modificato 2 volte in totale.

Avatar utente
dapuzz
Linux 4.x
Linux 4.x
Messaggi: 1137
Iscritto il: mar 16 mag 2006, 11:09
Contatta:

Messaggio da dapuzz »

in pratica modifica 'un attimo prima' le variabili usate da rc.inet1.conf in base a se iwlist trova o meno le reti?

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

dapuzz ha scritto:in pratica modifica 'un attimo prima' le variabili usate da rc.inet1.conf in base a se iwlist trova o meno le reti?
in pratica sì... una roba molto grezza ma per adesso fa il suo :) [credo abbia un milione di bachi visto che non è stato scritto considerando tutte le possibili configurazioni presenti su un pc]

M

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

up! ho fatto una modifica perchè in caso di più reti wireless disponibili il tool non sapeva che fare: ora sceglie quella con il segnale più potente.
ho postato il codice aggiornato! ovviamente cannibalizzatelo pure!
Ultima modifica di absinthe il lun 9 lug 2007, 21:37, modificato 2 volte in totale.

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio da Bart »

Si vero l'attesa è un po noiosa, io ho risolto lanciando il servizio in background con una semplice &....;)

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

Bart ha scritto:Si vero l'attesa è un po noiosa, io ho risolto lanciando il servizio in background con una semplice &....;)
eh lo so ma mi piaceva piallere i settaggi inutili e gestire il tutto in maniera dinamica! puro sfizio e poi non devo usare accrocchi altrui per selezionare la rete wifi giusta!
per inciso nella nuova versione c'era un baco! adesso è risolto ! ho modificato il post precedente con il codice giusto!

M

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Messaggio da absinthe »

per chi fosse interessato allo script ho fatto alcune modifiche al codice del primo post: adesso gira anche sulla versione bash della slack 12.0

M

PS: incomincio a pensare che forse sto thread è nel posto sbagliato :?

Rispondi