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_loadedkytos/topology.link_upkytos/topology.link_downkytos/flow_manager.flow.errorkytos/flow_manager.flow.removedkytos/of_multi_table.enable_tablekytos/mef_eline.evc_affected_by_link_downkytos/mef_eline.redeployed_link_upkytos/mef_eline.redeployed_link_downkytos/mef_eline.deployedkytos/topology.interface.enabledkytos/topology.interface.disabledkytos/topology.interface.upkytos/topology.interface.down
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 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(),
}
}

