PICA Library Carlos Miguel Tavares Calafate Redes Multimedia 2002.

1 PICA Library Carlos Miguel Tavares Calafate Redes Multi...
Author: José Ángel Araya Río
0 downloads 0 Views

1 PICA Library Carlos Miguel Tavares Calafate Redes Multimedia 2002

2 Origen del grupo MANET Objetivo original: mejorar las comunicaciones del ejercito en zonas de combate: –Movilidad –Falta de infraestructura de soporte –Por encima de 100Mhz la comunicación es difícil si emisor y receptor no están en LOS (Line Of Sight)

3 Objetivos del grupo MANET Desarrollo de protocolos que permitan conectividad entre nudos móviles: –Cada nudo funciona como un router en la red –Cada nudo tiene activo el demonio del protocolo deseado –Cada protocolo puede ser implementado a nivel 2,5 o 3.

4 Aspectos más importantes a tener en cuenta: Tamaño de la red (escalabilidad) Conectividad Topología de la red Tráfico de los utilizadores Ambiente de operación –Tipo de terreno –Posibilidad de ataques e interferencias

5 Protocolos propuestos AODV – Ad-hoc On Demand Distance Vector OLSR – Optimized Link State Routing DSR – Dynamic Source Routing ZRP – Zone Routing Protocol LRR – Link Reversal Routing Otros

6 El problema Normalmente son desarrollados en Linux Normalmente son desarrollados en C Utilizan llamadas específicas del Sistema Operativo La conversión a otros sistemas operativos requiere una reestructuración grande –Estudio del Sistema Operativo –Pérdida de tiempo

7 El problema Los desarrolladores no suelen tener conocimientos de las especificidades de cada sistema operativo (y tampoco lo desean). Resultado: Los utilizadores de Windows 2000 y Windows CE tienen que esperar bastante para utilizar estas tecnologías

8 Características de los protocolos para Redes Ad-Hoc Conocimiento de las tarjetas de red disponibles, así como de los parámetros asociados (MAC, IP) Envío y recepción de paquetes a nivel 2, por veces de modo promiscuo. Gestión de colas de paquetes en memoria Manipulación de la tabla de routing Activación / desactivación del forwarding del kernel

9 La solución Una librería (PICA) que: –Sea escrita en el lenguaje C –Haga disponible las funciones que estos protocolos necesitan –Esté disponible para Linux + Windows 2000 + Windows CE –No introduzca retrasos considerables –Tenga una API auto-explicativa

10 ¿Que se consigue? Código C que utiliza la librería y funciones estándares C puede ser compilada directamente (o casi) en las demás plataformas. Reducción del tiempo de conversión de los protocolos existentes a otros SO Reducción del tiempo de creación de nuevos protocolos, estando disponibles para los 3 SO en un corto período de tiempo

11 Gestión de paquetes Forwarding Threads, mutexes, semáforos Logging Privilégios Timers Sincronización Sockets PICA

12 LinuxWindows NTWindows CE PICA Source code

13 La API de PICA 1-Device int PICAgetAvailableDevices(DEVLIST * devs); int PICAgetDeviceAttrs(char * dev, DevAttrs * attrs);

14 La API de PICA 2-Route PICAaddRoute(UINT32 dest, UINT32 mask, UINT32 gateway, int metric, char * device); PICAdelRoute(UINT32 dest, UINT32 mask, UINT32 gateway, char * device); PICAgetRoutingTable(RTInfo * rti);

15 La API de PICA 3-IP Forwarding int PICAisForwarding(int * true_false); int PICAsetForwarding(int on_off); int PICAdefaultTTL(int set_get, int * ttl);

16 La API de PICA 4-Packet int PICAopenDevice(char * device, PICA_IO_DEVICE * iodev); int PICAframe(int mode, PICA_IO_DEVICE * iodev, void * packet, int packetsize, int * read); int PICAcloseDevice(PICA_IO_DEVICE iodev);

17 La API de PICA 5- Socket int PICAcreateSocket(PICAsocket * sd, int domain, int type, int protocol); int PICAcloseSocket(PICAsocket sd);

18 La API de PICA 6-Threads and Synchronization 6.1-Thread Management int PICAstartThread(THRID * thr, void * func, void * args); int PICAsuspendThread(THRID thr); int PICAresumeThread(THRID thr); int PICAkillThread(THRID thr);

19 La API de PICA 6.2-Mutexes and Semaphores int PICAcreateMutex(PICAmutex * mut); int PICAmutexAction(int action, PICAmutex * mut); int PICAdestroyMutex(PICAmutex * mut); int PICAcreateSemaphore(PICAsemaphore * p_sem, int initial_count, int max_count); int PICAsemaphoreAction(int action, PICAsemaphore * p_sem, int count); int PICAdestroySemaphore(PICAsemaphore * p_sem);

20 La API de PICA 6.3- Multi-platform select int PICAaddDesc(PICAdescList ** dl, int type, int mode, void * desc); int PICAselect(int time, PICAdescList * dl, PICAselResult * res);

21 La API de PICA 7-Memory Management 7.1-Buffer Management int PICAinitBuffer(PICAbuffer ** ibuf, int num_queues); int PICAaddToBuffer(PICAbuffer * buf, int queue_id, void * data, int datasize); int PICAgetFromBuffer(PICAbuffer * buf, int queue_id, int num_packets, PICApacket ** packets, int * avail_packets); int PICAkillBuffer(PICAbuffer * buf);

22 La API de PICA 7.2-Pipes int PICAmakePipe(PICApipe * in, PICApipe * out); int PICAsendToPipe(PICApipe out, void * data, int size, int * written); int PICAgetFromPipe(PICApipe in, void * buf, int bufsize, int * datasize); int PICAclosePipe(PICApipe pipe);

23 La API de PICA 8-Timer UINT64 PICAgetCurrTime(void); int PICAtimer(int action, UINT64 * time, void * function, void * data);

24 La API de PICA 9-Log int PICAopenFile(FDesc * fd, char * name, int read_write, int flags); int PICAreadFile(void * buf, int num_bytes); int PICAwriteToFile(FDesc file, void * data, int datasize); int PICAcloseFile(FDesc file);

25 La API de PICA 10-User Info int PICAisAdministrator(int * user_type); 11-Library Specific int PICAstartup(int flags); int PICAcleanup(void); void PICAgetLastError(char * message, int * code);

26 Problemas Threads en Linux no tienen capacidades de suspend/resume Semáforos sin máximo en Linux Un timer por aplicación en Linux El funcionamiento de los timers es distinto en Linux/Windows No existen timers simples en Windows CE

27 Problemas La función select() de Linux sólo existe en Windows2k/CE para los Sockets Los descriptores del sistm. op. (HANDLES) utilizan WaitFor... No existen pipes en Windows CE La interface de bajo nivel en Windows2k/CE es compleja, especialmente en el acceso directo a la red (NDIS)

28 Soluciones encontradas Utilización de las librerías Packet.dll desarrolladas para Windows2k/CE Priority Queues para los timers Select con 2 threads en Windows Pipes con sockets etc.

29 Desarrollos futuros

30 APIs específicas para 802.11 Extensiones 802.11 para Windows disponibles sólo a partir de NDIS 5.1 Para Linux, existen hace bastante tiempo las “Wireless Extensions”, que permiten configurar: –ESSID –frecuencia/canal –limite de sensibilidad (dBm) –modo (Ad-hoc, Managed, etc.)

31 APIs específicas para 802.11 –Bit rate (1M, 2M, 5.5M, 11M, auto) –Threshold RTS (Request To Send) –key (encryption) –power (tempo de sleep / wake up, etc.) –Potencia de transmisión (W, mW, dBm, auto) –retry (retransmisiones a nivel de MAC)

32 APIs para implementación de protocolos Ad-hoc a nivel 2,5 Windows2k/CE????? LinuxDispositivos TUN / TAP que permiten simular conexiones punto a punto o Ethernet. –TUN: Virtual Point-to-Point Network Device –TAP: Virtual Ethernet Network Device

33 Dispositivo TUN / TAP Implementación de un protocolo a nivel 2 Dispositivo inalámbrico real Utilizador Forwarding de paquetes Funcionamiento de un nudo MANET Laptop, PDA, etc.

34 FIN