conlink 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env ADDED
@@ -0,0 +1,3 @@
1
+ HOST_INTERFACE=eni0
2
+ NODE1_HOST_ADDRESS=192.168.0.32
3
+ NODE2_HOST_ADDRESS=192.168.0.33
package/Dockerfile CHANGED
@@ -28,7 +28,8 @@ RUN apt-get -y install libpcap-dev tcpdump iproute2 iputils-ping curl \
28
28
  openvswitch-switch openvswitch-testcontroller
29
29
 
30
30
  COPY --from=build /app/ /app/
31
- ADD link-add.sh link-del.sh schema.yaml /app/
31
+ ADD link-add.sh link-del.sh /app/
32
+ ADD schema.yaml /app/build/
32
33
 
33
34
  ENV PATH /app:$PATH
34
35
  WORKDIR /app
package/README.md CHANGED
@@ -453,16 +453,15 @@ python3 -m http.server 8080
453
453
  ```
454
454
 
455
455
  Use the `net2dot` script to transform a network
456
- configuration into a GraphViz data file (dot language). The `net2dot`
457
- script supports `--compose-file` and `--network-file` command line
458
- options. To render the network configuration for example test1, run
459
- the following in another window:
456
+ configuration into a GraphViz data file (dot language). To render the
457
+ network configuration for example test1, run the following in another
458
+ window:
460
459
 
461
460
  ```
462
- ./net2dot --compose-file examples/test1-compose.yaml > examples/data.dot
461
+ ./conlink --show-config --compose-file examples/test1-compose.yaml | ./net2dot > examples/test1.dot
463
462
  ```
464
463
 
465
- Then load `http://localhost:8080` in your browser to see the rendered
464
+ Then load `http://localhost:8080?data=test1.dot` in your browser to see the rendered
466
465
  image.
467
466
 
468
467
  The file `examples/net2dot.yaml` contains a configuration that
@@ -470,10 +469,10 @@ combines many different configuration elements (veth links, dummy
470
469
  interfaces, vlan type links, tunnels, etc).
471
470
 
472
471
  ```
473
- ./net2dot --network-file examples/net2dot.yaml > examples/data.dot
472
+ ./conlink --network-file examples/net2dot.yaml --show-config | ./net2dot > examples/net2dot.dot
474
473
  ```
475
474
 
476
- Then load `http://localhost:8080` in your browser.
475
+ Then load `http://localhost:8080?data=net2dot.dot` in your browser.
477
476
 
478
477
 
479
478
  ## Copyright & License
@@ -0,0 +1,457 @@
1
+ digraph {
2
+ splines = true;
3
+ compound = true;
4
+ "10.0.0.1" [
5
+ shape = "box";
6
+ fontsize = 14;
7
+ style = "filled";
8
+ penwidth = 1;
9
+ fillcolor = "#a5f5a5";
10
+ color = "#888888";
11
+ label = "remote host 10.0.0.1";
12
+ ];
13
+ "10.0.0.2" [
14
+ shape = "box";
15
+ fontsize = 14;
16
+ style = "filled";
17
+ penwidth = 1;
18
+ fillcolor = "#a5f5a5";
19
+ color = "#888888";
20
+ label = "remote host 10.0.0.2";
21
+ ];
22
+ subgraph "cluster_host" {
23
+ shape = "box";
24
+ fontsize = 14;
25
+ style = "filled";
26
+ penwidth = 1;
27
+ fillcolor = "#f5f5f5";
28
+ color = "#666666";
29
+ label = "host system";
30
+ "out_DASH_eni0" [
31
+ shape = "box";
32
+ fontsize = 14;
33
+ style = "filled";
34
+ penwidth = 1;
35
+ fillcolor = "#e8e8c8";
36
+ color = "#af6b4e";
37
+ label = "eni0";
38
+ ];
39
+ "out_DASH_eni1" [
40
+ shape = "box";
41
+ fontsize = 14;
42
+ style = "filled";
43
+ penwidth = 1;
44
+ fillcolor = "#e8e8c8";
45
+ color = "#af6b4e";
46
+ label = "eni1";
47
+ ];
48
+ subgraph "cluster_conlink" {
49
+ shape = "box";
50
+ fontsize = 14;
51
+ style = "rounded,filled";
52
+ penwidth = 3;
53
+ fillcolor = "#c5d1e7";
54
+ color = "#7396a0";
55
+ label = "conlink/network";
56
+ subgraph "cluster_bridge_s1" {
57
+ shape = "box";
58
+ fontsize = 14;
59
+ style = "filled";
60
+ penwidth = 1;
61
+ fillcolor = "#c8badc";
62
+ color = "#6e509f";
63
+ label = "s1";
64
+ "out_DASH_nodeA_1_DASH_e1" [
65
+ color = "#af6b4e";
66
+ fillcolor = "#e8e8c8";
67
+ width = 0.1;
68
+ penwidth = 1;
69
+ style = "filled";
70
+ label = "nodeA_1-e1";
71
+ shape = "box";
72
+ fontsize = 10;
73
+ height = 0.1;
74
+ ];
75
+ "geneve_DASH_1001" [
76
+ color = "#af6b4e";
77
+ fillcolor = "#e8e8c8";
78
+ width = 0.1;
79
+ penwidth = 1;
80
+ style = "filled";
81
+ label = "geneve-1001";
82
+ shape = "box";
83
+ fontsize = 10;
84
+ height = 0.1;
85
+ ];
86
+ }
87
+ subgraph "cluster_bridge_s2" {
88
+ shape = "box";
89
+ fontsize = 14;
90
+ style = "filled";
91
+ penwidth = 1;
92
+ fillcolor = "#c8badc";
93
+ color = "#6e509f";
94
+ label = "s2";
95
+ }
96
+ subgraph "cluster_bridge_s3" {
97
+ shape = "box";
98
+ fontsize = 14;
99
+ style = "filled";
100
+ penwidth = 1;
101
+ fillcolor = "#c8badc";
102
+ color = "#6e509f";
103
+ label = "s3";
104
+ }
105
+ subgraph "cluster_bridge_s2" {
106
+ shape = "box";
107
+ fontsize = 14;
108
+ style = "filled";
109
+ penwidth = 1;
110
+ fillcolor = "#c8badc";
111
+ color = "#6e509f";
112
+ label = "s2";
113
+ "out_DASH_nodeA_1_DASH_e2" [
114
+ color = "#af6b4e";
115
+ fillcolor = "#e8e8c8";
116
+ width = 0.1;
117
+ penwidth = 1;
118
+ style = "filled";
119
+ label = "nodeA_1-e2";
120
+ shape = "box";
121
+ fontsize = 10;
122
+ height = 0.1;
123
+ ];
124
+ "out_DASH_nodeB_1_DASH_eth0" [
125
+ color = "#af6b4e";
126
+ fillcolor = "#e8e8c8";
127
+ width = 0.1;
128
+ penwidth = 1;
129
+ style = "filled";
130
+ label = "nodeB_1-eth0";
131
+ shape = "box";
132
+ fontsize = 10;
133
+ height = 0.1;
134
+ ];
135
+ }
136
+ subgraph "cluster_bridge_s3" {
137
+ shape = "box";
138
+ fontsize = 14;
139
+ style = "filled";
140
+ penwidth = 1;
141
+ fillcolor = "#c8badc";
142
+ color = "#6e509f";
143
+ label = "s3";
144
+ "out_DASH_nodeA_1_DASH_e3" [
145
+ color = "#af6b4e";
146
+ fillcolor = "#e8e8c8";
147
+ width = 0.1;
148
+ penwidth = 1;
149
+ style = "filled";
150
+ label = "nodeA_1-e3";
151
+ shape = "box";
152
+ fontsize = 10;
153
+ height = 0.1;
154
+ ];
155
+ "out_DASH_nodeC_DASH_eth0" [
156
+ color = "#af6b4e";
157
+ fillcolor = "#e8e8c8";
158
+ width = 0.1;
159
+ penwidth = 1;
160
+ style = "filled";
161
+ label = "nodeC-eth0";
162
+ shape = "box";
163
+ fontsize = 10;
164
+ height = 0.1;
165
+ ];
166
+ "geneve_DASH_1002" [
167
+ color = "#af6b4e";
168
+ fillcolor = "#e8e8c8";
169
+ width = 0.1;
170
+ penwidth = 1;
171
+ style = "filled";
172
+ label = "geneve-1002";
173
+ shape = "box";
174
+ fontsize = 10;
175
+ height = 0.1;
176
+ ];
177
+ }
178
+ }
179
+ subgraph "cluster_service_nodeA" {
180
+ shape = "box";
181
+ fontsize = 14;
182
+ style = "rounded,filled";
183
+ penwidth = 2;
184
+ fillcolor = "#c1d0d7";
185
+ color = "#7396a6";
186
+ label = "service ':nodeA'";
187
+ "nodeA_COLON_e1" [
188
+ color = "#af6b4e";
189
+ fillcolor = "#e8e8c8";
190
+ width = 0.1;
191
+ penwidth = 1;
192
+ style = "filled";
193
+ label = "e1";
194
+ shape = "box";
195
+ fontsize = 10;
196
+ height = 0.1;
197
+ ];
198
+ "nodeA_COLON_e2" [
199
+ color = "#af6b4e";
200
+ fillcolor = "#e8e8c8";
201
+ width = 0.1;
202
+ penwidth = 1;
203
+ style = "filled";
204
+ label = "e2";
205
+ shape = "box";
206
+ fontsize = 10;
207
+ height = 0.1;
208
+ ];
209
+ "nodeA_COLON_e3" [
210
+ color = "#af6b4e";
211
+ fillcolor = "#e8e8c8";
212
+ width = 0.1;
213
+ penwidth = 1;
214
+ style = "filled";
215
+ label = "e3";
216
+ shape = "box";
217
+ fontsize = 10;
218
+ height = 0.1;
219
+ ];
220
+ }
221
+ subgraph "cluster_service_nodeB" {
222
+ shape = "box";
223
+ fontsize = 14;
224
+ style = "rounded,filled";
225
+ penwidth = 2;
226
+ fillcolor = "#c1d0d7";
227
+ color = "#7396a6";
228
+ label = "service ':nodeB'";
229
+ "nodeB_COLON_eth0" [
230
+ color = "#af6b4e";
231
+ fillcolor = "#e8e8c8";
232
+ width = 0.1;
233
+ penwidth = 1;
234
+ style = "filled";
235
+ label = "eth0";
236
+ shape = "box";
237
+ fontsize = 10;
238
+ height = 0.1;
239
+ ];
240
+ }
241
+ subgraph "cluster_service_nodeE" {
242
+ shape = "box";
243
+ fontsize = 14;
244
+ style = "rounded,filled";
245
+ penwidth = 2;
246
+ fillcolor = "#c1d0d7";
247
+ color = "#7396a6";
248
+ label = "service ':nodeE'";
249
+ "nodeE_COLON_v0" [
250
+ color = "#af6b4e";
251
+ fillcolor = "#e8e8c8";
252
+ width = 0.1;
253
+ penwidth = 1;
254
+ style = "filled";
255
+ label = "v0";
256
+ shape = "box";
257
+ fontsize = 10;
258
+ height = 0.1;
259
+ ];
260
+ "nodeE_COLON_mv0" [
261
+ color = "#af6b4e";
262
+ fillcolor = "#e8e8c8";
263
+ width = 0.1;
264
+ penwidth = 1;
265
+ style = "filled";
266
+ label = "mv0";
267
+ shape = "box";
268
+ fontsize = 10;
269
+ height = 0.1;
270
+ ];
271
+ }
272
+ subgraph "cluster_service_nodeF" {
273
+ shape = "box";
274
+ fontsize = 14;
275
+ style = "rounded,filled";
276
+ penwidth = 2;
277
+ fillcolor = "#c1d0d7";
278
+ color = "#7396a6";
279
+ label = "service ':nodeF'";
280
+ "nodeF_COLON_mv0" [
281
+ color = "#af6b4e";
282
+ fillcolor = "#e8e8c8";
283
+ width = 0.1;
284
+ penwidth = 1;
285
+ style = "filled";
286
+ label = "mv0";
287
+ shape = "box";
288
+ fontsize = 10;
289
+ height = 0.1;
290
+ ];
291
+ }
292
+ subgraph "cluster_service_nodeG" {
293
+ shape = "box";
294
+ fontsize = 14;
295
+ style = "rounded,filled";
296
+ penwidth = 2;
297
+ fillcolor = "#c1d0d7";
298
+ color = "#7396a6";
299
+ label = "service ':nodeG'";
300
+ "nodeG_COLON_iv0" [
301
+ color = "#af6b4e";
302
+ fillcolor = "#e8e8c8";
303
+ width = 0.1;
304
+ penwidth = 1;
305
+ style = "filled";
306
+ label = "iv0";
307
+ shape = "box";
308
+ fontsize = 10;
309
+ height = 0.1;
310
+ ];
311
+ }
312
+ subgraph "cluster_service_nodeH" {
313
+ shape = "box";
314
+ fontsize = 14;
315
+ style = "rounded,filled";
316
+ penwidth = 2;
317
+ fillcolor = "#c1d0d7";
318
+ color = "#7396a6";
319
+ label = "service ':nodeH'";
320
+ "nodeH_COLON_mv0" [
321
+ color = "#af6b4e";
322
+ fillcolor = "#e8e8c8";
323
+ width = 0.1;
324
+ penwidth = 1;
325
+ style = "filled";
326
+ label = "mv0";
327
+ shape = "box";
328
+ fontsize = 10;
329
+ height = 0.1;
330
+ ];
331
+ }
332
+ subgraph "cluster_container_nodeC" {
333
+ shape = "box";
334
+ fontsize = 14;
335
+ style = "rounded,filled";
336
+ penwidth = 1;
337
+ fillcolor = "#dfe8f1";
338
+ color = "#7396a6";
339
+ label = "container ':nodeC'";
340
+ "nodeC_COLON_eth0" [
341
+ color = "#af6b4e";
342
+ fillcolor = "#e8e8c8";
343
+ width = 0.1;
344
+ penwidth = 1;
345
+ style = "filled";
346
+ label = "eth0";
347
+ shape = "box";
348
+ fontsize = 10;
349
+ height = 0.1;
350
+ ];
351
+ }
352
+ subgraph "cluster_container_nodeD" {
353
+ shape = "box";
354
+ fontsize = 14;
355
+ style = "rounded,filled";
356
+ penwidth = 1;
357
+ fillcolor = "#dfe8f1";
358
+ color = "#7396a6";
359
+ label = "container ':nodeD'";
360
+ "nodeD_COLON_dummy0" [
361
+ color = "#af6b4e";
362
+ fillcolor = "#e8e8c8";
363
+ width = 0.1;
364
+ penwidth = 1;
365
+ style = "filled";
366
+ label = "dummy0";
367
+ shape = "box";
368
+ fontsize = 10;
369
+ height = 0.1;
370
+ ];
371
+ }
372
+ }
373
+ "nodeA_COLON_e1" -> "out_DASH_nodeA_1_DASH_e1" [
374
+ shape = "box";
375
+ fontsize = 14;
376
+ style = "filled";
377
+ penwidth = 1;
378
+ label = "";
379
+ ];
380
+ "nodeA_COLON_e2" -> "out_DASH_nodeA_1_DASH_e2" [
381
+ shape = "box";
382
+ fontsize = 14;
383
+ style = "filled";
384
+ penwidth = 1;
385
+ label = "";
386
+ ];
387
+ "nodeA_COLON_e3" -> "out_DASH_nodeA_1_DASH_e3" [
388
+ shape = "box";
389
+ fontsize = 14;
390
+ style = "filled";
391
+ penwidth = 1;
392
+ label = "";
393
+ ];
394
+ "nodeB_COLON_eth0" -> "out_DASH_nodeB_1_DASH_eth0" [
395
+ shape = "box";
396
+ fontsize = 14;
397
+ style = "filled";
398
+ penwidth = 1;
399
+ label = "";
400
+ ];
401
+ "nodeC_COLON_eth0" -> "out_DASH_nodeC_DASH_eth0" [
402
+ shape = "box";
403
+ fontsize = 14;
404
+ style = "filled";
405
+ penwidth = 1;
406
+ label = "";
407
+ ];
408
+ "nodeE_COLON_v0" -> "out_DASH_eni0" [
409
+ shape = "box";
410
+ fontsize = 14;
411
+ style = "filled";
412
+ penwidth = 1;
413
+ label = "vlan 5";
414
+ ];
415
+ "nodeE_COLON_mv0" -> "out_DASH_eni0" [
416
+ shape = "box";
417
+ fontsize = 14;
418
+ style = "filled";
419
+ penwidth = 1;
420
+ label = "macvlan";
421
+ ];
422
+ "nodeF_COLON_mv0" -> "out_DASH_eni0" [
423
+ shape = "box";
424
+ fontsize = 14;
425
+ style = "filled";
426
+ penwidth = 1;
427
+ label = "macvlan";
428
+ ];
429
+ "nodeG_COLON_iv0" -> "out_DASH_eni1" [
430
+ shape = "box";
431
+ fontsize = 14;
432
+ style = "filled";
433
+ penwidth = 1;
434
+ label = "ipvlan";
435
+ ];
436
+ "nodeH_COLON_mv0" -> "out_DASH_eni1" [
437
+ shape = "box";
438
+ fontsize = 14;
439
+ style = "filled";
440
+ penwidth = 1;
441
+ label = "macvlan";
442
+ ];
443
+ "geneve_DASH_1001" -> "10.0.0.1" [
444
+ shape = "box";
445
+ fontsize = 14;
446
+ style = "filled";
447
+ penwidth = 1;
448
+ label = "";
449
+ ];
450
+ "geneve_DASH_1002" -> "10.0.0.2" [
451
+ shape = "box";
452
+ fontsize = 14;
453
+ style = "filled";
454
+ penwidth = 1;
455
+ label = "";
456
+ ];
457
+ }
@@ -0,0 +1,123 @@
1
+ digraph D {
2
+ splines = true;
3
+ compound = true;
4
+ node [shape=box fontsize=12 style=filled penwidth=1];
5
+
6
+ // host system
7
+ subgraph cluster_host {
8
+ label = "host system";
9
+ style=filled fillcolor="#f5f5f5" color="#666666";
10
+
11
+ // main link nodes
12
+ S_nodeA_COLON_e1 [label="e1" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
13
+ S_nodeA_COLON_e2 [label="e2" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
14
+ S_nodeA_COLON_e3 [label="e3" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
15
+ S_nodeB_COLON_eth0 [label="eth0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
16
+ nodeC_COLON_eth0 [label="eth0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
17
+ nodeD_COLON_dummy0 [label="dummy0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
18
+ S_nodeE_COLON_v0 [label="v0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
19
+ S_nodeE_COLON_mv0 [label="mv0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
20
+ S_nodeF_COLON_mv0 [label="mv0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
21
+ S_nodeG_COLON_iv0 [label="iv0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
22
+ S_nodeH_COLON_mv0 [label="mv0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
23
+
24
+ // containers and their links/interfaces
25
+ subgraph cluster_S_nodeA {
26
+ label = "service 'nodeA'";
27
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
28
+ S_nodeA_COLON_e1
29
+ S_nodeA_COLON_e2
30
+ S_nodeA_COLON_e3
31
+ }
32
+ subgraph cluster_S_nodeB {
33
+ label = "service 'nodeB'";
34
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
35
+ S_nodeB_COLON_eth0
36
+ }
37
+ subgraph cluster_nodeC {
38
+ label = "container 'nodeC'";
39
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6";
40
+ nodeC_COLON_eth0
41
+ }
42
+ subgraph cluster_nodeD {
43
+ label = "container 'nodeD'";
44
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6";
45
+ nodeD_COLON_dummy0
46
+ }
47
+ subgraph cluster_S_nodeE {
48
+ label = "service 'nodeE'";
49
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
50
+ S_nodeE_COLON_v0
51
+ S_nodeE_COLON_mv0
52
+ }
53
+ subgraph cluster_S_nodeF {
54
+ label = "service 'nodeF'";
55
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
56
+ S_nodeF_COLON_mv0
57
+ }
58
+ subgraph cluster_S_nodeG {
59
+ label = "service 'nodeG'";
60
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
61
+ S_nodeG_COLON_iv0
62
+ }
63
+ subgraph cluster_S_nodeH {
64
+ label = "service 'nodeH'";
65
+ style="rounded,filled" fillcolor = "#e1d5e7" color = "#9673a6" fillcolor = "#d1c5e7" penwidth = 2;
66
+ S_nodeH_COLON_mv0
67
+ }
68
+
69
+ // bridges, tunnels, veth connections
70
+ subgraph cluster_conlink {
71
+ label = "conlink/network";
72
+ style="rounded,filled" fillcolor = "#c1b5c7" color = "#9673a6";
73
+ subgraph cluster_bridge_s1 {
74
+ label = "s1";
75
+ style= filled fillcolor="#dae8fc" color="#6c8ebf";
76
+ bridge_s1 [shape=point style=invis];
77
+ nodeA_1_DASH_e1 [label="nodeA_1-e1" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
78
+ S_nodeA_COLON_e1 -> nodeA_1_DASH_e1
79
+ geneve_DASH_1001 [label="geneve-1001" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
80
+ geneve_DASH_1002 [label="geneve-1002" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
81
+ }
82
+ subgraph cluster_bridge_s2 {
83
+ label = "s2";
84
+ style= filled fillcolor="#dae8fc" color="#6c8ebf";
85
+ bridge_s2 [shape=point style=invis];
86
+ nodeA_1_DASH_e2 [label="nodeA_1-e2" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
87
+ S_nodeA_COLON_e2 -> nodeA_1_DASH_e2
88
+ nodeB_1_DASH_eth0 [label="nodeB_1-eth0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
89
+ S_nodeB_COLON_eth0 -> nodeB_1_DASH_eth0
90
+ geneve_DASH_1001 [label="geneve-1001" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
91
+ geneve_DASH_1002 [label="geneve-1002" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
92
+ }
93
+ subgraph cluster_bridge_s3 {
94
+ label = "s3";
95
+ style= filled fillcolor="#dae8fc" color="#6c8ebf";
96
+ bridge_s3 [shape=point style=invis];
97
+ nodeA_1_DASH_e3 [label="nodeA_1-e3" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
98
+ S_nodeA_COLON_e3 -> nodeA_1_DASH_e3
99
+ nodeC_DASH_eth0 [label="nodeC-eth0" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
100
+ nodeC_COLON_eth0 -> nodeC_DASH_eth0
101
+ geneve_DASH_1001 [label="geneve-1001" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
102
+ geneve_DASH_1002 [label="geneve-1002" width=0.1 height=0.1 fontsize=10 fillcolor="#ffbb9e" color="#d7db00"];
103
+ }
104
+ }
105
+
106
+ // vlan/vtap links
107
+ eni0 [label="eni0" fontsize=12 fillcolor="#ffbb9e" color="#d7db00"];
108
+ S_nodeE_COLON_v0 -> eni0 [label="vlan 5"];
109
+ S_nodeE_COLON_mv0 -> eni0 [label="macvlan"];
110
+ S_nodeF_COLON_mv0 -> eni0 [label="macvlan"];
111
+ eni1 [label="eni1" fontsize=12 fillcolor="#ffbb9e" color="#d7db00"];
112
+ S_nodeG_COLON_iv0 -> eni1 [label="ipvlan"];
113
+ S_nodeH_COLON_mv0 -> eni1 [label="macvlan"];
114
+ // end of host system
115
+ }
116
+
117
+ // remote hosts and tunnels links
118
+ _DOLLAR__LCURLY_REMOTE1_LCURLY_ [label="remote host '${REMOTE1}'" fillcolor="#a5a5a5" color="#888888"];
119
+ geneve_DASH_1001 -> _DOLLAR__LCURLY_REMOTE1_LCURLY_
120
+ _DOLLAR__LCURLY_REMOTE2_LCURLY_ [label="remote host '${REMOTE2}'" fillcolor="#a5a5a5" color="#888888"];
121
+ geneve_DASH_1002 -> _DOLLAR__LCURLY_REMOTE2_LCURLY_
122
+ }
123
+