# TODO: #54: DOC
# TODO: provide context managers!
[docs]class NetworkBackendNotifications:
""" This interface describes the interaction between the :py:class:`.SimulationManager`,
the :py:class:`.NetworkManager` and the :py:class:`.NetworkBackend`.
"""
#########################################
# Per step
#########################################
[docs] def before_simulation_step(self, simulation_manager, step_cnt, network_backend, emulation_nodes, **kwargs):
"""
Called before the next simulation step is about to be performed.
Called every step.
Parameters
----------
simulation_manager : SimulationManager
step_cnt : int
network_backend : NetworkBackend
emulation_nodes : EmulationNodes
"""
pass
[docs] def after_simulation_step(self, simulation_manager, step_cnt, network_backend, emulation_nodes, **kwargs):
"""
Called after a simulation step is over.
Called every step.
Parameters
----------
simulation_manager
emulation_nodes
network_backend
step_cnt
"""
pass
[docs] def before_distance_matrix_changed(self, simulation_manager, network_backend, changed_distance_matrix,
full_distance_matrix, **kwargs):
"""
Called only if the distance matrix changed.
Parameters
----------
changed_distance_matrix
simulation_manager
network_backend
full_distance_matrix
kwargs
Returns
-------
"""
pass
[docs] def after_distance_matrix_changed(self, simulation_manager, network_backend, changed_distance_matrix,
full_distance_matrix, **kwargs):
"""
Called only if the distance matrix changed.
Parameters
----------
changed_distance_matrix
simulation_manager
network_backend
full_distance_matrix
kwargs
Returns
-------
"""
pass
#########################################
# Per node
#########################################
[docs] def before_link_initial_start(self, network_backend, emulation_node_x, emulation_node_y, interface_x, interface_y, connection_info,
start_activated=False, **kwargs):
"""
Called before a link between the two nodes on the supplied interfaces is going to be created.
Let the NetworkBackend decide whether the links really shall be connected.
1) SimulationManager->NetworkManager->NetworkBackend-|
SimulationManager<-NetworkManager-| <- connected, connection
...
2) after_link_initial_start() -> ...
Parameters
----------
network_backend
emulation_node_x
emulation_node_y
interface_x
interface_y
connection_info : ConnectionInfo
start_activated
Returns
-------
Bool, AbstractSwitch, AbstractConnection
Whether the nodes are connected and the appropriate connection
"""
pass
# TODO: REMOVE?
[docs] def after_link_initial_start(self, network_backend_connected, switch, connection, network_backend, emulation_node_x,
emulation_node_y, interface_x, interface_y, connection_info, start_activated=False, **kwargs):
"""
Parameters
----------
switch
network_backend_connected : Bool
Return value from :py:meth:`.before_link_initial_start`
connection : AbstractConnection
Return value from :py:meth:`.before_link_initial_start`
network_backend
emulation_node_x
emulation_node_y
interface_x
interface_y
connection_info : ConnectionInfo
start_activated
Returns
-------
"""
pass
[docs] def before_link_quality_adjustment(self, connection, link_quality_still_connected, link_quality_dict,
network_backend, emulation_node_x, emulation_node_y, interface_x, interface_y,
connection_info,
**kwargs):
"""
Called only for connected nodes. There the :py:class:`.LinkQualityModel` and the :py:class:`.NetworkBackend` agreed on a connection.
Parameters
----------
connection
link_quality_still_connected
link_quality_dict
network_backend
emulation_node_x
emulation_node_y
interface_x
interface_y
connection_info : ConnectionInfo
kwargs
"""
pass
[docs] def after_link_quality_adjustment(self, connection, link_quality_still_connected, link_quality_dict,
network_backend, emulation_node_x, emulation_node_y, interface_x, interface_y, connection_info,
**kwargs):
"""
Called only for connected nodes. There the :py:class:`.LinkQualityModel` and the :py:class:`.NetworkBackend` agreed on a connection.
Parameters
----------
connection
link_quality_still_connected
link_quality_dict
network_backend
emulation_node_x
emulation_node_y
interface_x
interface_y
connection_info : ConnectionInfo
kwargs
Returns
-------
"""
pass
[docs] def link_up(self, connection, link_quality_dict,
network_backend, emulation_node_x, emulation_node_y, interface_x, interface_y, connection_info,
**kwargs):
pass
[docs] def link_down(self, connection, link_quality_dict,
network_backend, emulation_node_x, emulation_node_y, interface_x, interface_y, connection_info,
**kwargs):
pass
#########################################
# Distributed Mode
#########################################
# TODO: PASS CONNECTION OBJECTS?
# TODO: return type? Tunnel?
[docs] def connection_across_servers(self, network_backend, emulation_node_x, emulation_node_y, remote_ip):
"""
Parameters
----------
network_backend
emulation_node_x
emulation_node_y
remote_ip
Returns
-------
"""
pass
[docs]class ConnectionInfo:
"""
Attributes
----------
is_remote_conn : bool, optional (default is False)
is_central : bool, optional (default is False)
is_mgmt : bool, optional (default is False)
"""
def __init__(self, is_remote_conn=False, is_central=False, is_mgmt=False):
self.is_remote_conn = is_remote_conn
self.is_central = is_central
self.is_mgmt = is_mgmt