Repository 32bit  Forum
Repository 64bit  Wiki

[RISOLTO] Automatizzare attribuzione IP "a caldo"

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.

[RISOLTO] Automatizzare attribuzione IP "a caldo"

Messaggioda joe » mar mag 27, 2014 11:37

Come ho già scritto in altro topic, sto cercando di mettere in piedi una rete senza fili via bluetooth in cui il mio PC con slackware-14.0 faccia da access point e il mio smartphone android possa collegarcisi come client.
La faccenda da quello che ho letto in rete mi sembra davvero confusa e soprattutto, pur seguendo diverse guide (spesso datate) non sono riuscito a ottenere qualcosa di funzionante. Inoltre l'argomento è molto "di nicchia" considerando che per il momento i miei topic qui e su linuxquestion ecc... sono tutti zero-replied :lol:

Allora ho deciso di lasciare perdere la configurazione dell'intera intera baracca tutta in un colpo, per concentrarmi invece sulla soluzione di vari passaggi più semplici.

In questo topic vorrei chiedervi una cosa piuttosto semplice penso (per chi è esperto di networking su slackware).
Problema:
Abbiamo un'interfaccia che viene creata a caldo dal sistema e prende il nome di "bnep0".

Quando accade questa cosa?
Quando dal telefono tento di accedere alla rete bluetooth che a quanto pare il PC riesce a mettere a disposizione del client.
Quindi se dal cellulare seleziono:
Codice: Seleziona tutto
"bluetooth" -> "darkstar0" -> "Accesso Internet - Connetti a dispositivo per accesso internet"

Ecco che su slackware appare la nuova interfaccia di rete "bnep0".
Però non le viene assegnato un'ip e non viene tirata su automaticamente.

A mano è facile fare:
Codice: Seleziona tutto
ifocnfig bnep 10.0.0.1 up


Però vorrei che il sistema automaticamente lo facesse di suo:
- appena bnep0 viene creata
- dagli ip 10.0.0.1
- attivala ("UP")

Immagino che per farlo si deva andare a bussare alla porta di UDEV e impostare qualche regola.
Sono ignorante in materia. E penso che dalle versioni precedenti di slackware qualcosa sia cambiato.

Leggendo questa guida di Alien sembra che la via maestra sia:
- impostare "bnep0" in "/etc/rc.d/rc.inet1"
- e impostare una regola in udev che faccia in modo di richiamare il comando:
Codice: Seleziona tutto
/etc/rc.d/rc.inet1_bnep0 start

quando la bnep0 viene creata (dal kernel immagino...).

Il fatto è che in slackware-14.0 alcuni files di udev non ci sono, o almeno non si trovano più nello stesso posto...
Ad ogni modo l'interfaccia "bnep0", che al momento ho impostato manualmente, ha le caratteristiche seguenti:
Codice: Seleziona tutto
bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::209:ddff:fe50:2f9c  prefixlen 64  scopeid 0x20<link>
        ether 00:09:dd:50:2f:9c  txqueuelen 1000  (Ethernet)
        RX packets 4  bytes 1372 (1.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4223  bytes 164374 (160.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Cosa ne dite, c'è qualche modo per automatizzare la faccenda?

Grazie in anticipo! :)
Ultima modifica di joe il mer mag 28, 2014 9:13, modificato 1 volta in totale.
Avatar utente
joe
Master
Master
 
Messaggi: 1984
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: Automatizzare attribuzione IP ad interfaccia "a caldo"

Messaggioda miklos » mar mag 27, 2014 16:43

joe ha scritto:Il fatto è che in slackware-14.0 alcuni files di udev non ci sono, o almeno non si trovano più nello stesso posto...
aggiungici pure che per i device di rete con un nome come il tuo non scattano nemmeno.
Comunque oltre a suggerirti di studiarti questo dovresti creare una regola udev piu' o meno fatta cosi'
Codice: Seleziona tutto
KERNEL=bnep0, RUN+="script_che_configura_interfaccia %k"
dove sostanzialmente dici che per l'interfaccia bnpe0 va eseguito lo script configurato dentro la direttiva RUN.
Al suo interno la parte %k è un parametro dinamico che viene sostituito con il nome dell'interfaccia (in questo caso bnpe0).

Questa regola non ho modo di provarla e si puo' sicuramente fare di meglio, quindi il mio prendilo piu' come uno spunto che come soluzione al tuo problema
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1241
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: Automatizzare attribuzione IP ad interfaccia "a caldo"

Messaggioda joe » mar mag 27, 2014 23:21

Grazie davvero della risposta. :)

Si, praticamente è quello che ho fatto anch'io.. Ecco la mia regola, era più complesa prima, adesso l'ho semplificata tanto per testare la cosa, prima aveva anche i parametri SUBSYSTEM="net" e ACTION="add".
Codice: Seleziona tutto
# cat /lib/udev/rules.d/97-bnep0.rules

# Bnep0 Bluetooh NAP interface
KERNEL=="bnep0", RUN+=="/root/scripts/bnep-up.sh"

La regola richiama lo script /root/scripts/bnep-up.sh, nel mio precedente tentativo richiamava il comando "/etc/rc.d/rc.inet1 bnep0_start"... era un attimo più complesso, semplifichiamo.
Lo scriptino in questione altro non fa che richiamare ifconfig:
Codice: Seleziona tutto
root@darkstar:~# cat scripts/bnep-up.sh
#!/bin/sh
/sbin/ifconfig bnep0 10.0.0.1 up
root@darkstar:~# ls -l scripts/bnep-up.sh
-rwxr-xr-x 1 root root 43 mag 27 22:41 scripts/bnep-up.sh*

Tanto per vedere se la cosa funziona manualmente ho testato il tutto a mano:
    1- ho lanciato "udevadm monitor" per creare un piccolo log di quello che vede udev.
    2- l'interfaccia bnep0 non è ancora presente
    3- dal telefono mi collego alla rete NAP bluetooth e da terminale verifico che bnep0 è stata creata benchè ancora non attiva.
    4- lancio lo script bnep-up.sh manualmente
    5- verifico con ifconfig e sta volta bnep0 è attiva ed ha il suo IP stabilito
    6- infine vi riporto il contenuto del log di udev registrato attraverso udevadm.
Codice: Seleziona tutto
root@darkstar:~# udevadm monitor > udev.log &
[3] 6864
root@darkstar:~# ifconfig -a bnep0
bnep0: error fetching interface information: Device not found
root@darkstar:~# ifconfig -a bnep0
bnep0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 00:09:dd:50:2f:9c  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 1021 (1021.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@darkstar:~# bnep-up.sh
root@darkstar:~# ifconfig -a bnep0
bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::209:ddff:fe50:2f9c  prefixlen 64  scopeid 0x20<link>
        ether 00:09:dd:50:2f:9c  txqueuelen 1000  (Ethernet)
        RX packets 6  bytes 2063 (2.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10  bytes 973 (973.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@darkstar:~# kill %3
root@darkstar:~# cat udev.log
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[48432.115434] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42 (bluetooth)
UDEV  [48432.149050] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42 (bluetooth)
KERNEL[48432.238695] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0 (net)
KERNEL[48432.238717] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0/queues/rx-0 (queues)
KERNEL[48432.238731] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0/queues/tx-0 (queues)
UDEV  [48432.242543] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0 (net)
UDEV  [48432.246534] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0/queues/rx-0 (queues)
UDEV  [48432.247368] add      /devices/pci0000:00/0000:00:04.1/usb1/1-2/1-2.2/1-2.2:1.0/bluetooth/hci0/hci0:42/net/bnep0/queues/tx-0 (queues)
[3]+  Done                    udevadm monitor > udev.log
root@darkstar:~#


Benissimo! quindi tutto l'accrocchio funziona.
Ma adesso occorre che il punto 4, ovvero l'attribuzione dell'IP e l'attivazione dell'interfaccia venga fatto da udev.
La regola che ho scritto l'ho riportata sopra. Per prima cosa direi che si devono aggiornare le regole di udev. Come si fà?
Io dò la mia risposta e spero che qualcuno di voi possa darmi una conferma, perchè non ne ho la certezza:
Codice: Seleziona tutto
# /etc/rc.d/rc.udev reload
Reloading udev rules

Guardando lo script di avvio di udev si nota che con l'argomento reload viene richiamato anche il comando.
Codice: Seleziona tutto
reload)
        echo "Reloading udev rules"
        udevadm control --reload
        cp --preserve=all --recursive --update /lib/udev/devices/* $UDEV_ROOT
        ;;

Ok, ora è il momento di staccare la connessione bluetooth dal cellulare e riprovare a riattaccarmi ma senza sta volta lanciare a mano lo script... dovrebbe pensarci udev :!:

    1- l'interfaccia bnep0 non è ancora presente
    2- dal telefono mi collego alla rete NAP bluetooth e da terminale verifico che bnep0 sia stata creata e attivata con tanto di IP assegnato.
Codice: Seleziona tutto
root@darkstar:~# cat /lib/udev/rules.d/97-bnep0.rules

# Bnep0 Bluetooh NAP interface
KERNEL=="bnep0", RUN+=="/root/scripts/bnep-up.sh"
root@darkstar:~# /etc/rc.d/rc.udev reload
Reloading udev rules
root@darkstar:~# ifconfig -a bnep0
bnep0: error fetching interface information: Device not found
root@darkstar:~# ifconfig -a bnep0
bnep0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 00:09:dd:50:2f:9c  txqueuelen 1000  (Ethernet)
        RX packets 2  bytes 674 (674.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Risultato... Malino direi, la regola che ho scritto non ha funzionato.
O è non corretta per fare quello che mi aspetto, oppure può essere messa nel posto sbagliato o non saprei.. potrebbe esse anche nominata in modo non corretto, o udev non l'ha caricata...
Cosa mi consigliate di fare per scoprire dove stà l'inghippo?

Grazie ancora per l'aiuto miklos!
PS:
Qualsiasi commento può essere utile anche se potrebbe non sembrarvi così.
Avatar utente
joe
Master
Master
 
Messaggi: 1984
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: Automatizzare attribuzione IP ad interfaccia "a caldo"

Messaggioda miklos » mer mag 28, 2014 0:01

oltre a riprovare con il monitor udev controlla questa riga nel file delle regole
joe ha scritto:KERNEL=="bnep0", RUN+=="/root/scripts/bnep-up.sh"
perchè hai scritto RUN+== invece di RUN+= (con un solo uguale) che potrebbe essere interpretato male.

per il resto a me sembra che tu abbia fatto tutto correttamente.
per quanto riguarda le direttive ACTION=add e SUBSYSTEM=net diciamo che filtri meglio gli eventi. con la regola che usi adesso per esempio lanci il programma anche quando l'evento è di rimozione (ACTION=remove) che ti genera quasi sicuramente un errore (stai lanciando lo script con dentro ifconfig su una scheda di rete non piu' esistente)

Ad ogni modo non so se hai capito piu' o meno il meccanismo (oltre al link che ti ho mandato è molto utile vedere le regole presenti su slackware e come oramai poco si fa un bel man udev) pero' sostanzialmente ci sono due tipi di operazioni che puoi scrivere in un file di regole
  • operazioni di match (ACTION, KERNEL, SUBSYSTEM.. etc etc etc)
  • operazioni che fanno qualcosa (NAME, SYMLINK, PROGRAM, RUN etc etc etc
in ogni riga del file si inseriscono prima le regole di match eppoi le regole che fanno qualcosa.
ogni qualvolta udev lancia un evento la riga che fa il match viene eseguita (per tutti i file di regole caricati quindi se tu avessi n file con dentro una regola per l'interfaccia bnep0 vengono eseguite n righe)

per farti un esempio banale se per esempio vuoi che quando vengano aggiunte interfacce di rete venga aggiunta una regola al firewall di sistema puoi scrivere una regola in questo modo
Codice: Seleziona tutto
ACTION="add", SUBSYSTEM="net", RUN+="script_che_imposta_la_regole %k"

se poi ti serve che quando invece attivi una specifica interfaccia venga attivato un server puoi scrivere
Codice: Seleziona tutto
ACTION="add", KERNEL="bnep0", RUN+="script_che_avvia_server"

con un sistema di regole fatto in questo modo la tua interfaccia bnep0 viene 'matchata' due volte perchè la prima regola è vera (aggiungo device al sottosistema net) ma anche la seconda (aggiungo device che si chiama bnep0)
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1241
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: Automatizzare attribuzione IP ad interfaccia "a caldo"

Messaggioda joe » mer mag 28, 2014 9:00

Sei stato chiarissimo, peraltro erano anche cose che avevo letto nel "man udev", abbastanza chiaro anche lui.
miklos ha scritto:oltre a riprovare con il monitor udev controlla questa riga nel file delle regole
joe ha scritto:KERNEL=="bnep0", RUN+=="/root/scripts/bnep-up.sh"
perchè hai scritto RUN+== invece di RUN+= (con un solo uguale) che potrebbe essere interpretato male.

per il resto a me sembra che tu abbia fatto tutto correttamente.

Bingo !!!! \:D/
Era lì l'errore, avevo messo un "uguale" di troppo! Per una sciocchezza del genere mi ero arenato e non riuscivo a saltarne fuori... certo che un bel messaggio d'errore quando udev ricarica le regole, poteva anche saltar fuori da qualche parte eh..
Va bè, problema risolto.

Codice: Seleziona tutto
root@darkstar:~# ifconfig -a bnep0
bnep0: error fetching interface information: Device not found
root@darkstar:~# test-nap bnep0 > /tmp/20140526-bluetooth.log 2>&1 &
[1] 3361
root@darkstar:~# ifconfig -a bnep0
bnep0: error fetching interface information: Device not found
root@darkstar:~# ifconfig -a bnep0
bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::209:ddff:fe50:2f9c  prefixlen 64  scopeid 0x20<link>
        ether 00:09:dd:50:2f:9c  txqueuelen 1000  (Ethernet)
        RX packets 1  bytes 357 (357.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12  bytes 1062 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Come si vede, inizialmente "bnep0" non esiste.
Attivata la NAP da slackware il servizio resta in ascolto e non viene creata ancora bnep0.
Infine collego il telefono alla rete bluetooth e verifico:
ecco che adesso bnep0 risulta attivata e dotata di IP. Evidentemente la regola di udev corretta viene eseguita e la configurazione dell'interfaccia risulta ora automatica all'atto della sua creazione grazie ad udev.

Problema RISOLTO! Cambio titolo mettendo "RISOLTO".
Grazie mille miklos! :D

PS.
Per quanto riguarda il discorso rete bluetooth.
Sul telefono android ho installato un emulatore di terminale da cui posso effettuare tra le altre cose dei test di ping ecc..
Ieri anche impostando a mano l'interfaccia bnep0 su slackware ho notato dal /var/log/messages (sempre su slack) che dnsmasq prendeva in consegna la nuova rete 10.0.0.1 che aveva assegnato un IP (10.0.0.4) al telefono.
Allora ho provato ad effettuare qualche ping da una parte e dall'altra e i due sistemi sono risultati raggiungibili a vicenda.
Per i dettagli della faccenda potete consultare l'altro post linkato e se vi va anche fare qualche osservazione.
Avatar utente
joe
Master
Master
 
Messaggi: 1984
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5


Torna a Slackware

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite