From 89c151c720eb12da6d8371b33279b7f6d3a09a99 Mon Sep 17 00:00:00 2001 From: Christos Choutouridis Date: Sat, 26 Sep 2026 20:34:56 +0300 Subject: [PATCH] FIX: renderer checks was in wrong place --- source/topology_renderer.py | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/source/topology_renderer.py b/source/topology_renderer.py index e6cf602..837dd0c 100644 --- a/source/topology_renderer.py +++ b/source/topology_renderer.py @@ -136,17 +136,11 @@ def _render_interface_configuration(interface: PlannedInterface) -> List[str]: ) if interface.addressing is AddressingMode.STATIC: - if interface.address is None: - raise ValueError( - "planned static interface %s:%s has no address" - % (interface.node, interface.logical_interface) - ) - lines.append( " _node_cmd(%s, 'ip', 'addr', 'add', %s, 'dev', %s)" % ( node, - _python_string(interface.address), + repr(interface.address), name, ) ) @@ -200,19 +194,8 @@ def _render_service_start(service: PlannedService, index: int) -> List[str]: Returns: Generated Python source lines that start and track the service. - Raises: - ValueError: If the plan contains an unsupported service type or - incompatible settings object. """ - if service.type is not ServiceType.DHCP_SERVER: - raise ValueError( - "unsupported planned service type %r" % service.type.value - ) - - if not isinstance(service.settings, PlannedDHCPServerSettings): - raise ValueError("DHCP service has incompatible planned settings") - node = "nodes[%s]" % _python_string(service.node) lease_file = "/tmp/mininet-dnsmasq-%d.leases" % index pid_file = "/tmp/mininet-dnsmasq-%d.pid" % index @@ -240,6 +223,12 @@ def _render_service_start(service: PlannedService, index: int) -> List[str]: rendered_args = ", ".join(_python_string(arg) for arg in args) return [ + " _node_cmd(%s, 'rm', '-f', %s, %s)" + % ( + node, + _python_string(lease_file), + _python_string(pid_file), + ), " pid = _start_background(", " %s," % node, " [%s]," % rendered_args, @@ -259,9 +248,6 @@ def render_python(plan: ExecutionPlan) -> str: Python source code that creates the network, applies configuration, starts services, opens the Mininet CLI, and performs structured cleanup. - Raises: - ValueError: If the supplied plan contains an operation that this - renderer cannot serialize. """ lines: List[str] = [ @@ -320,7 +306,7 @@ def render_python(plan: ExecutionPlan) -> str: _python_string(node.name), ) ) - elif node.type is NodeType.SWITCH: + else: lines.append( " nodes[%s] = net.addSwitch(%s, failMode=%r)" % ( @@ -329,8 +315,6 @@ def render_python(plan: ExecutionPlan) -> str: node.switch_fail_mode, ) ) - else: - raise ValueError("unsupported planned node type %r" % node.type) lines.extend(["", " # Create links."]) for link in plan.links: @@ -474,6 +458,7 @@ def _self_test() -> None: assert "net.addLink(" in source assert "cls=TCLink" in source assert "dnsmasq" in source + assert "rm', '-f', '/tmp/mininet-dnsmasq-0.leases'" in source assert "CLI(net)" in source assert "dhclient" in source