conlink 2.0.1 → 2.0.2

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.
Files changed (74) hide show
  1. package/README.md +11 -6
  2. package/examples/test4-multiple/modes/all/deps +1 -0
  3. package/examples/test4-multiple/{base-compose.yaml → modes/base/compose.yaml} +3 -3
  4. package/examples/test4-multiple/{node1-compose.yaml → modes/node1/compose.yaml} +0 -3
  5. package/examples/test4-multiple/{nodes2-compose.yaml → modes/nodes2/compose.yaml} +0 -5
  6. package/examples/test4-multiple/modes/web/compose.yaml +5 -0
  7. package/examples/test4-multiple/modes/web/deps +1 -0
  8. package/mdc +108 -0
  9. package/package.json +2 -1
  10. package/scripts/copy.sh +48 -0
  11. package/scripts/wait.sh +73 -0
  12. package/.env +0 -3
  13. package/TODO +0 -34
  14. package/examples/data.dot +0 -457
  15. package/examples/net2dot-data.dot +0 -123
  16. package/examples/net2dot.dot +0 -457
  17. package/examples/test1-data.dot +0 -82
  18. package/examples/test1.dot +0 -286
  19. package/examples/test4-multiple/all-compose.yaml +0 -5
  20. package/examples/test4-multiple/web-network.yaml +0 -2
  21. package/host-build.yaml +0 -1
  22. package/inspect.json +0 -210
  23. package/modes0/a/deps +0 -1
  24. package/modes0/b/deps +0 -1
  25. package/modes0/c/deps +0 -1
  26. package/modes0/e/deps +0 -1
  27. package/modes1/a/deps +0 -1
  28. package/modes1/b/deps +0 -1
  29. package/modes1/c/deps +0 -1
  30. package/modes1/d/deps +0 -1
  31. package/modes2/a/deps +0 -1
  32. package/modes2/b/deps +0 -1
  33. package/modes2/c/deps +0 -1
  34. package/modes2/d/de +0 -1
  35. package/modes2/d/deps +0 -1
  36. package/modes3/accel/deps +0 -1
  37. package/modes4/a/deps +0 -1
  38. package/modes4/b/deps +0 -1
  39. package/net2dot.mjs +0 -21
  40. package/notes.txt +0 -82
  41. package/old/Dockerfile.bak +0 -26
  42. package/old/add-link.sh +0 -82
  43. package/old/conlink +0 -12
  44. package/old/conlink.cljs +0 -131
  45. package/old/dot_gitignore +0 -1
  46. package/old/examples/test2-compose.yaml +0 -32
  47. package/old/examples/test2-network.yaml +0 -42
  48. package/old/graphviz.cljs +0 -14
  49. package/old/move-link.sh +0 -108
  50. package/old/net2dot.cljs +0 -114
  51. package/old/net2dot.py +0 -122
  52. package/old/notes-old.txt +0 -97
  53. package/old/package.json +0 -16
  54. package/old/schema.yaml +0 -138
  55. package/old/schema.yaml.bak +0 -76
  56. package/old/set-cover-old.cljs +0 -205
  57. package/old/set-cover-old2.cljs +0 -150
  58. package/old/test2b-compose.yaml +0 -18
  59. package/old/veth-link.sh +0 -96
  60. package/read-stream.cljs +0 -12
  61. package/resolve-deps.cljs +0 -183
  62. package/schema-ish.yaml +0 -29
  63. package/tests/invalid-schema-1.yaml +0 -6
  64. package/tests/invalid-schema-2.yaml +0 -6
  65. package/tests/invalid-schema-3.yaml +0 -17
  66. package/tests/invalid-schema-4.yaml +0 -14
  67. package/tests/invalid-schema-5.yaml +0 -12
  68. package/tests/invalid-schema-6.yaml +0 -12
  69. package/tmp/conlink/.env +0 -1
  70. package/topo1.cljs +0 -35
  71. package/topo2.cljs +0 -36
  72. package/topo3.cljs +0 -44
  73. /package/{modes3/ab → examples/test4-multiple/modes/node1}/deps +0 -0
  74. /package/{modes3/mach3 → examples/test4-multiple/modes/nodes2}/deps +0 -0
@@ -1,286 +0,0 @@
1
- digraph {
2
- splines = true;
3
- compound = true;
4
- subgraph "cluster_host" {
5
- shape = "box";
6
- fontsize = 14;
7
- style = "filled";
8
- penwidth = 1;
9
- fillcolor = "#f5f5f5";
10
- color = "#666666";
11
- label = "host system";
12
- subgraph "cluster_conlink" {
13
- shape = "box";
14
- fontsize = 14;
15
- style = "rounded,filled";
16
- penwidth = 3;
17
- fillcolor = "#c5d1e7";
18
- color = "#7396a0";
19
- label = "conlink/network";
20
- subgraph "cluster_bridge_s1" {
21
- shape = "box";
22
- fontsize = 14;
23
- style = "filled";
24
- penwidth = 1;
25
- fillcolor = "#c8badc";
26
- color = "#6e509f";
27
- label = "s1";
28
- }
29
- subgraph "cluster_bridge_s2" {
30
- shape = "box";
31
- fontsize = 14;
32
- style = "filled";
33
- penwidth = 1;
34
- fillcolor = "#c8badc";
35
- color = "#6e509f";
36
- label = "s2";
37
- }
38
- subgraph "cluster_bridge_s3" {
39
- shape = "box";
40
- fontsize = 14;
41
- style = "filled";
42
- penwidth = 1;
43
- fillcolor = "#c8badc";
44
- color = "#6e509f";
45
- label = "s3";
46
- }
47
- subgraph "cluster_bridge_s1" {
48
- shape = "box";
49
- fontsize = 14;
50
- style = "filled";
51
- penwidth = 1;
52
- fillcolor = "#c8badc";
53
- color = "#6e509f";
54
- label = "s1";
55
- "out_DASH_r0_1_DASH_eth_DASH_s1" [
56
- color = "#af6b4e";
57
- fillcolor = "#e8e8c8";
58
- width = 0.1;
59
- penwidth = 1;
60
- style = "filled";
61
- label = "r0_1-eth-s1";
62
- shape = "box";
63
- fontsize = 10;
64
- height = 0.1;
65
- ];
66
- "out_DASH_h1_1_DASH_eth0" [
67
- color = "#af6b4e";
68
- fillcolor = "#e8e8c8";
69
- width = 0.1;
70
- penwidth = 1;
71
- style = "filled";
72
- label = "h1_1-eth0";
73
- shape = "box";
74
- fontsize = 10;
75
- height = 0.1;
76
- ];
77
- }
78
- subgraph "cluster_bridge_s2" {
79
- shape = "box";
80
- fontsize = 14;
81
- style = "filled";
82
- penwidth = 1;
83
- fillcolor = "#c8badc";
84
- color = "#6e509f";
85
- label = "s2";
86
- "out_DASH_r0_1_DASH_eth_DASH_s2" [
87
- color = "#af6b4e";
88
- fillcolor = "#e8e8c8";
89
- width = 0.1;
90
- penwidth = 1;
91
- style = "filled";
92
- label = "r0_1-eth-s2";
93
- shape = "box";
94
- fontsize = 10;
95
- height = 0.1;
96
- ];
97
- "out_DASH_h2_1_DASH_eth0" [
98
- color = "#af6b4e";
99
- fillcolor = "#e8e8c8";
100
- width = 0.1;
101
- penwidth = 1;
102
- style = "filled";
103
- label = "h2_1-eth0";
104
- shape = "box";
105
- fontsize = 10;
106
- height = 0.1;
107
- ];
108
- }
109
- subgraph "cluster_bridge_s3" {
110
- shape = "box";
111
- fontsize = 14;
112
- style = "filled";
113
- penwidth = 1;
114
- fillcolor = "#c8badc";
115
- color = "#6e509f";
116
- label = "s3";
117
- "out_DASH_r0_1_DASH_eth_DASH_s3" [
118
- color = "#af6b4e";
119
- fillcolor = "#e8e8c8";
120
- width = 0.1;
121
- penwidth = 1;
122
- style = "filled";
123
- label = "r0_1-eth-s3";
124
- shape = "box";
125
- fontsize = 10;
126
- height = 0.1;
127
- ];
128
- "out_DASH_h3_1_DASH_eth0" [
129
- color = "#af6b4e";
130
- fillcolor = "#e8e8c8";
131
- width = 0.1;
132
- penwidth = 1;
133
- style = "filled";
134
- label = "h3_1-eth0";
135
- shape = "box";
136
- fontsize = 10;
137
- height = 0.1;
138
- ];
139
- }
140
- }
141
- subgraph "cluster_service_r0" {
142
- shape = "box";
143
- fontsize = 14;
144
- style = "rounded,filled";
145
- penwidth = 2;
146
- fillcolor = "#c1d0d7";
147
- color = "#7396a6";
148
- label = "service 'r0'";
149
- "r0_COLON_eth_DASH_s1" [
150
- color = "#af6b4e";
151
- fillcolor = "#e8e8c8";
152
- width = 0.1;
153
- penwidth = 1;
154
- style = "filled";
155
- label = "eth-s1";
156
- shape = "box";
157
- fontsize = 10;
158
- height = 0.1;
159
- ];
160
- "r0_COLON_eth_DASH_s2" [
161
- color = "#af6b4e";
162
- fillcolor = "#e8e8c8";
163
- width = 0.1;
164
- penwidth = 1;
165
- style = "filled";
166
- label = "eth-s2";
167
- shape = "box";
168
- fontsize = 10;
169
- height = 0.1;
170
- ];
171
- "r0_COLON_eth_DASH_s3" [
172
- color = "#af6b4e";
173
- fillcolor = "#e8e8c8";
174
- width = 0.1;
175
- penwidth = 1;
176
- style = "filled";
177
- label = "eth-s3";
178
- shape = "box";
179
- fontsize = 10;
180
- height = 0.1;
181
- ];
182
- }
183
- subgraph "cluster_service_h1" {
184
- shape = "box";
185
- fontsize = 14;
186
- style = "rounded,filled";
187
- penwidth = 2;
188
- fillcolor = "#c1d0d7";
189
- color = "#7396a6";
190
- label = "service 'h1'";
191
- "h1_COLON_eth0" [
192
- color = "#af6b4e";
193
- fillcolor = "#e8e8c8";
194
- width = 0.1;
195
- penwidth = 1;
196
- style = "filled";
197
- label = "eth0";
198
- shape = "box";
199
- fontsize = 10;
200
- height = 0.1;
201
- ];
202
- }
203
- subgraph "cluster_service_h2" {
204
- shape = "box";
205
- fontsize = 14;
206
- style = "rounded,filled";
207
- penwidth = 2;
208
- fillcolor = "#c1d0d7";
209
- color = "#7396a6";
210
- label = "service 'h2'";
211
- "h2_COLON_eth0" [
212
- color = "#af6b4e";
213
- fillcolor = "#e8e8c8";
214
- width = 0.1;
215
- penwidth = 1;
216
- style = "filled";
217
- label = "eth0";
218
- shape = "box";
219
- fontsize = 10;
220
- height = 0.1;
221
- ];
222
- }
223
- subgraph "cluster_service_h3" {
224
- shape = "box";
225
- fontsize = 14;
226
- style = "rounded,filled";
227
- penwidth = 2;
228
- fillcolor = "#c1d0d7";
229
- color = "#7396a6";
230
- label = "service 'h3'";
231
- "h3_COLON_eth0" [
232
- color = "#af6b4e";
233
- fillcolor = "#e8e8c8";
234
- width = 0.1;
235
- penwidth = 1;
236
- style = "filled";
237
- label = "eth0";
238
- shape = "box";
239
- fontsize = 10;
240
- height = 0.1;
241
- ];
242
- }
243
- }
244
- "r0_COLON_eth_DASH_s1" -> "out_DASH_r0_1_DASH_eth_DASH_s1" [
245
- shape = "box";
246
- fontsize = 14;
247
- style = "filled";
248
- penwidth = 1;
249
- label = "";
250
- ];
251
- "r0_COLON_eth_DASH_s2" -> "out_DASH_r0_1_DASH_eth_DASH_s2" [
252
- shape = "box";
253
- fontsize = 14;
254
- style = "filled";
255
- penwidth = 1;
256
- label = "";
257
- ];
258
- "r0_COLON_eth_DASH_s3" -> "out_DASH_r0_1_DASH_eth_DASH_s3" [
259
- shape = "box";
260
- fontsize = 14;
261
- style = "filled";
262
- penwidth = 1;
263
- label = "";
264
- ];
265
- "h1_COLON_eth0" -> "out_DASH_h1_1_DASH_eth0" [
266
- shape = "box";
267
- fontsize = 14;
268
- style = "filled";
269
- penwidth = 1;
270
- label = "";
271
- ];
272
- "h2_COLON_eth0" -> "out_DASH_h2_1_DASH_eth0" [
273
- shape = "box";
274
- fontsize = 14;
275
- style = "filled";
276
- penwidth = 1;
277
- label = "";
278
- ];
279
- "h3_COLON_eth0" -> "out_DASH_h3_1_DASH_eth0" [
280
- shape = "box";
281
- fontsize = 14;
282
- style = "filled";
283
- penwidth = 1;
284
- label = "";
285
- ];
286
- }
@@ -1,5 +0,0 @@
1
- version: "2.4"
2
-
3
- services:
4
- network:
5
- command: /app/build/conlink.js --compose-file ${COMPOSE_FILE:-examples/test4-multiple/base-compose.yaml:examples/test4-multiple/node1-compose.yaml:examples/test4-multiple/nodes2.yaml:examples/test4-multiple/all-compose.yaml} --network-file examples/test4-multiple/web-network.yaml
@@ -1,2 +0,0 @@
1
- commands:
2
- - {service: r0, command: "python3 -m http.server 80"}
package/host-build.yaml DELETED
@@ -1 +0,0 @@
1
- services: {network: {volumes: ["../:/app/"]}}
package/inspect.json DELETED
@@ -1,210 +0,0 @@
1
- [
2
- {
3
- "Id": "43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357",
4
- "Created": "2023-10-11T15:55:04.428835024Z",
5
- "Path": "sh",
6
- "Args": [
7
- "-c",
8
- "while ! ip link show eth0 up; do sleep 1; done; sleep 864000"
9
- ],
10
- "State": {
11
- "Status": "running",
12
- "Running": true,
13
- "Paused": false,
14
- "Restarting": false,
15
- "OOMKilled": false,
16
- "Dead": false,
17
- "Pid": 10216,
18
- "ExitCode": 0,
19
- "Error": "",
20
- "StartedAt": "2023-10-11T15:55:04.576997181Z",
21
- "FinishedAt": "0001-01-01T00:00:00Z"
22
- },
23
- "Image": "sha256:8ca4688f4f356596b5ae539337c9941abc78eda10021d35cbc52659c74d9b443",
24
- "ResolvConfPath": "/var/lib/docker/containers/43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357/resolv.conf",
25
- "HostnamePath": "/var/lib/docker/containers/43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357/hostname",
26
- "HostsPath": "/var/lib/docker/containers/43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357/hosts",
27
- "LogPath": "/var/lib/docker/containers/43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357/43e63a3c948443f55198f4de29fd96805fdb306398ff64d89f1103c355e28357-json.log",
28
- "Name": "/examples_node2_1",
29
- "RestartCount": 0,
30
- "Driver": "overlay2",
31
- "Platform": "linux",
32
- "MountLabel": "",
33
- "ProcessLabel": "",
34
- "AppArmorProfile": "docker-default",
35
- "ExecIDs": null,
36
- "HostConfig": {
37
- "Binds": [],
38
- "ContainerIDFile": "",
39
- "LogConfig": {
40
- "Type": "json-file",
41
- "Config": {}
42
- },
43
- "NetworkMode": "none",
44
- "PortBindings": {},
45
- "RestartPolicy": {
46
- "Name": "",
47
- "MaximumRetryCount": 0
48
- },
49
- "AutoRemove": false,
50
- "VolumeDriver": "",
51
- "VolumesFrom": [],
52
- "ConsoleSize": [
53
- 0,
54
- 0
55
- ],
56
- "CapAdd": [
57
- "NET_ADMIN"
58
- ],
59
- "CapDrop": null,
60
- "CgroupnsMode": "host",
61
- "Dns": null,
62
- "DnsOptions": null,
63
- "DnsSearch": null,
64
- "ExtraHosts": null,
65
- "GroupAdd": null,
66
- "IpcMode": "private",
67
- "Cgroup": "",
68
- "Links": null,
69
- "OomScoreAdj": 0,
70
- "PidMode": "",
71
- "Privileged": false,
72
- "PublishAllPorts": false,
73
- "ReadonlyRootfs": false,
74
- "SecurityOpt": null,
75
- "UTSMode": "",
76
- "UsernsMode": "",
77
- "ShmSize": 67108864,
78
- "Runtime": "runc",
79
- "Isolation": "",
80
- "CpuShares": 0,
81
- "Memory": 0,
82
- "NanoCpus": 0,
83
- "CgroupParent": "",
84
- "BlkioWeight": 0,
85
- "BlkioWeightDevice": null,
86
- "BlkioDeviceReadBps": null,
87
- "BlkioDeviceWriteBps": null,
88
- "BlkioDeviceReadIOps": null,
89
- "BlkioDeviceWriteIOps": null,
90
- "CpuPeriod": 0,
91
- "CpuQuota": 0,
92
- "CpuRealtimePeriod": 0,
93
- "CpuRealtimeRuntime": 0,
94
- "CpusetCpus": "",
95
- "CpusetMems": "",
96
- "Devices": null,
97
- "DeviceCgroupRules": null,
98
- "DeviceRequests": null,
99
- "MemoryReservation": 0,
100
- "MemorySwap": 0,
101
- "MemorySwappiness": null,
102
- "OomKillDisable": false,
103
- "PidsLimit": null,
104
- "Ulimits": null,
105
- "CpuCount": 0,
106
- "CpuPercent": 0,
107
- "IOMaximumIOps": 0,
108
- "IOMaximumBandwidth": 0,
109
- "MaskedPaths": [
110
- "/proc/asound",
111
- "/proc/acpi",
112
- "/proc/kcore",
113
- "/proc/keys",
114
- "/proc/latency_stats",
115
- "/proc/timer_list",
116
- "/proc/timer_stats",
117
- "/proc/sched_debug",
118
- "/proc/scsi",
119
- "/sys/firmware"
120
- ],
121
- "ReadonlyPaths": [
122
- "/proc/bus",
123
- "/proc/fs",
124
- "/proc/irq",
125
- "/proc/sys",
126
- "/proc/sysrq-trigger"
127
- ]
128
- },
129
- "GraphDriver": {
130
- "Data": {
131
- "LowerDir": "/var/lib/docker/overlay2/f45757baf87c92f0934409fa9617bd4027e1e4472711312b1d8145ca59cdf0f3-init/diff:/var/lib/docker/overlay2/0ee1adfcd9b69bb9354db86819da1c06904d5c664f8d9e0aded8c158a24654df/diff",
132
- "MergedDir": "/var/lib/docker/overlay2/f45757baf87c92f0934409fa9617bd4027e1e4472711312b1d8145ca59cdf0f3/merged",
133
- "UpperDir": "/var/lib/docker/overlay2/f45757baf87c92f0934409fa9617bd4027e1e4472711312b1d8145ca59cdf0f3/diff",
134
- "WorkDir": "/var/lib/docker/overlay2/f45757baf87c92f0934409fa9617bd4027e1e4472711312b1d8145ca59cdf0f3/work"
135
- },
136
- "Name": "overlay2"
137
- },
138
- "Mounts": [],
139
- "Config": {
140
- "Hostname": "43e63a3c9484",
141
- "Domainname": "",
142
- "User": "",
143
- "AttachStdin": false,
144
- "AttachStdout": false,
145
- "AttachStderr": false,
146
- "Tty": false,
147
- "OpenStdin": false,
148
- "StdinOnce": false,
149
- "Env": [
150
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
151
- ],
152
- "Cmd": [
153
- "sh",
154
- "-c",
155
- "while ! ip link show eth0 up; do sleep 1; done; sleep 864000"
156
- ],
157
- "Image": "alpine",
158
- "Volumes": null,
159
- "WorkingDir": "",
160
- "Entrypoint": null,
161
- "OnBuild": null,
162
- "Labels": {
163
- "com.docker.compose.config-hash": "be458eaf2e2aba67235023be9f8342d88ce0e0f7979749d6496423229a954bd3",
164
- "com.docker.compose.container-number": "1",
165
- "com.docker.compose.oneoff": "False",
166
- "com.docker.compose.project": "examples",
167
- "com.docker.compose.project.config_files": "examples/test2-compose.yaml",
168
- "com.docker.compose.project.working_dir": "/home/jmartin/work/viasat/repos/conlink.cljs/examples",
169
- "com.docker.compose.service": "node2",
170
- "com.docker.compose.version": "1.29.2"
171
- }
172
- },
173
- "NetworkSettings": {
174
- "Bridge": "",
175
- "SandboxID": "963251cd8230a51e9c658653a3fdeedfe10e9f16c03aed802b69d5a6c86f6d19",
176
- "HairpinMode": false,
177
- "LinkLocalIPv6Address": "",
178
- "LinkLocalIPv6PrefixLen": 0,
179
- "Ports": {},
180
- "SandboxKey": "/var/run/docker/netns/963251cd8230",
181
- "SecondaryIPAddresses": null,
182
- "SecondaryIPv6Addresses": null,
183
- "EndpointID": "",
184
- "Gateway": "",
185
- "GlobalIPv6Address": "",
186
- "GlobalIPv6PrefixLen": 0,
187
- "IPAddress": "",
188
- "IPPrefixLen": 0,
189
- "IPv6Gateway": "",
190
- "MacAddress": "",
191
- "Networks": {
192
- "none": {
193
- "IPAMConfig": null,
194
- "Links": null,
195
- "Aliases": null,
196
- "NetworkID": "c7b50bdae4d8c2baa2dfbfcf81a783cddcfd66df84c6ce3f3506985434a161c8",
197
- "EndpointID": "376d2c90a9e33a6e0fd62dc3f67c6f784d717594b54ebbb7e9d4d372ee0cf115",
198
- "Gateway": "",
199
- "IPAddress": "",
200
- "IPPrefixLen": 0,
201
- "IPv6Gateway": "",
202
- "GlobalIPv6Address": "",
203
- "GlobalIPv6PrefixLen": 0,
204
- "MacAddress": "",
205
- "DriverOpts": null
206
- }
207
- }
208
- }
209
- }
210
- ]
package/modes0/a/deps DELETED
@@ -1 +0,0 @@
1
- b,c
package/modes0/b/deps DELETED
@@ -1 +0,0 @@
1
- c,d
package/modes0/c/deps DELETED
@@ -1 +0,0 @@
1
- e
package/modes0/e/deps DELETED
@@ -1 +0,0 @@
1
- f
package/modes1/a/deps DELETED
@@ -1 +0,0 @@
1
- b c|d
package/modes1/b/deps DELETED
@@ -1 +0,0 @@
1
- e f
package/modes1/c/deps DELETED
@@ -1 +0,0 @@
1
- g
package/modes1/d/deps DELETED
@@ -1 +0,0 @@
1
- g h
package/modes2/a/deps DELETED
@@ -1 +0,0 @@
1
- b c
package/modes2/b/deps DELETED
@@ -1 +0,0 @@
1
- c|d
package/modes2/c/deps DELETED
@@ -1 +0,0 @@
1
- e
package/modes2/d/de DELETED
@@ -1 +0,0 @@
1
- e
package/modes2/d/deps DELETED
@@ -1 +0,0 @@
1
- e
package/modes3/accel/deps DELETED
@@ -1 +0,0 @@
1
- base mach3|ab
package/modes4/a/deps DELETED
@@ -1 +0,0 @@
1
- b c
package/modes4/b/deps DELETED
@@ -1 +0,0 @@
1
- d|c
package/net2dot.mjs DELETED
@@ -1,21 +0,0 @@
1
- import { attribute as _, Digraph, Subgraph, Node, Edge, toDot } from 'ts-graphviz';
2
-
3
- const G = new Digraph();
4
- const A = new Subgraph('A');
5
- const node1 = new Node('node1', {
6
- color: 'red'
7
- });
8
- const node2 = new Node('node2', {
9
- color: 'blue'
10
- });
11
- const edge = new Edge([node1, node2], {
12
- label: 'Edge Label',
13
- color: 'pink'
14
- });
15
- G.addSubgraph(A);
16
- A.addNode(node1);
17
- A.addNode(node2);
18
- A.addEdge(edge);
19
- const dot = toDot(G);
20
-
21
- console.log(dot)
package/notes.txt DELETED
@@ -1,82 +0,0 @@
1
- - Also see schema-ish.yaml
2
- links:
3
- - type: TYPE # Default: 'veth'
4
- # Others: '*vlan/*vtap', 'dummy', 'tunnel', etc
5
-
6
- container: FOO # full container name
7
- # OR
8
- service: FOO # compose service name
9
-
10
- bridge: BRIDGE # name of OVS or linux bridge
11
-
12
- base: BASE # 'conlink', 'host', or 'local'
13
- # 'conlink' is default for 'type: veth'
14
- # 'host' is default for 'type: *vlan/*vtap'
15
-
16
- dev: DEV # internal container device/interface name
17
- outer-dev: DEV # conlink or host (*vlan) device/interface name
18
-
19
- # --- optional general ---
20
-
21
- ip(s): IP # starting address, can include net slash to limit max
22
- mac: MAC
23
- mtu: MTU
24
- route(s): ROUTE # `ip route add ROUTE`, maybe add "dev INTF" automatically
25
- tc(s): TC # tc/qdisc commands/settings
26
- flow(s): FLOW # `ovs-ofctl add-flow DOMAIN FLOW`. With var templating.
27
- command(s): CMD # arbitrary shell cmd. After all links setup for this container
28
-
29
- # --- optional for 'type: *vlan/*vtap' ---
30
-
31
- mode: MODE # 'bridge', etc
32
- vlanid: VLANID # VLAN #
33
- nat: NAT # nat target
34
-
35
-
36
- - type maps to 'ip link' type with default of 'veth'
37
- - when type is 'veth', then base default is 'conlink'
38
- - when type is 'veth' and base is 'conlink', then bridge is required.
39
-
40
- - conlink veth link: {type: veth [DEFAULT], base: conlink [DEFAULT], bridge: BRIDGE, dev: DEV}
41
-
42
-
43
-
44
- Dependencies in python version:
45
- - argparse
46
- - shlex (parsing commands)
47
- - compose_interpolation import TemplateWithDefaults
48
- - cerberus import Validator
49
- - options: joi, ajv, json-schema, and z-schema.
50
- - docker
51
- - psutil (pid_exists)
52
- - json
53
- - yaml
54
- - mininet
55
-
56
-
57
- - [deprecated idea] conlink sub-commands:
58
- conlink spit
59
- - output override docker-compose file with conlink service
60
- - figure out volume mounts to get to other compose file(s)
61
- conlink dc up ...
62
- - generate override docker-compose file with conlink service
63
- - run the compose command with override file
64
- conlink start
65
- - start inside compose
66
- conlink run
67
- - start outside compose
68
-
69
-
70
- tc:
71
- tc-htb:
72
- - replace cbq, control outbound bandwidth
73
- tc qdisc ... dev dev ( parent classid | root) [ handle major: ] htb [ default minor-id ]
74
- tc class ... dev dev parent major:[minor] [ classid major:minor ] htb rate rate [ ceil rate ] burst bytes [ cburst bytes ] [ prio priority ]
75
-
76
- tc-cbq:
77
- tc qdisc ... dev dev ( parent classid | root) [ handle major: ] cbq [ allot bytes ] avpkt bytes bandwidth rate [ cell bytes ] [ ewma log ] [ mpu bytes ]
78
- tc class ... dev dev parent major:[minor] [ classid major:minor ] cbq allot bytes [ bandwidth rate ] [ rate rate ] prio pri‐ority [ weight weight ] [ minburst packets ] [ maxburst packets ] [ ewma log ] [ cell bytes ] avpkt bytes [ mpu bytes ] [ bounded isolated ] [ split handle & defmap defmap ] [ estimator interval timeconstant ]
79
-
80
- tc-netem:
81
- tc qdisc ... dev DEVICE ] add netem OPTIONS
82
-