WattsonNetworkNode#

class wattson.cosimulation.simulators.network.components.wattson_network_node.WattsonNetworkNode(*, id: str, system_name: str | None = None, display_name: str | None = None, network_emulator: NetworkEmulator | None = None, emulation_instance: ~typing.Any | None = None, segment: str = 'main', config: dict = <factory>, _is_started: bool = False, logger: ~logging.Logger | None = None, interfaces: ~typing.List[WattsonNetworkInterface] = <factory>, priority: float = 4, _services: ~typing.Dict[int, ~wattson.services.wattson_service.WattsonService] = <factory>, _processes: ~typing.List[~subprocess.Popen] = <factory>, _min_interface_id: int = 0, _is_outside_namespace: bool = False)#

Bases: WattsonNetworkEntity, NetworkNode

A WattsonNetworkNode is a WattsonNetworkEntity that serves as node. A node can have interfaces and run services. Switches, Routers and ordinary hosts are NetworkNodes.

Methods

__init__

add_dns_entry

add_interface

Adds an Interface and links it to this node.

add_role

add_service

Adds a service to this node.

delete_role

exec

exec_fs_cmd

Executes a file-system related command (e.g., mounting).

file_exists

Checks whether the given file exists on this node

file_get_contents

Returns the contents of a file on the file system of this node.

file_put_contents

Writes the given content string to the file on the file system of this node specified by path.

folder_exists

Checks whether the given folder exists on this node

get_config

get_free_interface_name

get_guest_folder

Return the working directory of this node relative to this node.

get_host_folder

Return the working directory of this node relative to the host machine running Wattson.

get_host_root

Returns the root folder of this network node.

get_interfaces

get_ip_addresses

Returns a list of all IP addresses of this node.

get_prefix

get_python_executable

get_roles

get_service

get_service_by_name

get_services

get_sysctl

get_working_directory

has_services

Returns True iff the node's configuration already has a service section :return:

interface_down

Set an interface down

interface_flush_ip

Flush (remove) the IP address of an interface

interface_rename

Renames a physical interface on the node

interface_set_ip

Set the IP address for an interface

interface_set_mac

Set the MAC / hardware address for the given interface

interface_up

Set an interface up

interfaces_list_existing

Returns a list of actual interfaces existing on the node.

is_outside_namespace

load_services

Loads and instantiates service instances from the (optional) 'services' list in the node's configuration.

manage_process

mkdir

mount

Mounts the target folder at the given mount point.

on_interface_start

open_terminal

Attempts to open a terminal / konsole for the network node.

popen

remove_file

remove_folder

remove_interface

set_config

set_sysctl

shutdown_processes

socket_exists

start

start_pcap

Start a packet capture on this node for the given interface.

stop

stop_pcap

Stops a packet capture on this node for the given interface.

stop_service

to_remote_representation

Creates a dictionary for synchronization with a RemoteNetworkEntity.

transform_path

Transforms the given path to a node-specific path, i.e., relative paths are transformed to the in-node file system w.r.t.

unmount

Unmount the given mount point

update_config

Attributes

class_id

entity_id

os

priority

interfaces

config

id

__init__(*, id: str, system_name: str | None = None, display_name: str | None = None, network_emulator: NetworkEmulator | None = None, emulation_instance: ~typing.Any | None = None, segment: str = 'main', config: dict = <factory>, _is_started: bool = False, logger: ~logging.Logger | None = None, interfaces: ~typing.List[WattsonNetworkInterface] = <factory>, priority: float = 4, _services: ~typing.Dict[int, ~wattson.services.wattson_service.WattsonService] = <factory>, _processes: ~typing.List[~subprocess.Popen] = <factory>, _min_interface_id: int = 0, _is_outside_namespace: bool = False) None#
add_interface(interface: WattsonNetworkInterface)#

Adds an Interface and links it to this node.

Parameters:

interface ('NetworkInterface') – The interface instance

add_service(service: WattsonService)#

Adds a service to this node. This does not start the service.

Parameters:

service (WattsonServiceInterface) – The service to add to this node.

exec_fs_cmd(cmd: List[str], **kwargs) int#

Executes a file-system related command (e.g., mounting). This does not necessarily belong to the network namespace in mixed-namespace environments

Parameters:
  • cmd (List[str]) – The command to execute

  • **kwargs

Returns:

The command’s return code

Return type:

int

file_exists(file: Path) bool#

Checks whether the given file exists on this node

Parameters:

file (Path) – The file path to check for

Returns:

Whether the file exists (and is actually a file)

Return type:

bool

file_get_contents(path: Path) str | None#

Returns the contents of a file on the file system of this node.

Parameters:

path (Path) – The path of the file to read.

Returns:

The contents of the file or None if the file does not exist or is not readable.

Return type:

Optional[str]

file_put_contents(path: Path, contents: str) Tuple[bool, Path | None]#

Writes the given content string to the file on the file system of this node specified by path. Returns whether the operation succeeded.

Parameters:
  • path (Path) – The path of the file to write to.

  • contents (str) – The contents of the file to write.

Returns:

Whether the operation succeeded and the potentially transformed path of the target file.

Return type:

Tuple[bool,Optional[Path]]

folder_exists(folder: Path) bool#

Checks whether the given folder exists on this node

Parameters:

folder (Path) – The folder path to check for

Returns:

Whether the folder exists (and is actually a folder)

Return type:

bool

get_guest_folder() Path#

Return the working directory of this node relative to this node. This is just the host folder / artifact folder, except for nodes that use a different file system (e.g., Docker or VMs)

Returns:

The working directory of this node relative to the node / guest.

Return type:

Path

get_host_folder(ensure_exists: bool = True) Path#

Return the working directory of this node relative to the host machine running Wattson.

Parameters:

ensure_exists (bool, optional) – (Default value = True)

Returns:

The working directory of this node relative to the host machine

Return type:

Path

get_host_root(ensure_exists: bool = True) Path#

Returns the root folder of this network node.

Parameters:

ensure_exists (bool, optional) – (Default value = True)

get_ip_addresses() List[str]#

Returns a list of all IP addresses of this node. Each IP is formatted as a string, indicating the IP itself in decimal notation and the prefix length. E.g.: 192.168.0.1/24 :return: A list of (formatted) IP addresses.

has_services() bool#

Returns True iff the node’s configuration already has a service section :return:

interface_down(interface: WattsonNetworkInterface) bool#

Set an interface down

Parameters:

interface ('NetworkInterface') – The interface to set down

Returns:

Whether the action has been successfully performed

Return type:

bool

interface_flush_ip(interface: WattsonNetworkInterface) bool#

Flush (remove) the IP address of an interface

Parameters:

interface ('NetworkInterface') – The interface to flush the IP address of

Returns:

Whether the action has been successfully performed

Return type:

bool

interface_rename(old_name: str, new_name: str) bool#

Renames a physical interface on the node

Parameters:
  • old_name (str) – The original interface name

  • new_name (str) – The new interface name

Returns:

Whether the action was successful

Return type:

bool

interface_set_ip(interface: WattsonNetworkInterface) bool#

Set the IP address for an interface

Parameters:

interface ('NetworkInterface') – The interface to set the IP address of

Returns:

Whether the action has been successfully performed

Return type:

bool

interface_set_mac(interface: WattsonNetworkInterface) bool#

Set the MAC / hardware address for the given interface

Parameters:

interface ('NetworkInterface') – The interface to set the MAC address for

Returns:

Whether the action has been successfully performed

Return type:

bool

interface_up(interface: WattsonNetworkInterface) bool#

Set an interface up

Parameters:

interface ('NetworkInterface') – The interface to set up

Returns:

Whether the action has been successfully performed

Return type:

bool

interfaces_list_existing(try_num: int = 0, max_tries: int = 10, retry_error_message: str = '') List[Dict]#

Returns a list of actual interfaces existing on the node. Each interface information consists of the interface’s name, its hardware address, ip addresses, and potential statistics.

Returns:

A list of dictionaries containing interface information

Return type:

List[Dict]

load_services()#

Loads and instantiates service instances from the (optional) ‘services’ list in the node’s configuration. For each found service, a respective instance is created. :return:

mount(mount_point: Path, target: Path, remove_file: bool = False, remove_folder: bool = False, bind: bool = False) bool#

Mounts the target folder at the given mount point.

Parameters:
  • mount_point (Path) – The mount point

  • target (Path) – The target folder

  • remove_file (bool, optional) – Whether to remove the mount point if it is a file (Default value = False)

  • remove_folder (bool, optional) – Whether to remove the mount point if it is a folder (Default value = False)

  • bind (bool, optional) – Whether to mount via –bind (if applicable) (Default value = False)

Returns:

Whether the mounting was successful

Return type:

bool

open_terminal() bool#

Attempts to open a terminal / konsole for the network node.

start_pcap(interface: WattsonNetworkInterface | None = None) List[WattsonService]#

Start a packet capture on this node for the given interface. If the interface is None, all packets for all interfaces are captured.

Parameters:

interface (Optional['NetworkInterface'], optional) – (Optional) interface to start the PCAP for (Default value = None)

Returns:

A list of services that represent the packet capturing processes.

Return type:

List[‘WattsonServiceInterface’]

stop_pcap(interface: WattsonNetworkInterface | None = None)#

Stops a packet capture on this node for the given interface. If the interface is None, packet captures for all interfaces are stopped.

Parameters:

interface (Optional['NetworkInterface'], optional) – (Optional) interface to stop the PCAP (Default value = None)

to_remote_representation(force_state_synchronization: bool = True) RemoteNetworkEntityRepresentation#

Creates a dictionary for synchronization with a RemoteNetworkEntity.

Parameters:

force_state_synchronization (bool, optional) – Whether to force a synchronization of the internal state with the actual state (Default value = True)

Returns:

A dictionary representation of this WattsonNetworkEntity for synchronization with a RemoteNetworkEntity.

Return type:

RemoteNetworkEntityRepresentation

transform_path(path: Path) Path#

Transforms the given path to a node-specific path, i.e., relative paths are transformed to the in-node file system w.r.t. the working directory.

Parameters:

path (Path) – The path to transform

Returns:

The transformed path

Return type:

Path

unmount(mount_point: Path, lazy: bool = False, force: bool = False) bool#

Unmount the given mount point

Parameters:
  • mount_point (Path) – The mount point

  • lazy (bool, optional) – Use lazy unmounting (Default value = False)

  • force (bool, optional) – force unmounting (Default value = False)

Returns:

Whether the unmounting was successful

Return type:

bool