This Napp allows a user to create a point to point L2 Ethernet Virtual Circuit.
- REST API to create/modify/delete circuits;
- REST API to create/modify/delete circuit scheduling;
- list of circuits in memory and also synchronized to a permanent storage;
- circuits can be installed at time of request or have an installation schedule;
- circuits can use a predefined path or find a dynamic path;
- the NApp will move circuits to another path in case of a link down;
- web UI for circuits management.
To install this NApp, first, make sure to have the same venv activated as you have kytos
installed on:
$ git clone https://github.com/kytos-ng/mef_eline.git
$ cd mef_eline
$ python3 -m pip install --editable .
To install the kytos environment, please follow our development environment setup.
kytos/topology.topology_loaded
kytos/topology.link_up
kytos/topology.link_down
kytos/flow_manager.flow.error
kytos/flow_manager.flow.removed
kytos/of_multi_table.enable_table
kytos/mef_eline.evc_affected_by_link_down
kytos/mef_eline.cleanup_evcs_old_path
kytos/mef_eline.redeployed_link_up
kytos/mef_eline.redeployed_link_down
kytos/mef_eline.deployed
Event reporting a redeployed circuit after a link down event.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()
}
Event reporting an error with redeploying a circuit with a link down event.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()
}
Event reporting the old circuit's path after a link down event.
{
"evcs": evcs_with_failover + check_failover
}
Event reporting that a link down event has occurred.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict(),
"link": link
}
Event reporting that a link up event has occurred.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()
}
Event reporting that a circuit has been updated.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()
}
Event reporting that a circuit was deployed or removed.
{
"evc_id": evc.id,
"id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()
}
Event reporting that a L2 circuit was created.
A response from the kytos/of_multi_table.enable_table
event to confirm table settings.
{
'table_group': <object>
}
Event with all evcs that got loaded
{
'<evc_id>': <dict>
}
Event published when an EVC active state changes due to a UNI going up or down
{
"id", evc.id,
"evc_id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict()}
}
Event published when an EVC failover_path gets deployed. flows
are the new deployed flows, and removed_flows
are the removed ones.
{
evc.id: {
"id", evc.id,
"evc_id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict(),
"flows": [],
"removed_flows": [],
"error_reason": string,
"current_path": evc.current_path.as_dict(),
}
}
Event published when an EVC failover_path switches over. flows
are the new deployed flows.
{
evc.id: {
"id", evc.id,
"evc_id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict(),
"flows": [],
}
}
Event published when an EVC failover related old path gets removed (cleaned up). removed_flows
are the removed flows.
{
evc.id: {
"id", evc.id,
"evc_id": evc.id,
"name": evc.name,
"metadata": evc.metadata,
"active": evc._active,
"enabled": evc._enabled,
"uni_a": evc.uni_a.as_dict(),
"uni_z": evc.uni_z.as_dict(),
"removed_flows": [],
"current_path": evc.current_path.as_dict(),
}
}