Merged PR 376: 2457 - Remove Hardcoding from Links
## Summary This PR removes the hardcoding of Link bandwidth, and makes it possible to be configured via the network yaml definitions. Link bandwidth will still default to 100 if this is not present, to prevent breaking all previous defined networks. ## Test process All tests continue to pass. `basic_network_config.yaml` now provides a non-default link bandwidth which is confirmed within unit tests. ## Checklist - [X] PR is linked to a **work item** - [X] **acceptance criteria** of linked ticket are met - [X] performed **self-review** of the code - [X] written **tests** for any new functionality added with this PR - [X] updated the **documentation** if this PR changes or adds functionality - [ ] written/updated **design docs** if this PR implements new functionality - [] updated the **change log** - [X] ran **pre-commit** checks for code style - [X] attended to any **TO-DOs** left in the code Related work items: #2457
This commit is contained in:
@@ -309,7 +309,9 @@ class Network(SimComponent):
|
||||
self._node_request_manager.remove_request(name=node.hostname)
|
||||
_LOGGER.info(f"Removed node {node.hostname} from network {self.uuid}")
|
||||
|
||||
def connect(self, endpoint_a: WiredNetworkInterface, endpoint_b: WiredNetworkInterface, **kwargs) -> Optional[Link]:
|
||||
def connect(
|
||||
self, endpoint_a: WiredNetworkInterface, endpoint_b: WiredNetworkInterface, bandwidth: int = 100, **kwargs
|
||||
) -> Optional[Link]:
|
||||
"""
|
||||
Connect two endpoints on the network by creating a link between their NICs/SwitchPorts.
|
||||
|
||||
@@ -319,6 +321,8 @@ class Network(SimComponent):
|
||||
:type endpoint_a: WiredNetworkInterface
|
||||
:param endpoint_b: The second endpoint to connect.
|
||||
:type endpoint_b: WiredNetworkInterface
|
||||
:param bandwidth: bandwidth of new link, default of 100mbps
|
||||
:type bandwidth: int
|
||||
:raises RuntimeError: If any validation or runtime checks fail.
|
||||
"""
|
||||
node_a: Node = endpoint_a.parent
|
||||
@@ -330,7 +334,7 @@ class Network(SimComponent):
|
||||
if node_a is node_b:
|
||||
_LOGGER.warning(f"Cannot link endpoint {endpoint_a} to {endpoint_b} because they belong to the same node.")
|
||||
return
|
||||
link = Link(endpoint_a=endpoint_a, endpoint_b=endpoint_b, **kwargs)
|
||||
link = Link(endpoint_a=endpoint_a, endpoint_b=endpoint_b, bandwidth=bandwidth, **kwargs)
|
||||
self.links[link.uuid] = link
|
||||
self._link_id_map[len(self.links)] = link
|
||||
self._nx_graph.add_edge(endpoint_a.parent.hostname, endpoint_b.parent.hostname)
|
||||
|
||||
@@ -50,6 +50,7 @@ def create_office_lan(
|
||||
num_pcs: int,
|
||||
network: Optional[Network] = None,
|
||||
include_router: bool = True,
|
||||
bandwidth: int = 100,
|
||||
) -> Network:
|
||||
"""
|
||||
Creates a 2-Tier or 3-Tier office local area network (LAN).
|
||||
@@ -109,9 +110,11 @@ def create_office_lan(
|
||||
switch.power_on()
|
||||
network.add_node(switch)
|
||||
if num_of_switches > 1:
|
||||
network.connect(core_switch.network_interface[core_switch_port], switch.network_interface[24])
|
||||
network.connect(
|
||||
core_switch.network_interface[core_switch_port], switch.network_interface[24], bandwidth=bandwidth
|
||||
)
|
||||
else:
|
||||
network.connect(router.network_interface[1], switch.network_interface[24])
|
||||
network.connect(router.network_interface[1], switch.network_interface[24], bandwidth=bandwidth)
|
||||
|
||||
# Add PCs to the LAN and connect them to switches
|
||||
for i in range(1, num_pcs + 1):
|
||||
@@ -125,9 +128,11 @@ def create_office_lan(
|
||||
# Connect the new switch to the router or core switch
|
||||
if num_of_switches > 1:
|
||||
core_switch_port += 1
|
||||
network.connect(core_switch.network_interface[core_switch_port], switch.network_interface[24])
|
||||
network.connect(
|
||||
core_switch.network_interface[core_switch_port], switch.network_interface[24], bandwidth=bandwidth
|
||||
)
|
||||
else:
|
||||
network.connect(router.network_interface[1], switch.network_interface[24])
|
||||
network.connect(router.network_interface[1], switch.network_interface[24], bandwidth=bandwidth)
|
||||
|
||||
# Create and add a PC to the network
|
||||
pc = Computer(
|
||||
@@ -142,7 +147,7 @@ def create_office_lan(
|
||||
|
||||
# Connect the PC to the switch
|
||||
switch_port += 1
|
||||
network.connect(switch.network_interface[switch_port], pc.network_interface[1])
|
||||
network.connect(switch.network_interface[switch_port], pc.network_interface[1], bandwidth=bandwidth)
|
||||
switch.network_interface[switch_port].enable()
|
||||
|
||||
return network
|
||||
|
||||
@@ -547,15 +547,15 @@ class Link(SimComponent):
|
||||
|
||||
:param endpoint_a: The first NIC or SwitchPort connected to the Link.
|
||||
:param endpoint_b: The second NIC or SwitchPort connected to the Link.
|
||||
:param bandwidth: The bandwidth of the Link in Mbps (default is 100 Mbps).
|
||||
:param bandwidth: The bandwidth of the Link in Mbps.
|
||||
"""
|
||||
|
||||
endpoint_a: WiredNetworkInterface
|
||||
"The first WiredNetworkInterface connected to the Link."
|
||||
endpoint_b: WiredNetworkInterface
|
||||
"The second WiredNetworkInterface connected to the Link."
|
||||
bandwidth: float = 100.0
|
||||
"The bandwidth of the Link in Mbps (default is 100 Mbps)."
|
||||
bandwidth: float
|
||||
"The bandwidth of the Link in Mbps."
|
||||
current_load: float = 0.0
|
||||
"The current load on the link in Mbps."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user