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:
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ì.