diff --git a/.gitignore b/.gitignore index 77e74e17..fd115d62 100644 --- a/.gitignore +++ b/.gitignore @@ -150,5 +150,5 @@ src/primaite/outputs/ # benchmark session outputs benchmark/output -src/primaite/notebooks/scratch.ipynb +# src/primaite/notebooks/scratch.ipynb src/primaite/notebooks/scratch.py diff --git a/src/primaite/notebooks/scratch.ipynb b/src/primaite/notebooks/scratch.ipynb new file mode 100644 index 00000000..50a85e7a --- /dev/null +++ b/src/primaite/notebooks/scratch.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from primaite.simulator.network.networks import arcd_uc2_network\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-09-05 15:52:13,305: Added node 26e189bb-442e-4f73-ab7a-1c4dd162e986 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,307: Added node 9d07f591-1e44-41c9-9d7a-0eecf0c53fa4 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,322: NIC d5:3d:df:8d:21:94/192.168.1.1 connected to Link d5:3d:df:8d:21:94/192.168.1.1<-->70:63:71:75:0f:84\n", + "2023-09-05 15:52:13,324: SwitchPort 70:63:71:75:0f:84 connected to Link d5:3d:df:8d:21:94/192.168.1.1<-->70:63:71:75:0f:84\n", + "2023-09-05 15:52:13,326: Link d5:3d:df:8d:21:94/192.168.1.1<-->70:63:71:75:0f:84 up\n", + "2023-09-05 15:52:13,327: Link d5:3d:df:8d:21:94/192.168.1.1<-->70:63:71:75:0f:84 up\n", + "2023-09-05 15:52:13,329: Added link 497f7357-e14e-4f00-b6cd-68286b053496 to connect d5:3d:df:8d:21:94/192.168.1.1 and 70:63:71:75:0f:84\n", + "2023-09-05 15:52:13,333: Added node 9cf37bd7-9f67-47f8-836b-3b5e69dd600c to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,336: NIC c7:ca:5f:6c:50:c9/192.168.10.1 connected to Link c7:ca:5f:6c:50:c9/192.168.10.1<-->e7:21:66:e4:da:2c\n", + "2023-09-05 15:52:13,338: SwitchPort e7:21:66:e4:da:2c connected to Link c7:ca:5f:6c:50:c9/192.168.10.1<-->e7:21:66:e4:da:2c\n", + "2023-09-05 15:52:13,340: Link c7:ca:5f:6c:50:c9/192.168.10.1<-->e7:21:66:e4:da:2c up\n", + "2023-09-05 15:52:13,341: Link c7:ca:5f:6c:50:c9/192.168.10.1<-->e7:21:66:e4:da:2c up\n", + "2023-09-05 15:52:13,343: Added link b1165845-46af-400d-b408-9f6b0fe4a51a to connect c7:ca:5f:6c:50:c9/192.168.10.1 and e7:21:66:e4:da:2c\n", + "2023-09-05 15:52:13,345: Added node 9c7f4049-30fa-40bd-b0c8-2119bef7936c to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,347: SwitchPort e9:5c:26:c2:74:a2 connected to Link e9:5c:26:c2:74:a2<-->fb:05:aa:54:2d:3e/192.168.10.21\n", + "2023-09-05 15:52:13,351: Link e9:5c:26:c2:74:a2<-->fb:05:aa:54:2d:3e/192.168.10.21 up\n", + "2023-09-05 15:52:13,353: NIC fb:05:aa:54:2d:3e/192.168.10.21 connected to Link e9:5c:26:c2:74:a2<-->fb:05:aa:54:2d:3e/192.168.10.21\n", + "2023-09-05 15:52:13,354: Link e9:5c:26:c2:74:a2<-->fb:05:aa:54:2d:3e/192.168.10.21 up\n", + "2023-09-05 15:52:13,356: Added link 7d9ade8d-ed9c-4688-8375-18b58102b2a7 to connect e9:5c:26:c2:74:a2 and fb:05:aa:54:2d:3e/192.168.10.21\n", + "2023-09-05 15:52:13,358: Added node 88c26ce5-4243-4247-98a3-315ff54f7ef6 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,360: SwitchPort 30:fd:61:15:db:ad connected to Link 30:fd:61:15:db:ad<-->c1:e2:46:a2:cb:b2/192.168.10.22\n", + "2023-09-05 15:52:13,362: Link 30:fd:61:15:db:ad<-->c1:e2:46:a2:cb:b2/192.168.10.22 up\n", + "2023-09-05 15:52:13,363: NIC c1:e2:46:a2:cb:b2/192.168.10.22 connected to Link 30:fd:61:15:db:ad<-->c1:e2:46:a2:cb:b2/192.168.10.22\n", + "2023-09-05 15:52:13,365: Link 30:fd:61:15:db:ad<-->c1:e2:46:a2:cb:b2/192.168.10.22 up\n", + "2023-09-05 15:52:13,367: Added link bcfe4c45-d680-4f72-a90a-9fa57c2a6fba to connect 30:fd:61:15:db:ad and c1:e2:46:a2:cb:b2/192.168.10.22\n", + "2023-09-05 15:52:13,370: Added node d7e5389a-9970-4c47-926c-9069b925e934 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,372: SwitchPort 35:0c:3a:21:7c:d1 connected to Link 35:0c:3a:21:7c:d1<-->40:4f:3e:f0:32:66/192.168.1.10\n", + "2023-09-05 15:52:13,375: Link 35:0c:3a:21:7c:d1<-->40:4f:3e:f0:32:66/192.168.1.10 up\n", + "2023-09-05 15:52:13,376: NIC 40:4f:3e:f0:32:66/192.168.1.10 connected to Link 35:0c:3a:21:7c:d1<-->40:4f:3e:f0:32:66/192.168.1.10\n", + "2023-09-05 15:52:13,378: Link 35:0c:3a:21:7c:d1<-->40:4f:3e:f0:32:66/192.168.1.10 up\n", + "2023-09-05 15:52:13,380: Added link 34254262-beeb-4967-b7ff-3480928e47f9 to connect 35:0c:3a:21:7c:d1 and 40:4f:3e:f0:32:66/192.168.1.10\n", + "2023-09-05 15:52:13,386: Added node 02c25642-baa5-49a4-aadd-f5d549696351 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,388: SwitchPort a4:ab:83:f0:b5:fe connected to Link a4:ab:83:f0:b5:fe<-->4b:a9:6c:90:ae:8f/192.168.1.12\n", + "2023-09-05 15:52:13,390: Link a4:ab:83:f0:b5:fe<-->4b:a9:6c:90:ae:8f/192.168.1.12 up\n", + "2023-09-05 15:52:13,392: NIC 4b:a9:6c:90:ae:8f/192.168.1.12 connected to Link a4:ab:83:f0:b5:fe<-->4b:a9:6c:90:ae:8f/192.168.1.12\n", + "2023-09-05 15:52:13,393: Link a4:ab:83:f0:b5:fe<-->4b:a9:6c:90:ae:8f/192.168.1.12 up\n", + "2023-09-05 15:52:13,395: Added link 433b0cec-445d-4447-9502-c8727eb14a81 to connect a4:ab:83:f0:b5:fe and 4b:a9:6c:90:ae:8f/192.168.1.12\n", + "2023-09-05 15:52:13,398: Added node 6f89bce8-34e4-4fdf-b860-b34027efa639 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,400: SwitchPort c2:9f:42:ec:ea:a0 connected to Link c2:9f:42:ec:ea:a0<-->c7:61:9d:6e:0b:29/192.168.1.14\n", + "2023-09-05 15:52:13,403: Link c2:9f:42:ec:ea:a0<-->c7:61:9d:6e:0b:29/192.168.1.14 up\n", + "2023-09-05 15:52:13,405: NIC c7:61:9d:6e:0b:29/192.168.1.14 connected to Link c2:9f:42:ec:ea:a0<-->c7:61:9d:6e:0b:29/192.168.1.14\n", + "2023-09-05 15:52:13,407: Link c2:9f:42:ec:ea:a0<-->c7:61:9d:6e:0b:29/192.168.1.14 up\n", + "2023-09-05 15:52:13,408: Added link 30b18ea0-ea2b-494a-8a63-d5b4bd703668 to connect c2:9f:42:ec:ea:a0 and c7:61:9d:6e:0b:29/192.168.1.14\n", + "2023-09-05 15:52:13,412: Added node 15eb1a5c-50f4-4681-81f8-7ad457c6b1af to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,414: SwitchPort 5c:0e:20:b3:65:cb connected to Link 5c:0e:20:b3:65:cb<-->bd:06:4d:19:fb:f2/192.168.1.16\n", + "2023-09-05 15:52:13,417: Link 5c:0e:20:b3:65:cb<-->bd:06:4d:19:fb:f2/192.168.1.16 up\n", + "2023-09-05 15:52:13,419: NIC bd:06:4d:19:fb:f2/192.168.1.16 connected to Link 5c:0e:20:b3:65:cb<-->bd:06:4d:19:fb:f2/192.168.1.16\n", + "2023-09-05 15:52:13,420: Link 5c:0e:20:b3:65:cb<-->bd:06:4d:19:fb:f2/192.168.1.16 up\n", + "2023-09-05 15:52:13,421: Added link deb1ee09-9731-46e2-99fb-1276ca48ccb3 to connect 5c:0e:20:b3:65:cb and bd:06:4d:19:fb:f2/192.168.1.16\n", + "2023-09-05 15:52:13,424: Added node 5c5b1c84-5d06-4319-80c0-ca3adf9ce2c6 to Network 16435554-f108-479e-a4de-719f39898d0a\n", + "2023-09-05 15:52:13,425: SwitchPort e6:fa:f7:9a:d3:8c connected to Link e6:fa:f7:9a:d3:8c<-->37:5b:c5:ac:e5:08/192.168.1.110\n", + "2023-09-05 15:52:13,429: Link e6:fa:f7:9a:d3:8c<-->37:5b:c5:ac:e5:08/192.168.1.110 up\n", + "2023-09-05 15:52:13,430: NIC 37:5b:c5:ac:e5:08/192.168.1.110 connected to Link e6:fa:f7:9a:d3:8c<-->37:5b:c5:ac:e5:08/192.168.1.110\n", + "2023-09-05 15:52:13,432: Link e6:fa:f7:9a:d3:8c<-->37:5b:c5:ac:e5:08/192.168.1.110 up\n", + "2023-09-05 15:52:13,434: Added link cf4ecad7-3b24-4f8f-9de8-01b9f64b270b to connect e6:fa:f7:9a:d3:8c and 37:5b:c5:ac:e5:08/192.168.1.110\n", + "2023-09-05 15:52:13,436::ERROR::primaite.simulator.network.hardware.base::176::NIC 4f:4b:3f:f1:02:c0/192.168.10.110 cannot be enabled as it is not connected to a Link\n", + "2023-09-05 15:52:13,438: SwitchPort 57:0a:35:80:1c:38 connected to Link 57:0a:35:80:1c:38<-->4f:4b:3f:f1:02:c0/192.168.10.110\n", + "2023-09-05 15:52:13,440: Link 57:0a:35:80:1c:38<-->4f:4b:3f:f1:02:c0/192.168.10.110 up\n", + "2023-09-05 15:52:13,441: NIC 4f:4b:3f:f1:02:c0/192.168.10.110 connected to Link 57:0a:35:80:1c:38<-->4f:4b:3f:f1:02:c0/192.168.10.110\n", + "2023-09-05 15:52:13,443: Link 57:0a:35:80:1c:38<-->4f:4b:3f:f1:02:c0/192.168.10.110 up\n", + "2023-09-05 15:52:13,447: Added link 035d9749-1bf6-4bd5-b945-c931f207ffb9 to connect 57:0a:35:80:1c:38 and 4f:4b:3f:f1:02:c0/192.168.10.110\n" + ] + } + ], + "source": [ + "net = arcd_uc2_network()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "act_tree = net._action_manager.get_action_tree()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', 'eb6dfd45-d688-47cf-b061-5f45820a6bc7', 'enable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', 'eb6dfd45-d688-47cf-b061-5f45820a6bc7', 'disable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '2192673d-ad8c-437f-a4d6-0e222ab7e190', 'enable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '2192673d-ad8c-437f-a4d6-0e222ab7e190', 'disable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '3c3fb3d8-c5d1-41aa-8e3e-db1cc0445b0b', 'enable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '3c3fb3d8-c5d1-41aa-8e3e-db1cc0445b0b', 'disable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '29e90915-815f-4505-b957-6f46681950b3', 'enable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '29e90915-815f-4505-b957-6f46681950b3', 'disable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '0915f437-6ed3-4134-b754-7d903c98eb57', 'enable']\n", + "['node', '26e189bb-442e-4f73-ab7a-1c4dd162e986', 'nic', '0915f437-6ed3-4134-b754-7d903c98eb57', 'disable']\n", + "['node', '9c7f4049-30fa-40bd-b0c8-2119bef7936c', 'nic', '199c9558-6a73-423e-9c69-ced05cd597cb', 'enable']\n", + "['node', '9c7f4049-30fa-40bd-b0c8-2119bef7936c', 'nic', '199c9558-6a73-423e-9c69-ced05cd597cb', 'disable']\n", + "['node', '88c26ce5-4243-4247-98a3-315ff54f7ef6', 'nic', '6f871129-d13e-4c8a-85ff-7102fa1e7b8e', 'enable']\n", + "['node', '88c26ce5-4243-4247-98a3-315ff54f7ef6', 'nic', '6f871129-d13e-4c8a-85ff-7102fa1e7b8e', 'disable']\n", + "['node', 'd7e5389a-9970-4c47-926c-9069b925e934', 'nic', 'b6c15c77-8869-400c-8a47-62856dd27ce6', 'enable']\n", + "['node', 'd7e5389a-9970-4c47-926c-9069b925e934', 'nic', 'b6c15c77-8869-400c-8a47-62856dd27ce6', 'disable']\n", + "['node', '02c25642-baa5-49a4-aadd-f5d549696351', 'nic', '398660cc-20ce-444e-b93e-d45b8b865e10', 'enable']\n", + "['node', '02c25642-baa5-49a4-aadd-f5d549696351', 'nic', '398660cc-20ce-444e-b93e-d45b8b865e10', 'disable']\n", + "['node', '6f89bce8-34e4-4fdf-b860-b34027efa639', 'nic', '43c0f913-a203-4436-8649-ab73363bd8cb', 'enable']\n", + "['node', '6f89bce8-34e4-4fdf-b860-b34027efa639', 'nic', '43c0f913-a203-4436-8649-ab73363bd8cb', 'disable']\n", + "['node', '15eb1a5c-50f4-4681-81f8-7ad457c6b1af', 'nic', '1d42ed40-b6f9-4dba-aa23-10143842aac8', 'enable']\n", + "['node', '15eb1a5c-50f4-4681-81f8-7ad457c6b1af', 'nic', '1d42ed40-b6f9-4dba-aa23-10143842aac8', 'disable']\n", + "['node', '5c5b1c84-5d06-4319-80c0-ca3adf9ce2c6', 'nic', 'f921e45e-5a11-4c87-bfe9-47bdba7d6828', 'enable']\n", + "['node', '5c5b1c84-5d06-4319-80c0-ca3adf9ce2c6', 'nic', 'f921e45e-5a11-4c87-bfe9-47bdba7d6828', 'disable']\n", + "['node', '5c5b1c84-5d06-4319-80c0-ca3adf9ce2c6', 'nic', '0ed5ed4a-e36f-4060-a13d-a7832d391887', 'enable']\n", + "['node', '5c5b1c84-5d06-4319-80c0-ca3adf9ce2c6', 'nic', '0ed5ed4a-e36f-4060-a13d-a7832d391887', 'disable']\n" + ] + } + ], + "source": [ + "for a in act_tree:\n", + " print(a)\n", + "simController.apply_action(\n", + " {\n", + " 'network':'', \n", + " 'node': '26e189bb-442e-4f73-ab7a-1c4dd162e986', \n", + " 'nic': 'eb6dfd45-d688-47cf-b061-5f45820a6bc7', \n", + " 'verb': 'enable', \n", + " 'options':{'...':'...'}\n", + " })\n", + "\n", + "a = {\n", + " 'target_type': 'network',\n", + " 'target_options': {\n", + " 'identifier': '',\n", + " 'target_type': '',\n", + " 'target_options': {\n", + " 'identifier': '',\n", + " \n", + " }\n", + " }\n", + "}\n", + "# ^ do something like this where the requests are k:v pairs instead, have a simple/similar approach " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/primaite/simulator/core.py b/src/primaite/simulator/core.py index f6c0b5d9..0fbc33fd 100644 --- a/src/primaite/simulator/core.py +++ b/src/primaite/simulator/core.py @@ -1,7 +1,7 @@ # flake8: noqa """Core of the PrimAITE Simulator.""" from abc import ABC, abstractmethod -from typing import Callable, Dict, List, Optional, Union +from typing import Callable, ClassVar, Dict, List, Optional, Union from uuid import uuid4 from pydantic import BaseModel, ConfigDict @@ -42,7 +42,7 @@ class Action(BaseModel): the action can be performed or not. """ - func: Callable[[List[str], Dict], None] + func: Callable[[Dict], None] """ ``func`` is a function that accepts a request and a context dict. Typically this would be a lambda function that invokes a class method of your SimComponent. For example if the component is a node and the action is for @@ -74,7 +74,7 @@ class ActionManager(BaseModel): actions: Dict[str, Action] = {} """maps action verb to an action object.""" - def __call__(self, request: List[str], context: Dict) -> None: + def __call__(self, request: Dict, context: Dict) -> None: """ Process an action request.