# Chování BIRD socketů ## Požadavky ### Kombinace - Sockety - UDP - Raw - IP - IPv4 - IPv6 - Způsob vysílání - Unicast - Multicast (`224.0.0.9`, `ff02::9`) - Directed broadcast podle masky sítě - Universal broadcast (`255.255.255.255`) ### Vlastnosti - Na straně odesílání - Odesila na spravne rozhrani, ackoli routovaci tabulka je jina, ale cilova adresa je dostupna na dane siti - Na odesilacim rozhrani je vice adres - Odesila se spravnou nastavenou zdrojovou adresou, ktera nemusi byt na danem rozhrani, ale musi byt alespon na nekterem jinem rozhrani - Overit, ze packety maji cilovou adresu takovou, kterou ocekavame - Na straně přijímání - Nemelo by prijmout packet z jineho rozhrani nez je nastaveny - Precist source-addr a local iface ## Testcase ### Nastavení - Interface s prefixem /24 - 2 IPv4 adresy (aliasy) - 2 IPv6 adresy (aliasy) - Odstranene smerovani v routovaci tabulce (ping nefunguje) #### Odesílání - Jako lokální adresa se použije adresa jiného lokálního zařízení - TTL 3 #### Přijímání 1. Nastaví se na *správný* interface 2. Nastaví se na *jiný* interface a nemělo by to nic přijmout ### Ukázky (IPv4, raw socket) #### Unicast ./rcv -i lnk111 ./snd -c 10 -i lnk111 -t 3 -l 192.168.214.188 10.210.1.51 #### Multicast ./rcv -i lnk111 -m 224.0.0.9 ./snd -c 10 -i lnk111 -t 3 -l 192.168.214.188 -m 224.0.0.9 #### Directed Broadcast ./rcv -i lnk111 -b ./snd -c 10 -i lnk111 -t 3 -l 192.168.214.188 -b 10.210.1.255 #### Universal Broadcast ./rcv -i lnk111 -b ./snd -c 10 -i lnk111 -t 3 -l 192.168.214.188 -b 255.255.255.255 ### Kontrola - `tcpdump -i -vvvn` - Správný interface - Správná IP na obou koncích #### Přijímání 1. Nastaveno na *správný* interface - Přijmutí - Taková IP odesílatele, kterou jsme nastavili - Správně rozpoznané rozhraní, na kterém jsme packet přijmuli - Správná hodnota TTL 2. Nastavenona *jiný* interface - Nepřijme nic ## Výsledky ### Linux
Unicast Multicast Broadcast
IPv4 Raw OK OK OK
UDP
IPv6 Raw OK1 OK1 -
UDP
1) Zdrojová adresa musí být jedna z adres nastavených na daném zařízení, nelze vybrat adresu z jiného zařízení ### FreeBSD
Unicast Multicast Broadcast
IPv4 Raw OK2,4,5 OK OK2,3,4
UDP OK2,5
IPv6 Raw OK1,2,4,5 OK1,2 -
UDP
1) Zdrojová adresa musí být jedna z adres nastavených na daném zařízení, nelze vybrat adresu z jiného zařízení.
2) Pakety jsou BIRDem přijímány i na jiných zařízení.
3) Directed broadcast funguje. Universal broadcast lze poslat pomocí IP_ONESBCAST (directed přepíše na universal)
4) Přijímá multicast bez přihlášení do skupiny.
5) Vyžaduje správné nastavení směrovacích tabulek.
`SO_DONTROUTE` umožní odesílání IPv4 Unicast zpráv i při nesprávném nastavení směrovacích tabulek, nicméně při IPv4 Multicastu (Raw/UDP) způsobí chybu `Network is unreachable`. ### OpenBSD
Unicast Multicast Broadcast
IPv4 Raw OK2,5 OK OK2,7
UDP OK2,5,6 OK6 OK2,6,7
IPv6 Raw OK1,2,5 OK1 -
UDP
1) Zdrojová adresa musí být jedna z adres nastavených na daném zařízení, nelze vybrat adresu z jiného zařízení.
2) Pakety jsou BIRDem přijímány i na jiných zařízení.
3) Directed broadcast funguje. Universal broadcast lze poslat pomocí IP_ONESBCAST (directed přepíše na universal)
4) Přijímá multicast bez přihlášení do skupiny.
5) Vyžaduje správné nastavení směrovacích tabulek.
6) Při odesílání nelze nastavit zdrojovou adresou. Chybí IP_SENDSRCADDR.
7) Universal broadcast se odesílá na systémový výchozí interface. IP_ONESBCAST na systému neexistuje. `SO_DONTROUTE` vrací chybu `Operation not supported`. ### NetBSD
Unicast Multicast Broadcast
IPv4 Raw OK2,5 OK OK5,7
UDP OK2,5,6 OK6 OK5,6,7
IPv6 Raw OK1,2,5 OK1,8 -
UDP
1) Zdrojová adresa musí být jedna z adres nastavených na daném zařízení, nelze vybrat adresu z jiného zařízení.
2) Pakety jsou BIRDem přijímány i na jiných zařízení.
3) Directed broadcast funguje. Universal broadcast lze poslat pomocí IP_ONESBCAST (directed přepíše na universal)
4) Přijímá multicast bez přihlášení do skupiny.
5) Vyžaduje správné nastavení směrovacích tabulek.
6) Při odesílání nelze nastavit zdrojovou adresou. Chybí IP_SENDSRCADDR.
7) Universal broadcast se odesílá na systémový výchozí interface. IP_ONESBCAST na systému neexistuje.
8) TTL nelze nastavit a odesílá TTL 1 `SO_DONTROUTE` **neumožní** odesílání IPv4 Unicast zpráv při nesprávném nastavení směrovacích tabulek a samozřejmě při IPv4 Multicastu (Raw/UDP) způsobí chybu `Network is unreachable`.