Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# 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 <id> <ports>` | Ajoute un commutateur |
| `REMOVE_SWITCH <id>` | Supprime un commutateur et ses liens |
| `ADD_LINK <id1> <id2> <w>` | Ajoute un lien pondéré |
| `REMOVE_LINK <id1> <id2>` | Supprime un lien |
| `ADD_MACHINE <mId> <swId>` | Attache une machine à un commutateur |
| `DIJKSTRA <src> <dst>` | Calcule le plus court chemin |
| `ROUTING_TABLE <swId>` | Calcule la table de routage |
| `SET_ACTIVE <id> <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
```
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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.