Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem.

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

kazek3018
Użytkownik
Posty: 181
Rejestracja: 2006-12-10, 14:27

Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem.

Post autor: kazek3018 » 2013-06-29, 07:45

Cześć

A więc tak, w założeniu chcę zbudować wewnętrzną sieć LAN przeznaczoną do debugowania. W sieci będą dwa typy komputerów:
Host --> Komputer na którym piszę program, kompiluję, uruchamiam ewentualny debugger itp.
Target --> Komputer docelowy, system na którym program będzie uruchamiany. Docelowo kontrola tego komputera ma być poprzez połączenie ssh, teraz jest poprzez TTL (a dokładniej TTL <--> USB i wirtualny port COM).

Jako karty WiFi posiadam Ralink RT3070 (dwie identyczne):

Kod: Zaznacz cały

Bus 005 Device 003: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Jako sterownika używam rt5370sta, są to sterowniki producenta dostarczone na CD. Obsługa tej karty w kernelu (rt2800usb) jest obecnie zepsuta, jakkolwiek istnieje prosty hack aby to naprawić. Wybrałem rt5370sta, bo podobno rt2800usb jest średnio stabilny.

Opis konfiguracji Hosta:
Slackware current (z okolic luty/marzec 2013):

Kod: Zaznacz cały

bash-4.2$ uname -a
Linux host_name 3.8.8-smp #2 SMP Thu Apr 18 22:59:19 CDT 2013 i686 Intel(R) Pentium(R) M processor 1.60GHz GenuineIntel GNU/Linux
Karta jest konfigurowana zaraz po podłączeniu do USB, poprzez reguły udev:

Kod: Zaznacz cały

bash-4.2# cat /etc/udev/rules.d/95-wifi-detect.rules
ACTION=="add", KERNEL=="ra0", SUBSYSTEM=="net", RUN+="/bin/sh -c '/etc/rc.d/rc.ra0_wifi start &'"
ACTION=="remove", KERNEL=="ra0", SUBSYSTEM=="net", RUN+="/bin/sh -c '/etc/rc.d/rc.ra0_wifi stop &'"
bash-4.2# 
bash-4.2# cat /etc/rc.d/rc.ra0_wifi 
#! /bin/sh
# /etc/rc.d/rc.ra0_wifi
# Skrypt podnosi i zatrzymuje development network.


# Function to start the network:
start() {
  /sbin/ifconfig ra0 up
  /sbin/iwconfig ra0 mode ad-hoc
  /sbin/iwconfig ra0 channel 1
  /sbin/iwconfig ra0 essid 'dev_lan'
  /sbin/ifconfig ra0 10.0.0.1 netmask 255.255.255.0 up
}

# Function to stop the network:
stop() {
  sleep 1
}


############
### MAIN ###
############

case "$1" in
'start') # "start" brings up all configured interfaces:
  start
  ;;
'stop') # "stop" takes down all configured interfaces:
  stop
  ;;
*) # The default is to bring up all configured interfaces:
  start
esac

# End of /etc/rc.d/rc.ra0_wifi
Po podłączeniu sieć jest konfigurowana do tego stanu:

Kod: Zaznacz cały

bash-4.2# ifconfig
ra0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::225:22ff:fe3f:xxxx  prefixlen 64  scopeid 0x20<link>
        ether 00:25:22:xx:xx:xx  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 2045 (1.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 1556 (1.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
bash-4.2#
bash-4.2# iwconfig 
ra0       Ralink STA  ESSID:"dev_lan"  Nickname:"RT2870STA"
          Mode:Ad-Hoc  Frequency=2.412 GHz  Cell: 7E:2D:28:34:1C:BE   
          Bit Rate=135 Mb/s   
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=100/100  Signal level:-33 dBm  Noise level:-33 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
Opis konfiguracji targetu:
Raspberry pi --> 2013-05-25-wheezy-raspbian

Kod: Zaznacz cały

pi@raspberrypi:~$ uname -a
Linux raspberrypi 3.6.11+ #456 PREEMPT Mon May 20 17:42:15 BST 2013 armv6l GNU/Linux
Karta jest konfigurowana poprzez skrypt startowy:

Kod: Zaznacz cały

pi@raspberrypi:~$ cat /etc/init.d/ra0_wifi                        
#! /bin/sh
# /etc/init.d/ra0_wifi
# Skrypt podnosi i zatrzymuje development network.

### BEGIN INIT INFO                                                     
# Provides:          ra0 interface with Ad-Hoc network
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Skrypt podnosi i zatrzymuje development network.
# Description:       Skrypt podnosi i zatrzymuje development network.
### END INIT INFO

# Function to start the network:
start() {
  /sbin/ifconfig ra0 up
  /sbin/iwconfig ra0 mode ad-hoc
  /sbin/iwconfig ra0 channel 1
  /sbin/iwconfig ra0 essid 'dev_lan'
  /sbin/ifconfig ra0 10.0.0.2 netmask 255.255.255.0 up
}

# Function to stop the network:
stop() {
  sleep 1
}


############
### MAIN ###
############

case "$1" in
'start') # "start" brings up all configured interfaces:
  start
  ;;
'stop') # "stop" takes down all configured interfaces:
  stop
  ;;
*) # The default is to bring up all configured interfaces:
  start
esac

exit 0

# End of /etc/init.d/ra0_wifi
Po uruchomieniu sieć jest konfigurowana do tego stanu:

Kod: Zaznacz cały

pi@raspberrypi:~$ ifconfig
ra0       Link encap:Ethernet  HWaddr 00:25:22:xx:xx:xx  
          inet addr:10.0.0.2  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:3 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:380637 (371.7 KiB)  TX bytes:6790 (6.6 KiB)
pi@raspberrypi:~$ 
pi@raspberrypi:~$ iwconfig 
ra0       Ralink STA  ESSID:"dev_lan"  Nickname:"RT2870STA"
          Mode:Ad-Hoc  Frequency=2.412 GHz  Cell: 7E:2D:28:34:1C:BE   
          Bit Rate=135 Mb/s   
          RTS thr:off   Fragment thr:off
          Link Quality=100/100  Signal level:-31 dBm  Noise level:-49 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
W tej konfiguracji sieć chodzi:

Kod: Zaznacz cały

bash-4.2# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=3.63 ms
64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=1.16 ms
64 bytes from 10.0.0.2: icmp_req=3 ttl=64 time=2.62 ms
^C
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.160/2.470/3.630/1.014 ms
Jeżeli wyjmę i włożę kartę WiFi na hoscie, wtedy sieć się wywala:

Kod: Zaznacz cały

bash-4.2# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
^C
--- 10.0.0.2 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 5999ms

Jeżeli wyjmę kartę WiFi z hosta i odetnę zasilanie w targecie, następnie podłączę kartę WiFi do hosta i włączę zasilanie w targecie; wtedy bingo, znów działa:

Kod: Zaznacz cały

pi@raspberrypi:~$ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_req=1 ttl=64 time=6.47 ms
64 bytes from 10.0.0.1: icmp_req=2 ttl=64 time=1.14 ms
64 bytes from 10.0.0.1: icmp_req=3 ttl=64 time=1.07 ms
64 bytes from 10.0.0.1: icmp_req=4 ttl=64 time=1.16 ms
64 bytes from 10.0.0.1: icmp_req=5 ttl=64 time=1.08 ms
64 bytes from 10.0.0.1: icmp_req=6 ttl=64 time=1.15 ms
64 bytes from 10.0.0.1: icmp_req=7 ttl=64 time=1.20 ms
^C
--- 10.0.0.1 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6009ms
rtt min/avg/max/mdev = 1.077/1.899/6.479/1.870 ms
Co jest zgrane? Ma ktoś może doświadczenie z tego typami sieci?
Dlaczego odłączenie jednego z komputerów w sieci wymusza restart obydwóch interfejsów sieciowych?

PS.
Wydaje się lepszym rozwiązaniem hostapd, ale rt5370 nie wspiera tego trybu niestety.

kazek3018
Użytkownik
Posty: 181
Rejestracja: 2006-12-10, 14:27

Re: Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem

Post autor: kazek3018 » 2013-07-03, 19:27

Pogrzebałem trochę więcej i okazało się, że taka sytuacja następuje tylko po odłączeniu karty która była w sieci jako pierwsza.
Drugą można załączać i wyłączać dowolnie.

Po reprodukcji problemu jest taka sytuacja:
1) Protokół ARP odnajduje adres mac drugiego interfejsu bezbłędnie.
2) arping działa:

Kod: Zaznacz cały

bash-4.2# arping 10.0.0.2 -I ra0
ARPING 10.0.0.2 from 10.0.0.1 ra0
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.788ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  4.268ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.957ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.766ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  3.054ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.682ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.866ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  4.118ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  3.029ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.809ms
Unicast reply from 10.0.0.2 [00:25:22:XX:XX:XX]  2.862ms
^CSent 11 probes (1 broadcast(s))
Received 11 response(s)
3) ping nie działa:

Kod: Zaznacz cały

bash-4.2# ping 10.0.0.2 -I ra0
PING 10.0.0.2 (10.0.0.2) from 10.0.0.1 ra0: 56(84) bytes of data.
^C
--- 10.0.0.2 ping statistics ---
13 packets transmitted, 0 received, 100% packet loss, time 11999ms

Wireshark pokazuje następujące informacje:

Kod: Zaznacz cały

23	16.309585000	10.0.0.1	10.0.0.2	ICMP	98	Echo (ping) request  id=0x0b9a, seq=1/256, ttl=64
24	17.309154000	10.0.0.1	10.0.0.2	ICMP	98	Echo (ping) request  id=0x0b9a, seq=2/512, ttl=64
25	18.309135000	10.0.0.1	10.0.0.2	ICMP	98	Echo (ping) request  id=0x0b9a, seq=3/768, ttl=64
26	19.309153000	10.0.0.1	10.0.0.2	ICMP	98	Echo (ping) request  id=0x0b9a, seq=4/1024, ttl=64
Niestety moje doświadczenie z sieciami nie jest duże, więc może ktoś kto ma większe nakieruje mnie trochę.

Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem

Post autor: Pajaczek » 2013-07-09, 21:21

kazek3018 pisze:Docelowo kontrola tego komputera ma być poprzez połączenie ssh, teraz jest poprzez TTL (a dokładniej TTL <--> USB i wirtualny port COM).
Czym jest TTL w powyższym zdaniu?? Bo jakoś nie łapię sensu.

A odnośnie problemu, to o ile mnie pamięć nie myli takie są po prostu zasady działania sieci AdHoc... pierwszy z daną nazwą niejako zakłada i zarządza siecią, gdy się wyłączy, zniknie z zasięgu, ktoś musi przejąć jego rolę i założyć strukturę od nowa.

kazek3018
Użytkownik
Posty: 181
Rejestracja: 2006-12-10, 14:27

Re: Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem

Post autor: kazek3018 » 2013-07-10, 05:49

TTL <-> USB konwerter jak taki na allegro:
http://allegro.pl/konwerter-usb-rs-ttl- ... 16733.html
Żeby z TTL zrobić COM musisz mieć MAX232:
http://pl.wikipedia.org/wiki/MAX232
Jak na złość nie mogę znaleźć lepszego opisu, ale TTL wychodzi zazwyczaj prosto z procesora i jest to właściwie port szeregowy tylko napięcia się nie zgadzają (mam nadzieje, że żaden elektronik mnie nie ukatrupi za tą kreatywną definicje). Wirtualny port COM jest na Slackware, to chyba wprowadzało zamęt, TTL na targecie jest dostępne jako /dev/tty.....


Jeżeli chodzi o ad-hoc to właśnie miała być odporna na takie sytuacje (znaczy się jeden centralny i wrażliwy punkt). W tej sieci każdy host transmituje ramkę beacon jeżeli nie otrzymał jej od kogoś innego w danym przedziale czasowym. Tym sposobem nawet jeden punkt to poprawna sieć. Jeżeli jakiś punkt zniknie to pozostałe powinny przejąć jego miejsce, znaczy się podtrzymywać sieć, ale muszę jeszcze o tym poczytać jak znajdę czas.

Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Wewnętrzna sieć LAN, WiFi Ad-Hoc, problemy z połączeniem

Post autor: Pajaczek » 2013-07-10, 09:01

Troszeczkę przekornie napisałem, że nie łapię sensu... No to właśnie ja się przyczepię do tej definicji... bo TTL w tym ujęciu to jest jedynie standard poziomu napięć na jakim występują sygnały logiczne i zakresów jakie może układ scalony przyjmować, i może się odnosić do praktycznie każdej możliwej magistrali choćby PCI, nie definiuje ani szerokości magistrali, ani sposobu transmisji... nic. A to o czym mówisz to wciąż "COM"... czy raczej poprawniej UART/USART RS-232 tyle że z poziomem napięć TTL. Tak więc poprawniejszym opisem było by albo samo RS-232 czy U(S)ART-232 (jeżeli chodzi Ci o opis transmisji), albo jeżeli koniecznie chcesz podkreślić poziomy napięć, to RS-232TTL (np. w celu przypomnienia osobie podłączającej że ma się upewnić).

ODPOWIEDZ