# Simulateur de Réseau — Routage et Circuits Virtuels Projet réalisé dans le cadre du module **Réseaux — L3 Informatique 2025–2026**. ## Présentation Ce projet implémente un simulateur complet de réseau de commutateurs permettant : - La construction graphique d'une topologie réseau (switches, liens pondérés, machines terminales) - Le calcul du plus court chemin entre deux machines via l'algorithme de Dijkstra - La génération et l'affichage des tables de routage - La gestion de circuits virtuels avec attribution de VCI L'architecture repose sur un modèle hybride **C / Java** : - Un moteur de calcul en C pour les algorithmes de graphe - Une interface graphique riche en Java Swing - Une communication inter-processus via un protocole texte sur `stdin/stdout` ## Architecture du projet Le dépôt est organisé en deux grandes parties : moteur C et interface Java. ### Moteur C Répertoire principal : `core/` Responsabilités : - Modélisation bas niveau des commutateurs et machines - Implémentation de l'algorithme de Dijkstra (complexité O(n²)) - Calcul des tables de routage - Gestion de l'état actif/en panne des commutateurs - Exécution en tant que processus autonome piloté par commandes texte Modules principaux : - `modules/graph/` : implémentation de Dijkstra - `modules/switch/` : gestion des commutateurs et des liens - `modules/machine/` : gestion des machines terminales - `main.c` : boucle principale et protocole de communication Le binaire compilé est généré dans `bin/reseau`. ### Interface Java Répertoire principal : `ui/` Architecture basée sur le patron MVC strict : - `ui.model` : modèle du réseau (`Network`, `SwitchNode`, `Link`, `Machine`, `VirtualCircuit`) - `ui.view` : rendu graphique (canvas, renderers, dialogues) - `ui.controller` : gestion des interactions utilisateur - `ui.bridge` : pont Java/C (classe `CBridge`) - `ui.palette` : constantes visuelles (dimensions, couleurs, polices) Le package `ui.view.renderer` est subdivisé en sous-packages spécialisés : - `renderer.node` : `NodeShapeRenderer`, `NodeLabelRenderer`, `NodeGlowRenderer` - `renderer.machine` : `MachineRenderer`, `MachineLayoutCalc`, `MachineDotRenderer`, `MachinePortBadge` `MachineLayoutCalc` implémente un algorithme de maximisation d'angle (72 candidats testés) pour placer automatiquement les machines dans les espaces libres entre les liens d'un commutateur. ## Fonctionnalités ### Construction interactive du réseau - Ajout de commutateurs avec nombre de ports configurable (1 à 16) - Ajout de liens pondérés entre commutateurs - Ajout de machines terminales rattachées aux switches - Glisser-déposer des nœuds - Modification dynamique des poids - Suppression d'éléments via mode dédié ou menu contextuel - Simulation de panne d'un commutateur Les numéros d'interface sont automatiquement attribués et affichés graphiquement. Au démarrage, un réseau de démonstration de 10 commutateurs et 18 liens est chargé automatiquement. ### Calcul du plus court chemin - Sélection de deux machines via le panneau latéral - Exécution de Dijkstra côté C - Animation progressive du chemin sur le graphe - Affichage de la distance totale - Prise en compte des commutateurs en panne ### Tables de routage Pour chaque commutateur (accessible par clic droit) : - Calcul des distances vers toutes les destinations - Identification du prochain saut optimal - Affichage sous forme de tableau HTML via `JEditorPane` - Mise en évidence de la meilleure route en vert ### Circuits virtuels Gestion complète des circuits depuis le menu **Circuits Virtuels** : - Ouverture d'un circuit entre deux machines - Attribution automatique des ports IN / OUT depuis le modèle - Attribution séquentielle des VCI par commutateur - Fermeture et suppression de circuits - Affichage structuré avec en-têtes multiniveaux (`colspan` / `rowspan` HTML) Deux circuits empruntant le même chemin partagent les ports mais possèdent des VCI distincts. ## Protocole C / Java Le moteur C expose une interface texte lue sur `stdin`, avec réponse `OK` ou `ERR` sur `stdout`. | Commande | Effet | |---|---| | `ADD_SWITCH ` | Ajoute un commutateur | | `REMOVE_SWITCH ` | Supprime un commutateur et ses liens | | `ADD_LINK ` | Ajoute un lien pondéré | | `REMOVE_LINK ` | Supprime un lien | | `ADD_MACHINE ` | Attache une machine à un commutateur | | `DIJKSTRA ` | Calcule le plus court chemin | | `ROUTING_TABLE ` | Calcule la table de routage | | `SET_ACTIVE <0\|1>` | Active/désactive un commutateur | | `QUIT` | Termine le processus | La classe `CBridge` encapsule totalement ce protocole et maintient un cache réseau synchronisé côté Java. ## Lancement de l'application - Depuis la racine, cela va compiler le système C ```bash make ``` - Déplacez vous dans `ui` pour compiler les fichiers `.java` ```bash cd ui make ``` - Lancer l'application toujours dans `ui` ```bash make run ``` L'interface démarre et lance automatiquement le processus C en arrière-plan. ## Structure des répertoires ``` core/ → moteur C ui/ → interface Java build/ → objets compilés C bin/ → binaire C report/ → rapport du projet makefile → compilation moteur C ui/Makefile → compilation interface Java ``` ## Choix techniques majeurs - Architecture hybride C/Java pour séparer calcul et interface - Patron MVC strict côté Java avec packages bien délimités - Renderers spécialisés en sous-classes pour chaque élément visuel - Placement intelligent des machines par maximisation d'angle (`MachineLayoutCalc`) - Rendu HTML via `JEditorPane` pour les tableaux complexes (routage, circuits virtuels) - Attribution cohérente et globale des numéros de ports par commutateur - Gestion robuste des erreurs de communication inter-processus ## Tests et validation Le projet a été validé sur : - Réseaux simples et multi-chemins - Cas avec commutateurs en panne - Multiples circuits virtuels simultanés - Cohérence des tables de routage - Conformité des résultats de Dijkstra aux exemples théoriques du cours ## Auteur Killian REINE — L3 Informatique 2025–2026 ## Licence Projet académique réalisé dans le cadre d'un TP universitaire. Usage pédagogique uniquement.