La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Le Routeur Programmable Click

Présentations similaires


Présentation au sujet: "Le Routeur Programmable Click"— Transcription de la présentation:

1 Le Routeur Programmable Click
Présentation de Click : Routeur Programmable Logiciel MIT 2003 Toujours maintenu (vour site Web : Diverses fonctionnalités efficace Trouver exemples Click sous : users/enseig/genius/click-1.4.3/elements

2 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

3 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

4 Essai de Presentation 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 Alain Greiner

5 Le Langage CLICK Connections : définissent un graphe orienté
Essai de Presentation 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 ; Alain Greiner

6 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( ) Tee(2) Chaîne de configuration Port d‘entrée Ports de sortie Chaîne de configuration Port d‘entrée Strip(8) Port de sortie Chaîne de configuration CheckIPHeader(…)

7 Communications en CLICK
Essai de Presentation 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 Alain Greiner

8 Communications en CLICK
Essai de Presentation Communications en CLICK Contrôle du flot de paquets Alain Greiner

9 Les Fifos de CLICK Queue Stockage des paquets : FIFO
Essai de Presentation 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 Alain Greiner

10 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

11 Conçevoir des éléments
C’est du C++ Attention aux appels des fonctions virtuelles Exemple : Code C++ pour l’élément vide

12 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

13 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

14 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

15 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

16 Un Simple Classifieur Trois priorités
Jeter des paquets selon la stratégie RED cherchez l ’erreur

17 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

18 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

19 Algorithme déterministe d'ordonnancement des tâches
Essai de Presentation Algorithme déterministe d'ordonnancement des tâches Stride Scheduling Alain Greiner

20 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

21 Un premier routeur : IPv 4

22 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

23 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

24 IPv4 Code en Click c0 :: Classifier(12/0806 20/0001,
12/ /0002, 12/0800, -); c1 :: Classifier(12/ /0001, Idle -> [0]c0; InfiniteSource(DATA \< // Ethernet header 00 00 c0 ae 67 ef // IP header c // UDP header d6 41 // UDP payload b a 54 e e d >, LIMIT , 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( , 00:00:C0:AE:67:EF); fake_arpq1 :: EtherEncap(0x0800, 00:00:c0:4f:71:ef, 00:00:c0:4f:71:ef); //ARPQuerier( , 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]arpq0 t[2] -> fake_arpq1; // was -> [1]arpq1 // Connect ARP outputs to the interface queues. fake_arpq0 -> out0; fake_arpq1 -> out1; // Proxy ARP on eth0 for , as well as cone's IP address. ar0 :: ARPResponder( :00:C0:AE:67:EF, /24 00:00:C0:AE:67:EF); c0[0] -> ar0 -> out0; // Ordinary ARP on eth1. ar1 :: ARPResponder( :00:C0:4F:71:EF); c1[0] -> ar1 -> out1; // IP routing table. Outputs: // 0: packets for this machine. // 1: packets for // 2: packets for // All other packets are sent to output 1, with as the gateway. rt :: StaticIPLookup( /32 0, /32 0, /32 0, /32 0, /32 0, /32 0, /24 1, /24 2, / ) // Hand incoming IP packets to the routing table. // CheckIPHeader checks all the lengths and length fields // for sanity. ip :: Strip(14) -> CheckIPHeader( ) -> [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( ) -> FixIPSrc( ) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0; rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions( ) -> FixIPSrc( ) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1; // DecIPTTL[1] emits packets with expired TTLs. // Reply with ICMPs. Rate-limit them? dt1[1] -> ICMPError( , 11, 0) -> [0]rt; dt2[1] -> ICMPError( , 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( , 3, 4) -> [0]rt; fr2[1] -> ICMPError( , 3, 4) -> [0]rt;

25 En-tête du paquet IP c0 :: Classifier(12/0806 20/0001,
12/ /0002, 12/0800, -); c1 :: Classifier(12/ /0001, Idle -> [0]c0; InfiniteSource(DATA \< // Ethernet header 00 00 c0 ae 67 ef // IP header c // UDP header d6 41 // UDP payload b a 54 e e d >, LIMIT , BURST 5, STOP true) -> [0]c1;

26 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

27 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) 24 8 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 . . .

28 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( , 00:00:C0:AE:67:EF); fake_arpq1 :: EtherEncap(0x0800, 00:00:c0:4f:71:ef, 00:00:c0:4f:71:ef); //ARPQuerier( , 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]arpq0 t[2] -> fake_arpq1; // was -> [1]arpq1 // Connect ARP outputs to the interface queues. fake_arpq0 -> out0; fake_arpq1 -> out1;

29 Fake ARP // Proxy ARP on eth0 for , as well as cone's IP address. ar0 :: ARPResponder( :00:C0:AE:67:EF, /24 00:00:C0:AE:67:EF); c0[0] -> ar0 -> out0; // Ordinary ARP on eth1. ar1 :: ARPResponder( :00:C0:4F:71:EF); c1[0] -> ar1 -> out1; // IP routing table. Outputs: // 0: packets for this machine. // 1: packets for // 2: packets for // All other packets are sent to output 1, with as the gateway. rt :: StaticIPLookup( /32 0, /32 0, / , /32 0, /32 0, /32 0, /24 1, /24 2, / ) // Hand incoming IP packets to the routing table. // CheckIPHeader checks all the lengths and length fields for sanity. ip :: Strip(14) -> CheckIPHeader( ) -> [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;

30 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( ) -> FixIPSrc( ) -> dt1 :: DecIPTTL -> fr1 :: IPFragmenter(300) -> [0]fake_arpq0; rt[2] -> DropBroadcasts -> cp2 :: PaintTee(2) -> gio2 :: IPGWOptions( ) -> FixIPSrc( ) -> dt2 :: DecIPTTL -> fr2 :: IPFragmenter(300) -> [0]fake_arpq1; // DecIPTTL[1] emits packets with expired TTLs. // Reply with ICMPs. Rate-limit them? dt1[1] -> ICMPError( , 11, 0) -> [0]rt; dt2[1] -> ICMPError( , 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( , 3, 4) -> [0]rt; fr2[1] -> ICMPError( , 3, 4) -> [0]rt;

31 Differentiated Services (DiffServ)
RatedSplitter(7500) Meter(12500) SetIPDSCP(D)

32 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

33 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 paquets/sec comme best-effort

34 Règles de filtrage pour le Pare-feu

35 Pare-Feu

36 Pare-Feu (3) //détermine avec l'entete ethernet si j'ai encapsulé de l'IP classifier::Classifier(12/0800,-); rr::RoundRobinSched; CIPH:: CheckIPHeader( , 14); IPF::IPFilter(allow ip src ); rrfirewall::RoundRobinSched; d::Discard; //encapsule de l'ip eIP0::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'ip e0::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, dest ip0 :: IPEncap(0, , ); ip1 :: IPEncap(0, , ); ip2 :: IPEncap(0, , ); ip3 :: IPEncap(0, , ); ip4 :: IPEncap(0, , ); ip5 :: IPEncap(0, , );

37 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és classifier[0] -> CIPH -> IPF; //les paquets corrects sont mis en file IPF -> Queue -> [0]rrfirewall; //les paquets non ip sont mis en file classifier[1] -> Queue -> [1]rrfirewall; // sortie du firewall rrfirewall -> Unqueue -> Print("data_out\t")-> d;

38 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)

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

40 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

41 Mini-Passerelle (2)

42 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?

43 Mini-Passerelle (4)

44 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);

45 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, , ); ip1 :: IPEncap(0, , ); ip2 :: IPEncap(0, , ); ip3 :: IPEncap(0, , ); ip4 :: IPEncap(0, , ); ip5 :: IPEncap(0, , ); ip6 :: IPEncap(0, , ); ip7 :: IPEncap(0, , ); ip8 :: IPEncap(0, , ); ip9 :: IPEncap(0, , ); ip10:: IPEncap(0, , ); ip11:: IPEncap(0, , );

46 Mini-Passerelle (7) S::StaticIPLookup( 192.68.1.0/24 1, 58.0.0.0/8 2,
/0 0 ); S1::StaticIPLookup( /32 1, /32 2, /32 3, /32 4, //adresse Broadcast S2::StaticIPLookup( /32 1, /32 2, /32 3, /32 4, //adresse Broadcast

47 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;

48 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 : \t") -> Queue(5) -> [1]rr_S1; rr_S1_2 -> Unqueue(5) -> e15 -> Print("ss réseau1, machine 2 : \t") -> Queue(5) -> [2]rr_S1; rr_S1_3 -> Unqueue(5) -> e16 -> Print("ss réseau1, machine 3 : \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 : \t") -> Queue(5) -> [1]rr_S2; rr_S2_2 -> Unqueue(5) -> e28 -> Print("ss réseau2, machine 2 : \t") -> Queue(5) -> [2]rr_S2; rr_S2_3 -> Unqueue(5) -> e29 -> Print("ss réseau2, machine 3 : \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;

49 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;


Télécharger ppt "Le Routeur Programmable Click"

Présentations similaires


Annonces Google