Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6 Celem ćwiczenia jest zdobycie umiejętności programowania komunikacji multicastowej za pomocą protokołu IPv6 w języku C na poziomie interfejsu gniazd. Materiały dotyczące poszczególnych funkcji były podane na wykładzie. 1. Narzędzia i konfiguracja Dla potrzeb laboratorium wykorzystany zostanie kompilator języka C++ DevCpp. Wersję instalacyjną oraz wersję przenośną można pobrać ze strony: http://sourceforge.net/projects/orwelldevcpp/files/. W konfiguracji linkera koniecznie należy dołączyć bibliotekę ws2_32.dll. W tym celu w menu należy wybrać kolejno: Tools/Options/Compiler Options z dopisać l ws2_32 jak na poniższym rysunku. W systemach wbudowanych użyte zostanie środowisko.net (dla SO Linux wersja otwarto źródłowa Mono) i język programowania C# http://www.mono-project.com. W SO Linux do kompilacji kodu C# można wykorzystać kompilator Mono mcs albo Microsoft csc np.: mcs kod.cs mono kod.cs Przy pracy z interfejsem graficznym (MS Windows, X Window) pomocne może być środowisko IDE MonoDevelop http://www.monodevelop.com. - 1 -
2. Najważniejsze struktury danych i najważniejsze funkcje (język C) Aby możliwe było odbieranie datagramów adresowanych do grup multicastowcy należy dołączyć do odpowiedniej grupy multicastowej. Wykorzystywane są przy tej operacji struktura ipv6_mreq oraz funkcja setsockopt(). struct ipv6_mreq { struct in6_addr ipv6mr_multiaddr; unsigned int ipv6mr_interface; }; Dołączenie do grupy multicastowej wymaga zadeklarowania struktury: ipv6_mreq multicastrequest; po wypełnieniu adresem multicastowym i zerem w polu interfejsu należy wywołać funkcję: setsockopt( sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char*)&multicastrequest, sizeof(multicastrequest) ); - 2 -
3.1. Multicastowy nadajnik datagramów UDP (Język C) Program wysyła co sekundę na adres multicastowy datagram UDP z komunikatem zawierającym tekstową wersję lokalnego czasu. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, docelowy adres multicastowy i numer portu. -3-
3.2. Multicastowy nadajnik datagramów UDP (Język C#) Program wysyła na adres multicastowy datagram UDP z komunikatem zawierającym tekstową wersję lokalnego czasu. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, docelowy adres multicastowy i numer portu. Należy pamiętać, że adresy multicastowe IPv6 powinny zawierać numer interfejsu (ang. ScopeID) przez, który mają być wysyłane. -4-
4.1. Multicastowy odbiornik datagramów UDP (Język C) Program nasłuchuje na adresie multicastowym i wypisuje treści komunikatów przesłanych datagramami UDP. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, źródłowy adres multicastowy i numer portu. -5-
-6-
4.2. Multicastowy odbiornik datagramów UDP (Język C#) Program nasłuchuje na adresie multicastowym i wypisuje treści komunikatów przesłanych datagramami UDP. Program obsługuje zarówno protokół IPv6 jak i IPv4. Uruchamiając z wiersza poleceń można podać, jako parametry, źródłowy adres multicastowy i numer portu. Należy pamiętać, że adresy multicastowe IPv6 powinny zawierać numer interfejsu (ang. ScopeID) przez, który mają być wysyłane. -7-