pica library carlos miguel tavares calafate redes multimedia 2002

Post on 23-Jan-2016

212 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related