of 49 /49
Le Routeur Programmable Click Présentation de Click : Routeur Programmable Logiciel MIT 2003 Toujours maintenu (vour site Web : http://www.pdos.lcs.mit.edu/click Diverses fonctionnalités efficace Trouver exemples Click sous : users/enseig/genius/click-1.4.3/elements

Le Routeur Programmable Click

  • Upload
    virote

  • View
    44

  • Download
    0

Embed Size (px)

DESCRIPTION

Le Routeur Programmable Click. Présentation de Click : Routeur Programmable Logiciel MIT 2003 Toujours maintenu (vour site Web : http://www.pdos.lcs.mit.edu/click Diverses fonctionnalités efficace Trouver exemples Click sous : users/enseig/genius/click-1.4.3/elements. Qu ’est-ce Click ?. - PowerPoint PPT Presentation

Citation preview

Page 1: Le Routeur Programmable Click

Le Routeur Programmable Click

Présentation de Click : Routeur Programmable Logiciel

MIT 2003

Toujours maintenu (vour site Web :

http://www.pdos.lcs.mit.edu/click

Diverses fonctionnalités

efficace

Trouver exemples Click sous :

users/enseig/genius/click-1.4.3/elements

Page 2: Le Routeur Programmable Click

Qu ’est-ce Click ?

Routeur programmable

Acheminer les paquets vers la bonne sortie en faisant ou non

des traîtements

Quelques fonctinnalités de base (regroupés dans les éléments

de Click = briques de base)

Analyse de l’en-tête

Mécanisme de branchement

consultation d ’une table de routage

Page 3: Le Routeur Programmable Click

Historique

MIT puis Berkeley 2000-??

Thèse de Eddie Kohler dirigé par Robert Morris et Frans

Kaashoek

Implémentation d‘un routeur Multiprocesseur

annoncé dans un article by Benjie Chen et Eddie Kohler

l‘implémentation n‘a pas été rendu publique

Page 4: Le Routeur Programmable Click

Le Langage CLICK

Décrire l'architecture d'une application de routage des paquets

Language haut niveau, simple, configurable et efficace

Configuration

langage fonctionnal

Elements : Classes C++, Ports

Paramétres de configurations

Méthodes d'interfaces

Paquets

Page 5: Le Routeur Programmable Click

Le Langage CLICK

Connections :

définissent un graphe orienté

lient les éléments entre eux en passant d'un port de sortie

a un port d'entrée.

Exemple Syntaxe : FromDevice(eth0) -> Counter -> Discard ;

Page 6: Le Routeur Programmable Click

Quelques simples éléments branchement sans modification du paquet : tee

Modification de l‘en-tête : strip(8) enlève 8 bits

Vérification de l‘en-tête : Check IP header

CheckIPHeader(18.26.4.255 1.255.255.255)

Strip(8)

Chaîne de configuration

CheckIPHeader(…)

Tee(2)

Chaîne de configuration

Port d‘entrée

Port d‘entrée

Ports de sortie

Port de sortie

Chaîne de configuration

Page 7: Le Routeur Programmable Click

Communications en CLICK

Technique de transfert de paquets entre éléments:

PUSH :L'élément source initie le transfert paquet et l'envoie à l'élément destination (downstream).

PULL : L'élément destination initie le transfert paquet en demandant a l'élément source de retourner un paquet (upstream).

Implémenté par des appels de fonctions virtuels : efficacité

Il y a trois classes des connecteurs : PUSH, PULL et AGNOSTIC. Cette dernère change le caractère de ses ports pour s’adapter aux élements précédents/suivants mais doit être push ou pull pour tous les ports d’un élement

Transition push-pull, pull-push : Fifo

Page 8: Le Routeur Programmable Click

Communications en CLICK

Contrôle du flot de paquets

Page 9: Le Routeur Programmable Click

Les Fifos de CLICK

Stockage des paquets : FIFO

Elément : Queue (elements/stadard/queue.hh)

Port d'entrée de type PUSH

Port de sortie de type PULL

FIFO non bloquante en écriture

Indique qu'elle est vide aux éléments concernés

Indique l'arrivée du premier paquet aux éléments concernés

Jète des paquets selon une politique définie (dropping policy)

Queue

Page 10: Le Routeur Programmable Click

Interdits de Click

cet image comporte 4 erreurs

sortie push de FromDevice est connecté à l’entrée pull de PullDevice

sortie push de FromDevice comporte plusieurs connexions

plusieurs connexions aboutissent à l’entrée de ToDevice

élément agnostique dans un contexte push/pull

l’image d ’en bas est correct

la file compense le différence de contexte

Page 11: Le Routeur Programmable Click

Conçevoir des éléments

C’est du C++

Attention aux appels des fonctions virtuelles

Exemple : Code C++ pour l’élément vide

Page 12: Le Routeur Programmable Click

Un élément composé

Modularité par moyen de C++

Enfilement juste stochastique (stochastic fair queueing)

composé de

élémént de base HashSwitch

élément de base RoundRobin

Page 13: Le Routeur Programmable Click

Sources et cibles de traffic

InfiniteSource

RatedSource

FromLinux

FromDevice

Discard

ToDevice

Voir documentation sur les éléments (il y manquent quelques-uns) et éléments fournis avec la distribution

push

push

Page 14: Le Routeur Programmable Click

Flow-based router context

Recherche en largeur/en profondeur danns le graphe des configurations

Extension importante de la communication par appel des fonctions virtuels

Important entre autres pour RED dropping

Robuste en absence des cycles

Permet entre autres

de suivre le chemin des paquets

de notifier du côte de la fifo l‘élément précédent du fait de sa remplissage

Page 15: Le Routeur Programmable Click

Politique des Fifos (Dropping Policies)

Les fifos sont évidemment non-bloquantes; ceci est une

assumption de base dans le monde des réseaux

Jeter des paquets

en-tête de la fifo

à la queue de la fifo

Stratégies de dropping fournies

RED (Random Early Detection) Dropping : laisser tomber

un paquet au choix

Weighted RED : les paramètres indiquent les priorités

différentes

Page 16: Le Routeur Programmable Click

Un Simple Classifieur

Trois priorités

Jeter des paquets selon la stratégie RED

cherchez l ’erreur

Page 17: Le Routeur Programmable Click

Ordonnancement en Click

Deux stratégies sont implementées parmi des éléments

Round-Robin

Priority-based

Des stratégies plus compliquées sont imaginables mais pas

implémentées

Page 18: Le Routeur Programmable Click

Ordonnancement en CLICK

Ordonnancement : les initiateurs sont ordonnancés

Algorithme d'ordonnancement : Stride scheduling

Un élement qui initie de façon autonôme une requête PUSH ou PULL est ordonnancable et doit être mis dans la file d'attente

Tous les autres éléments sont ordonnancé implicitement

En général, un programme Click s'éxecute en un seul thread

Un appel à une méthode PUSH ou PULL doit retourner à son appelant avant qu'une autre tâche ne commence

Page 19: Le Routeur Programmable Click

Algorithme déterministe d'ordonnancement des tâches Stride Scheduling

Page 20: Le Routeur Programmable Click

Routage IPv4 en Langage Click

Analyser une configuration déjà existante

Algorithme de Routage IPv4

Le Langage Click

Communications en Click

Ordonnancement en Click

Protocole de résolution d ’adresses ARP

IPv4 codé en Click

Evaluation

Page 21: Le Routeur Programmable Click

Un premier routeur : IPv 4

Page 22: Le Routeur Programmable Click

Algorithme de Routage IPv4

Enlever un paquet de la file de sortie

Vérifier si il s‘agit version 4 ou 6

Vérifier l‘addresse destination

Vérifier checksum Stocker champ checksum et effacer En-tete prise comme serie des entiers 16 bit Calculer complement-1 du complement-1 de la somme de ces entiers Comparer a la checksum

Lookup route: chercher l‘addresse destination dans table de routage Recupérer l‘addresse IP du hop prochain

Mise à jour temps de survie (time-to-live TTL) : decrémenter champ TTL et modifier champ checksum

Insérer paquet dans une des files de sortie

Page 23: Le Routeur Programmable Click

IPv4 en Click

Aspects pratiques:

OS: Linux

Routage IPv4 (simplifié) est la plus grande application disponible en Click actuellement

Userlevel

Paquets sont générés par Click

Eléments „InfiniteSource“ et „Discard“ au lieu d‘une entrée et sortie sur Ethernet

ASIM : Kernel patch: paquets entre deux/plusieurs machines

Eléments FromDevice et ToDevice

Deux (vieilles) cartes Ethernet de la marque Tulip

Page 24: Le Routeur Programmable Click

IPv4 Code en Clickc0 :: Classifier(12/0806 20/0001,

12/0806 20/0002, 12/0800, -);c1 :: Classifier(12/0806 20/0001, 12/0806 20/0002, 12/0800, -);Idle -> [0]c0;InfiniteSource(DATA \< // Ethernet header 00 00 c0 ae 67 ef 00 00 00 00 00 00 08 00 // IP header 45 00 00 28 00 00 00 00 40 11 77 c3 01 00 00 01 02 00 00 02 // UDP header 13 69 13 69 00 14 d6 41 // UDP payload 55 44 50 20 70 61 63 6b 65 74 21 0a 04 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04 08 53 53 00 00 53 53 00 00 05 00 00 00 00 10 00 00 01 00 00 00 54 53 00 00 54 e3 04 08 54 e3 04 08 d8 01 00 00>, LIMIT 600000, BURST 5, STOP true) -> [0]c1;out0 :: Queue(200) -> Discard;out1 :: Queue(200) -> Discard;tol :: Discard;// An "ARP querier" for each interface.fake_arpq0 :: EtherEncap(0x0800, 00:00:c0:ae:67:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.4.24, 00:00:C0:AE:67:EF);fake_arpq1 :: EtherEncap(0x0800, 00:00:c0:4f:71:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.7.1, 00:00:C0:4F:71:EF);// Deliver ARP responses to ARP queriers as well as Linux.t :: Tee(3);c0[1] -> t;c1[1] -> t;t[0] -> tol;t[1] -> fake_arpq0; // was -> [1]arpq0t[2] -> fake_arpq1; // was -> [1]arpq1

// Connect ARP outputs to the interface queues.fake_arpq0 -> out0;fake_arpq1 -> out1;

// Proxy ARP on eth0 for 18.26.7, as well as cone's IP address.ar0 :: ARPResponder(18.26.4.24 00:00:C0:AE:67:EF, 18.26.7.0/24 00:00:C0:AE:67:EF);c0[0] -> ar0 -> out0;

// Ordinary ARP on eth1.ar1 :: ARPResponder(18.26.7.1 00:00:C0:4F:71:EF);c1[0] -> ar1 -> out1;

// IP routing table. Outputs:// 0: packets for this machine.// 1: packets for 18.26.4.// 2: packets for 18.26.7.// All other packets are sent to output 1, with 18.26.4.1 as the gateway.

rt :: StaticIPLookup(18.26.4.24/32 0, 18.26.4.255/32 0, 18.26.4.0/32 0, 18.26.7.1/32 0, 18.26.7.255/32 0, 18.26.7.0/32 0, 18.26.4.0/24 1, 18.26.7.0/24 2,

0.0.0.0/0 18.26.4.1 1)// Hand incoming IP packets to the routing table.

// CheckIPHeader checks all the lengths and length fields// for sanity.ip :: Strip(14) -> CheckIPHeader(18.26.4.255 1.255.255.255) -> [0]rt;c0[2] -> Paint(1) -> ip;c1[2] -> Paint(2) -> ip;

// IP packets for this machine.// ToHost expects ethernet packets, so cook up a fake header.rt[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) -> tol;

// These are the main output paths; we've committed to a// particular output device.// Check paint to see if a redirect is required.// Process record route and timestamp IP options.// Fill in missing ip_src fields.// Discard packets that arrived over link-level broadcast or multicast.// Decrement and check the TTL after deciding to forward.// Fragment.// Send outgoing packets through ARP to the interfaces.rt[1] -> DropBroadcasts -> cp1 :: PaintTee(1) -> gio1 :: IPGWOptions(18.26.4.24) -> FixIPSrc(18.26.4.24) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0;rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions(18.26.7.1) -> FixIPSrc(18.26.7.1) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1;

// DecIPTTL[1] emits packets with expired TTLs.// Reply with ICMPs. Rate-limit them?dt1[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;dt2[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;

// Send back ICMP UNREACH/NEEDFRAG messages on big packets with DF set.// This makes path mtu discovery work.fr1[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;fr2[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;

Page 25: Le Routeur Programmable Click

En-tête du paquet IP

c0 :: Classifier(12/0806 20/0001, 12/0806 20/0002, 12/0800, -);c1 :: Classifier(12/0806 20/0001, 12/0806 20/0002, 12/0800, -);Idle -> [0]c0;InfiniteSource(DATA \< // Ethernet header 00 00 c0 ae 67 ef 00 00 00 00 00 00 08 00 // IP header 45 00 00 28 00 00 00 00 40 11 77 c3 01 00 00 01 02 00 00 02 // UDP header 13 69 13 69 00 14 d6 41 // UDP payload 55 44 50 20 70 61 63 6b 65 74 21 0a 04 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04 08 53 53 00 00 53 53 00 00 05 00 00 00 00 10 00 00 01 00 00 00 54 53 00 00 54 e3 04 08 54 e3 04 08 d8 01 00 00>, LIMIT 600000, BURST 5, STOP true) -> [0]c1;

Page 26: Le Routeur Programmable Click

ARP (Address Resolution Protocol) Comment établir le lien adresse IP / adresse physique ?

Mise en place dans TCP/IP d’un protocole de bas niveau appelé Address

Resolution Protocol (ARP)

Rôle de ARP : fournir à une machine donnée l'adresse physique

d'une autre machine située sur le même réseau à partir de l'adresse

IP de la machine destinataire

Fournit a la couche liaison un mapping des addresses IP (logiques)

aux addresses physiques

Comparable au fonctionnement de la table de routage

Donner un addresse IP, rendre l‘addresse physique

Si l‘addresse IP n‘existe pas, générer une requête en utilisant un

protocole de contrôle

Enfiler le paquet

Page 27: Le Routeur Programmable Click

0 248 16 31

Type de service Longueur totale (en octets)

Identification Déplacement fragment

Adresse IP Source

Adresse IP Destination

Options IP

4

version HLEN

19

Fanions

Durée de vie Protocole Total de contrôle en-tête

Padding

Données

. . .

Le datagramme ARP Unité de transfert de base est le datagramme, constituée d'un en-tête et

d'un champ de données (de 1,5Ko à 64Ko)

Page 28: Le Routeur Programmable Click

Fake (Faux, simulé) ARP en Click

out0 :: Queue(200) -> Discard;out1 :: Queue(200) -> Discard;tol :: Discard;// An "ARP querier" for each interface.fake_arpq0 :: EtherEncap(0x0800, 00:00:c0:ae:67:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.4.24, 00:00:C0:AE:67:EF);fake_arpq1 :: EtherEncap(0x0800, 00:00:c0:4f:71:ef, 00:00:c0:4f:71:ef); //ARPQuerier(18.26.7.1, 00:00:C0:4F:71:EF);// Deliver ARP responses to ARP queriers as well as Linux.t :: Tee(3);c0[1] -> t;c1[1] -> t;t[0] -> tol;t[1] -> fake_arpq0; // was -> [1]arpq0t[2] -> fake_arpq1; // was -> [1]arpq1// Connect ARP outputs to the interface queues.fake_arpq0 -> out0;fake_arpq1 -> out1;

Page 29: Le Routeur Programmable Click

Fake ARP // Proxy ARP on eth0 for 18.26.7, as well as cone's IP address.ar0 :: ARPResponder(18.26.4.24 00:00:C0:AE:67:EF, 18.26.7.0/24 00:00:C0:AE:67:EF);c0[0] -> ar0 -> out0;// Ordinary ARP on eth1.ar1 :: ARPResponder(18.26.7.1 00:00:C0:4F:71:EF);c1[0] -> ar1 -> out1;// IP routing table. Outputs:// 0: packets for this machine.// 1: packets for 18.26.4.// 2: packets for 18.26.7.// All other packets are sent to output 1, with 18.26.4.1 as the gateway.

rt :: StaticIPLookup(18.26.4.24/32 0,18.26.4.255/32 0,18.26.4.0/32 0,18.26.7.1/32 0,18.26.7.255/32 0,18.26.7.0/32 0,

18.26.4.0/24 1,18.26.7.0/24 2,0.0.0.0/0 18.26.4.1 1) // Hand incoming IP packets to the routing table.// CheckIPHeader checks all the lengths and length fields for sanity.ip :: Strip(14) -> CheckIPHeader(18.26.4.255 1.255.255.255) -> [0]rt;c0[2] -> Paint(1) -> ip;c1[2] -> Paint(2) -> ip;// IP packets for this machine.// ToHost expects ethernet packets, so cook up a fake header.rt[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) -> tol;

Page 30: Le Routeur Programmable Click

Sorties // These are the main output paths; we've committed to a// particular output device.Check paint to see if a redirect is required.// Process record route and timestamp IP options.// Fill in missing ip_src fields.// Discard packets that arrived over link-level broadcast or multicast.// Decrement and check the TTL after deciding to forward.Fragment.// Send outgoing packets through ARP to the interfaces.rt[1] -> DropBroadcasts -> cp1 :: PaintTee(1) -> gio1 :: IPGWOptions(18.26.4.24) -> FixIPSrc(18.26.4.24) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0;rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions(18.26.7.1) -> FixIPSrc(18.26.7.1) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1;// DecIPTTL[1] emits packets with expired TTLs.// Reply with ICMPs. Rate-limit them?dt1[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;dt2[1] -> ICMPError(18.26.4.24, 11, 0) -> [0]rt;// Send back ICMP UNREACH/NEEDFRAG messages on big packets with DF set.// This makes path mtu discovery work.fr1[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;fr2[1] -> ICMPError(18.26.7.1, 3, 4) -> [0]rt;

Page 31: Le Routeur Programmable Click

Differentiated Services (DiffServ)

Meter(12500)

RatedSplitter(7500)

SetIPDSCP(D)

Page 32: Le Routeur Programmable Click

DiffServ(2)

• Il s‘agit d‘une des implémentations possibles de Nouveaux éléments

©SetIPDSCP changes le tag. Il modifie le champ DSCP (DiffServ

code point field) à valeur fixe puis l‘incrémente successivement

©RatedSplitter(rate) classifie les paquets par rapport à leur taux

d‘arrivée. Au maximum rate paquets sont transmis à la première

sortie, le reste au deuxième

©Meter(rate) envoye le flux entier à sa deuxième sortie une fois le

taux rate atteint

©Shaper(rate) : connexions pull! Il s‘ occupe de la régulation des

temps de départ des paquets : maximum rate requêtes par

seconde

Page 33: Le Routeur Programmable Click

DiffServ(3)

Les éléments aux fonctionnalités de Classification, ordonnancement, déchargement, files d‘attente ont déjà été présentés avant

Le flôt entrant est partagé en quatre, basé sur DSCP

Les trois premiers flux sont limités en taux, le quatrième est soumis à une transmission „best effort“ (le mieux possible)

Les flots limités ont la priorité au flot normal

Limitation s‘effectue differément

A : dropping flots dépassant le 7500 paquets/sec

B : shaped (taillé) sur un taux de 10000, laissant les paquets restants dans la file

C: reclassement des paquets dépassant 12500 paquets/sec comme best-effort

Page 34: Le Routeur Programmable Click

Règles de filtrage pour le Pare-feu

Page 35: Le Routeur Programmable Click

Pare-Feu

Page 36: Le Routeur Programmable Click

Pare-Feu (3)//détermine avec l'entete ethernet si j'ai encapsulé de l'IP

classifier::Classifier(12/0800,-);rr::RoundRobinSched;CIPH:: CheckIPHeader(12.45.67.89, 14);IPF::IPFilter(allow ip src 12.45.67.90);rrfirewall::RoundRobinSched;d::Discard;

//encapsule de l'ipeIP0::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);eIP1::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);eIP2::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);eIP3::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);eIP4::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);eIP5::EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);

//n'encapsule pas de l'ipe0::EtherEncap(0x3514, 1:2:3:4:5:6, A:B:C:D:E:F); e1::EtherEncap(0x3514, 1:2:3:4:5:6, A:B:C:D:E:F);

nul0::Null;nul1::Null;

//IpEncap argument => protocole, src, destip0 :: IPEncap(0,12.45.67.89 , 192.68.1.29);ip1 :: IPEncap(0,12.45.67.89 , 192.68.1.27);ip2 :: IPEncap(0,12.45.67.89 , 58.168.21.127);ip3 :: IPEncap(0,12.45.67.89 , 58.189.172.3);ip4 :: IPEncap(0,12.45.67.89 , 59.12.32.153);ip5 :: IPEncap(0,12.45.67.90 , 127.12.132.13);

Page 37: Le Routeur Programmable Click

Pare-Feu (4)

/*********************************** Génération de paquets IP vers l'entrée d'un classifier IP ***********************************/

TimedSource(0.1) -> ip0 -> eIP0 -> Queue(5) -> [0]rr;TimedSource(0.2) -> ip1 -> eIP1 -> Queue(5) -> [1]rr;TimedSource(0.3) -> ip2 -> eIP2 -> Queue(5) -> [2]rr;TimedSource(0.5) -> ip3 -> eIP3 -> Queue(5) -> [3]rr;TimedSource(0.8) -> ip4 -> eIP4 -> Queue(5) -> [4]rr;TimedSource(0.2) -> ip5 -> eIP5 -> Queue(5) -> [5]rr;TimedSource(0.1) -> nul0 -> e0 -> Queue(5) -> [6]rr;TimedSource(0.4) -> nul1 -> e1 -> Queue(5) -> [7]rr;

rr -> Unqueue(5) -> classifier;

/*********************************/

//les paquets ip sont checkés puis filtrésclassifier[0] -> CIPH -> IPF;

//les paquets corrects sont mis en fileIPF -> Queue -> [0]rrfirewall;

//les paquets non ip sont mis en fileclassifier[1] -> Queue -> [1]rrfirewall;

// sortie du firewallrrfirewall -> Unqueue -> Print("data_out\t")-> d;

Page 38: Le Routeur Programmable Click

Evaluation Click (I)

Simple a configurer, reconfigurable à chaud

riche bibliothèque des éléments

facile à créer des nouveaux éléments

permet de se concentrer sur la partie fonctionelle de son code

Difficile d‘entrer dans l‘implémentation si besoin de modifier Click

Documentation relativement insuffisante

Algorithme d‘ordonnancement peu visible

Marche seulement avec une carte Tulip

le côté SMP n‘est pas suffisamment maîtrisé

notre choix de système d‘exploitation (Mutek) a exclu l‘utilisation directe de click (l‘application a du être réecrite en thread POSIX)

Page 39: Le Routeur Programmable Click

Evaluation Click (II)Expériences (confirmés) : On cherche à saturer le système

Efficace!

Page 40: Le Routeur Programmable Click

Mini-passerelle

Simplifications :

tous paquets arrivent sur une entrée

le éseau est relié à deux réseaux locaux

chaque réseau a trois machines dont l ’adresse IP et

l ’adresse MAC sont connus de la passerelle

il existe une adresse de sortie pas défaut où l ’on envoye

les paquets dont l ’adresse ne correspond pas

Page 41: Le Routeur Programmable Click

Mini-Passerelle (2)

Page 42: Le Routeur Programmable Click

Mini-Passerelle(3)

Parties de l ’application :

Dèsencapsulation des trames Ethernet entrantes

Analyses des en-têtes

Quel sus-réseau?

Quelle machine dans un LAN?

Page 43: Le Routeur Programmable Click

Mini-Passerelle (4)

Page 44: Le Routeur Programmable Click

Mini-Passerelle (5)

Declaration ***********************************/

d::Discard;

rr :: RoundRobinSched;rr_S1 :: RoundRobinSched;rr_S2 :: RoundRobinSched;

rr_S1_0 :: RoundRobinSched;rr_S1_1 :: RoundRobinSched;rr_S1_2 :: RoundRobinSched;rr_S1_3 :: RoundRobinSched;rr_S2_0 :: RoundRobinSched;rr_S2_1 :: RoundRobinSched;rr_S2_2 :: RoundRobinSched;rr_S2_3 :: RoundRobinSched;

t_S1 :: Tee(4);t_S2 :: Tee(4);

Page 45: Le Routeur Programmable Click

Mini-Passerelle (6)

e :: EtherEncap(0x0800, 1:2:3:4:5:6, A:B:C:D:E:F);e10 :: EtherEncap(0x0800, 1:1:1:1:1:1, A:A:A:A:A:A);e14 :: EtherEncap(0x0800, 1:1:1:1:1:1, 4:4:4:4:4:4);e15 :: EtherEncap(0x0800, 1:1:1:1:1:1, 5:5:5:5:5:5);e16 :: EtherEncap(0x0800, 1:1:1:1:1:1, 6:6:6:6:6:6);e20 :: EtherEncap(0x0800, 2:2:2:2:2:2, B:B:B:B:B:B);e27 :: EtherEncap(0x0800, 2:2:2:2:2:2, 7:7:7:7:7:7);e28 :: EtherEncap(0x0800, 2:2:2:2:2:2, 8:8:8:8:8:8);e29 :: EtherEncap(0x0800, 2:2:2:2:2:2, 9:9:9:9:9:9);e30 :: EtherEncap(0x0800, 3:3:3:3:3:3, 0:0:0:0:0:0);

ip0 :: IPEncap(0,12.45.67.89 , 192.68.1.29);ip1 :: IPEncap(0,12.45.67.89 , 192.68.1.27);ip2 :: IPEncap(0,12.45.67.89 , 58.168.21.127);ip3 :: IPEncap(0,12.45.67.89 , 58.189.172.3);ip4 :: IPEncap(0,12.45.67.89 , 59.12.32.153);ip5 :: IPEncap(0,12.45.67.89 , 127.12.132.13);ip6 :: IPEncap(0,12.45.67.89 , 192.68.9.84);ip7 :: IPEncap(0,12.45.67.89 , 136.89.74.98);ip8 :: IPEncap(0,12.45.67.89 , 192.68.1.255);ip9 :: IPEncap(0,12.45.67.89 , 58.255.255.255);ip10:: IPEncap(0,12.45.67.89 , 58.210.12.55);ip11:: IPEncap(0,12.45.67.89 , 192.68.1.11);

Page 46: Le Routeur Programmable Click

Mini-Passerelle (7)

S::StaticIPLookup(192.68.1.0/24 1,58.0.0.0/8 2,0.0.0.0/0 0);

S1::StaticIPLookup(192.68.1.27/32 1,192.68.1.29/32 2,192.68.1.201/32 3,192.68.1.255/32 4, //adresse Broadcast0.0.0.0/0 0);

S2::StaticIPLookup(58.137.4.89/32 1,58.168.21.127/32 2,58.189.172.3/32 3,58.255.255.255/32 4, //adresse Broadcast0.0.0.0/0 0);

Page 47: Le Routeur Programmable Click

Mini-Passerelle (8)

/*********************************** Passerrelle ***********************************/

/* Génération des données */TimedSource(0.1) -> ip0 -> Queue(5) -> [0]rr;TimedSource(0.2) -> ip1 -> Queue(5) -> [1]rr;TimedSource(0.3) -> ip2 -> Queue(5) -> [2]rr;TimedSource(0.1) -> ip3 -> Queue(5) -> [3]rr;TimedSource(0.8) -> ip4 -> Queue(5) -> [4]rr;TimedSource(0.2) -> ip5 -> Queue(5) -> [5]rr;TimedSource(0.5) -> ip6 -> Queue(5) -> [6]rr;TimedSource(0.4) -> ip7 -> Queue(5) -> [7]rr;TimedSource(0.9) -> ip8 -> Queue(5) -> [8]rr;TimedSource(0.8) -> ip9 -> Queue(5) -> [9]rr;TimedSource(0.6) -> ip10-> Queue(5) -> [10]rr;TimedSource(0.7) -> ip11-> Queue(5) -> [11]rr;

rr -> Unqueue(5) -> e;

/* Decapsulage des Paquets Ethernet */e -> Strip(14)

-> S;

Page 48: Le Routeur Programmable Click

Mini-Passerelle (9)

rr_S1_0 -> Unqueue(5) -> e10 -> Print("ss réseau1, machine par défault\t\t") -> Queue(5) -> [0]rr_S1;

rr_S1_1 -> Unqueue(5) -> e14 -> Print("ss réseau1, machine 1 : 192.168.001.027\t") -> Queue(5) -> [1]rr_S1;

rr_S1_2 -> Unqueue(5) -> e15 -> Print("ss réseau1, machine 2 : 192.168.001.029\t") -> Queue(5) -> [2]rr_S1;

rr_S1_3 -> Unqueue(5) -> e16 -> Print("ss réseau1, machine 3 : 192.168.001.201\t")-> Queue(5) -> [3]rr_S1;

rr_S2_0 -> Unqueue(5) -> e20 -> Print("ss réseau2, machine par défault\t\t") -> Queue(5) -> [0]rr_S2;

rr_S2_1 -> Unqueue(5) -> e27 -> Print("ss réseau2, machine 1 : 058.137.004.089\t") -> Queue(5) -> [1]rr_S2;

rr_S2_2 -> Unqueue(5) -> e28 -> Print("ss réseau2, machine 2 : 058.168.021.127\t") -> Queue(5) -> [2]rr_S2;

rr_S2_3 -> Unqueue(5) -> e29 -> Print("ss réseau2, machine 3 : 058.189.172.003\t") -> Queue(5) -> [3]rr_S2;

/* Sortie */rr_S1 -> Unqueue(5) -> d;rr_S2 -> Unqueue(5) -> d;

/* Si n'est pas dans le masque de sous réseaux ou est dans le masque l'adresse IP ne correspond pas a une machine

=> sortie par défaut*/

S[0] -> e30 -> Print("Sortie par défault \t\t\t")-> d;

Page 49: Le Routeur Programmable Click

Mini-Passerelle (10)

/* Sous réseaux */

S[1] -> S1;S[2] -> S2;

/* Transmission au Sous Réseau 1 et 2 */S1[4] -> Print("ss réseau1 (Brodcast)\t\t\t")

-> t_S1;S2[4] -> Print("ss réseau2 (Brodcast)\t\t\t")

-> t_S2

S1[0] -> Queue(5) -> [0]rr_S1_0;t_S1[0] -> Queue(5) -> [1]rr_S1_0; S1[1] -> Queue(5) -> [0]rr_S1_1;t_S1[1] -> Queue(5) -> [1]rr_S1_1; S1[2] -> Queue(5) -> [0]rr_S1_2;t_S1[2] -> Queue(5) -> [1]rr_S1_2; S1[3] -> Queue(5) -> [0]rr_S1_3;t_S1[3] -> Queue(5) -> [1]rr_S1_3;

S2[0] -> Queue(5) -> [0]rr_S2_0;t_S2[0] -> Queue(5) -> [1]rr_S2_0; S2[1] -> Queue(5) -> [0]rr_S2_1;t_S2[1] -> Queue(5) -> [1]rr_S2_1; S2[2] -> Queue(5) -> [0]rr_S2_2;t_S2[2] -> Queue(5) -> [1]rr_S2_2; S2[3] -> Queue(5) -> [0]rr_S2_3;t_S2[3] -> Queue(5) -> [1]rr_S2_3;