From a42398ac0929abf3ac0de7aaa9e9da2dd7637fbb Mon Sep 17 00:00:00 2001 From: Marek Wolan Date: Wed, 9 Oct 2024 14:15:53 +0100 Subject: [PATCH] Fix typos and improve validation --- src/primaite/simulator/network/creation.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/primaite/simulator/network/creation.py b/src/primaite/simulator/network/creation.py index 80d0c370..31499359 100644 --- a/src/primaite/simulator/network/creation.py +++ b/src/primaite/simulator/network/creation.py @@ -1,9 +1,9 @@ # © Crown-owned copyright 2024, Defence Science and Technology Laboratory UK from abc import ABC, abstractmethod from ipaddress import IPv4Address -from typing import Any, ClassVar, Dict, Literal, Type +from typing import Any, ClassVar, Dict, Literal, Self, Type -from pydantic import BaseModel +from pydantic import BaseModel, model_validator from primaite.simulator.network.container import Network from primaite.simulator.network.hardware.nodes.host.computer import Computer @@ -27,8 +27,12 @@ class NetworkNodeAdder(BaseModel): property_1 : str property_2 : int - @classmetho - def __call__() + @classmethod + def add_nodes_to_net(cls, config: ConfigSchema, network: Network) -> None: + node_1 = Node(property_1, ...) + node_2 = Node(...) + network.connect(node_1.network_interface[1], node_2.network_interface[1]) + ... ``` """ @@ -112,6 +116,16 @@ class OfficeLANAdder(NetworkNodeAdder, identifier="office_lan"): bandwidth: int = 100 """Data bandwidth to the LAN measured in Mbps.""" + @model_validator(mode="after") + def check_ip_range(self) -> Self: + """Make sure the ip addresses of hosts don't exceed the maximum possible ip address.""" + if self.pcs_ip_block_start + self.num_pcs >= 254: + raise ValueError( + f"Cannot create {self.num_pcs} pcs starting at ip block {self.pcs_ip_block_start} " + f"because ip address octets cannot exceed 254." + ) + return self + @classmethod def add_nodes_to_net(cls, config: ConfigSchema, network: Network) -> None: """