Ciao ragazzi,
vorrei sapere se conoscete un metodo per capire "al volo" (tipo per mezzo di eventi) se un interfaccia di rete non è più disponibile all'uso.
Per esempio se è stato scollegato il cavo ethernet, o anche se si è persa la connessione wifi.
Per ora so che è possibile monitorare la directory /sys/class/net e le informazioni all'interno di ogni subdirectory, ma in questo modo il processo
è costretto a leggere in continuazione da file e non può fare altro intanto.
Esiste qualche evento sollevato, o segnale che può essere mandato, quando un interfaccia di rete subisce un cambiamento?
Grazie,
Riccardo
Monitorare le interfacce di rete in C
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: Monitorare le interfacce di rete in C
1) usi netlink (man 7 netlink) facendo polling sul relativo socket (per evitare che questo lavoro sia bloccante o usi la select oppure lo fai in un thread separato)ulisse89 ha scritto:Ciao ragazzi,
vorrei sapere se conoscete un metodo per capire "al volo" (tipo per mezzo di eventi) se un interfaccia di rete non è più disponibile all'uso.
Per esempio se è stato scollegato il cavo ethernet, o anche se si è persa la connessione wifi.
Per ora so che è possibile monitorare la directory /sys/class/net e le informazioni all'interno di ogni subdirectory, ma in questo modo il processo
è costretto a leggere in continuazione da file e non può fare altro intanto.
Esiste qualche evento sollevato, o segnale che può essere mandato, quando un interfaccia di rete subisce un cambiamento?
2) provi a vedere se le librerie di d-bus permettono di fare quanto chiedi
per del codice di esempio di 1: "apt-get source netplug" (ci sarebbe anche ifplugd, ma fa uso di ioctl che è un approccio peggiore rispetto all'usare netlink come fa netplug)
- ulisse89
- Packager
- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: Monitorare le interfacce di rete in C
Se devo fare polling probabilmente mi conviene utilizzare direttamente ifconfig lanciato con execl periodicamente, e analizzarne l'output.masalapianta ha scritto: 1) usi netlink (man 7 netlink) facendo polling sul relativo socket (per evitare che questo lavoro sia bloccante o usi la select oppure lo fai in un thread separato)
Anche se è poco elegante come soluzione, è sicuramente più semplice.
Provo a guardare se esiste qualcosa del genere.masalapianta ha scritto: 2) provi a vedere se le librerie di d-bus permettono di fare quanto chiedi
Grazie,
Riccardo
- targzeta
- Iper Master
- Messaggi: 6631
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: Monitorare le interfacce di rete in C
Attraverso SNMP puoi sapere un po' tutto sulle interfacce. La slackware ha già il pacchetto net-snmp, però devi un po' divertirti a capire se ti puoi interfacciare con lui in C e come, oppure interroghi i MIB direttamente dai comandi a linea di comando (scusa il gioco di parole). In particolare devi isare il MIB 'interface'. Guarda le variabili ifAdminStatus e ifOperStatus:
Emanuele
Io le ho studiate ste cose, ma non le ho mai usate ,...
If ifAdminStatus is changed to up(1) then ifOperStatus should change to up(1) if the interface is ready to transmit and receive network traffic;
...
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- ulisse89
- Packager
- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: Monitorare le interfacce di rete in C
SNMP? L'ho studiato (molto in generale) nell'ultimo esame che ho dato.spina ha scritto:Attraverso SNMP puoi sapere un po' tutto sulle interfacce. La slackware ha già il pacchetto net-snmp, però devi un po' divertirti a capire se ti puoi interfacciare con lui in C e come, oppure interroghi i MIB direttamente dai comandi a linea di comando (scusa il gioco di parole). In particolare devi isare il MIB 'interface'. Guarda le variabili ifAdminStatus e ifOperStatus:Io le ho studiate ste cose, ma non le ho mai usate ,...
If ifAdminStatus is changed to up(1) then ifOperStatus should change to up(1) if the interface is ready to transmit and receive network traffic;
...
Emanuele
Non avrei mai creduto che potesse tornarmi utile!