Upload
jose-angel-araya-rio
View
212
Download
0
Embed Size (px)
Citation preview
PICA Library
Carlos Miguel Tavares Calafate
Redes Multimedia 2002
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)
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.
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
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
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
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
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
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
¿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
Gestión de paquetes
Forwarding
Threads, mutexes, semáforos
Logging
Privilégios
Timers
SincronizaciónSockets
PICA
Linux Windows NT Windows CE
PICA
Source code
La API de PICA
1-Device1-Device
• int PICAgetAvailableDevices(DEVLIST * devs);• int PICAgetDeviceAttrs(char * dev, DevAttrs * attrs);
La API de PICA
2-Route2-Route
• PICAaddRoute(UINT32 dest, UINT32 mask, UINT32 gateway, int metric, char * device);
• PICAdelRoute(UINT32 dest, UINT32 mask, UINT32 gateway, char * device);
• PICAgetRoutingTable(RTInfo * rti);
La API de PICA
3-IP Forwarding3-IP Forwarding
• int PICAisForwarding(int * true_false);• int PICAsetForwarding(int on_off);• int PICAdefaultTTL(int set_get, int * ttl);
La API de PICA
4-Packet4-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);
La API de PICA
5- Socket5- Socket
• int PICAcreateSocket(PICAsocket * sd, int domain, int type, int protocol);
• int PICAcloseSocket(PICAsocket sd);
La API de PICA
6-Threads and Synchronization6-Threads and Synchronization6.1-Thread Management6.1-Thread Management
• int PICAstartThread(THRID * thr, void * func, void * args);
• int PICAsuspendThread(THRID thr);• int PICAresumeThread(THRID thr);• int PICAkillThread(THRID thr);
La API de PICA
6.2-Mutexes and Semaphores6.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);
La API de PICA
6.3- Multi-platform select6.3- Multi-platform select
• int PICAaddDesc(PICAdescList ** dl, int type, int mode, void * desc);
• int PICAselect(int time, PICAdescList * dl, PICAselResult * res);
La API de PICA
7-Memory Management7-Memory Management7.1-Buffer Management7.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);
La API de PICA
7.2-Pipes7.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);
La API de PICA
8-Timer8-Timer
• UINT64 PICAgetCurrTime(void);
• int PICAtimer(int action, UINT64 * time, void * function, void * data);
La API de PICA
9-Log9-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);
La API de PICA
10-User Info10-User Info
• int PICAisAdministrator(int * user_type);
11-Library Specific
• int PICAstartup(int flags);• int PICAcleanup(void);• void PICAgetLastError(char * message, int * code);
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
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)
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.
Desarrollos futuros
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.)
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)
APIs para implementación de protocolos Ad-hoc a nivel 2,5
• Windows2k/CE ?????
• Linux Dispositivos TUN / TAP que permiten simular conexiones punto a punto o Ethernet.– TUN: Virtual Point-to-Point Network Device– TAP: Virtual Ethernet Network Device
Dispositivo TUN / TAP
Implementación de un protocolo a
nivel 2
Dispositivo inalámbrico
real
Utilizador
Forwarding de paquetes
Funcionamiento de un nudo MANETLaptop, PDA, etc.
FIN