1 / 49

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. Qu ’est-ce Click ?.

ronli
Download Presentation

Le Routeur Programmable Click

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  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. 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

  5. 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 ;

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

  7. 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

  8. Communications en CLICK Contrôle du flot de paquets

  9. 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

  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 Stride Scheduling

  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. 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; 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]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 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; IPv4 Code en Click

  25. 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; En-tête du paquet IP

  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. 0 4 8 16 19 24 31 version HLEN Type de service Longueur totale (en octets) Identification Fanions Déplacement fragment Durée de vie Protocole Total de contrôle en-tête Adresse IP Source Adresse IP Destination Options IP 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)

  28. 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]arpq0 t[2] -> fake_arpq1; // was -> [1]arpq1 // Connect ARP outputs to the interface queues. fake_arpq0 -> out0; fake_arpq1 -> out1; Fake (Faux, simulé) ARP en Click

  29. // 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; Fake ARP

  30. // 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; Sorties

  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 12500 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(12.45.67.89, 14); IPF::IPFilter(allow ip src 12.45.67.90); 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,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);

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

  46. 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 Broadcast 0.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 Broadcast 0.0.0.0/0 0 );

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

  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;

More Related