2023.1 was released in July 2023.
This version had these major objectives:
"any"VLAN UNIs when provisioning EVCs
of_multi_tableNApp responsible for managing a multi-table OpenFlow pipeline
kytos_statsto support multi-table stats
- Improve and stabilize
@restdecorated routes from
sdntrace_cpand general improvements
- General UI fixes and enhancements
- Specify requirements for
mef_elineVLAN range feature and new Kytos-ng documentation
- General core enhancements and endpoints OpenAPI validations
- Upgrade and simplify core development dependencies
In order to achieve the objectives of this version, the following enhancements were refined and delivered:
mef_eline now supports provisioning EVCs with
"any" VLAN UNIs.
"untagged" will match any packet that doesn’t have a VLAN header, whereas
"any" will match any VLAN.
mef_eline also supports asymmetric VLAN configurations on each UNI. If you need more information about the supported configuration combinations, there’s a spreadsheet on
mef_eline PR 258 that documents the combinations for both intra and inter EVCs and which OpenFlow matches and actions will be performed.
A new NApp
of_multi_table has been developed to allow network operators to leverage OpenFlow multi-tables when that’s beneficial for their network use case.
of_multi_table is responsible for managing a multi-table OpenFlow pipeline. This NApp allows you to specify an OpenFlow pipeline composed of multiple tables, where you can also associate which table each NApp of the
kytos-ng org should be pushing their flows.
of_multi_table has been integrated with
coloring. Each NApp that pushes flows has a concept of
"table_group", which represents a set of flows with similar match criteria that is grouped in a particular table.
In addition to supporting a multi-table OpenFlow pipeline on version
2023.1, another new NApp
kytos_stats has been developed, which is responsible for providing multi-table statistics.
kytos_stats is a successor of
flow_stats. It also supports the same functionalities that
flow_stats supports, except that
flow_stats route prefixes were renamed. On version
2023.1 you can still use both if you’re using
flow_stats and still need the same API routes. In the future,
flow_stats will no longer be maintained by Kytos-ng team, so you should plan to migrate to
maintenance is now capable of generating a logical interruption on all device types (switches, links, and interfaces) properly expressing all affected devices. For more about how logical interruptions work you can check out blueprint EP037. Whenever a maintenance window is scheduled, it’ll transitively include associated devices, for instance, if you were to schedule a maintenance window on a switch, it would include all of its links and interfaces. In addition,
maintenance has enhanced API validations.
Kytos-ng core has replaced
uvicorn/starlette that way enhancing and solving the following problems:
werkzeug 2.1.Xis no longer maintaining support to shutdown
werkzeugserver, which was pivotal for Kytos-ng to ensure a graceful shutdown since it’s being embedded in the same process.
flask-socketioserver default threading mode is very reliable and works well out of the box for many use cases, it’s vulnerable to threads scalability issues.
- A relatively high-rate of requests, e.g., 500 requests/sec, over 1 minute could lead to overall runtime instability.
uvicorn/starlette solves all of these problems while also being optimally designed to be used with
asyncio and providing a higher capacity to serve requests. If you’re upgrading to
@rest decorator is now supposed to take a
request: kytos.core.rest_api.Request return a
kytos.core.rest_api.JSONResponse instance, all of the NApps from
kytos-ng endpoints have been refactored accordingly for
2023.1, their API specs are still the same.
If you’re using a NApp that’s not from the
kytos-ng org and it has
@rest decorated routes, it needs to be refactored accordingly to be compatible with version
2023.1. In terms of performance and overall technical requirements, you can find more information about it on this Kytos-ng GitHub discussion.
uvicorn/starlette also unlocks native Python websockets, which in future versions can expose new types of bidirectional transport.
socket.io dependency has been removed.
sdntrace_cp is now officially considered stable. All of its API routes are versioned as v1, including supporting OpenAPI validations. Also,
sdntrace_cp has augmented new states when performing a trace to facilitate understanding an outcome of a trace. In addition,
sdntrace_cp has removed support to schedule traces to simplify code maintainability.
2023.1, the following UI components were fixed:
secondary_constraints, including correctly clearing these components
uino logger supports
uitopology map now displays
metadata.node_nameas a default value when it’s defined
mef_eline Web UI
GenericEntity has been augmented to expose
status_reason, which as a result is exposed on
status represents the entity status, and
status_reason is a set of string values that gives further information about why an entity isn’t UP, which also minimizes overuse of
metadata key value pairs in certain cases.
Kytos-ng core now exposes
@validate_openapi decorator and an
avalidate_openapi_request(spec, request) to validate API endpoints based an OpenAPI specification. On version
2023.1, the following NApps are now validating their endpoints based on OpenAPI:
mef_eline(included validations on additional endpoints)
2023.1, Kytos-ng team has initially specified requirements for supporting a range of VLANs on
mef_eline EVCs. Also, Kytos-ng team has specified requirements to consolidate Kytos-ng documentation, which will simplify and facilitate to onboard new users and contributors. Both of these specifications will be prioritized and implemented in a future release.
Kytos-ng now ships these extra runtime dependencies:
Also, Kytos-ng now provides the following development dependencies, that can be installed with
pip3.9 -e git+https://github.com/kytos-ng/kytos.git#egg=kytos[dev], allowing NApps to reuse these common development dependencies, which simplifies development requirements updates across all
pip-tools >= 2.0
switch_1_flow.cookie_1_state_1_inserted_at_1_updated_at_1has changed. If you’re upgrading to
2023.1from a previous version, you should run the
drop_compound_index.pyscript to drop it, just so it can be recreated when
flow_managerloads up again. Also, If you tried to upgrade to
2022.3.2before and it created
'flow.priority_1'index, then you want to drop it too by running
CMD=drop_index INDEX_NAME=flow.priority_1 python3 drop_compound_index.py.
flowsdocuments have been augmented with two new fields
owner. If you’re upgrading from version
2022.3and you’re going to use
of_multi_table, then you need to preset these two fields on the
flowsDB collection. In order to do it, you can follow
these instructions to use the pipeline_related.pyDB script.
linkscollections will no longer store the
activestate and certain links metadata fields. If you’re upgrading, it’s recommended that you run the
unset_active.py scriptto unset the DB fields that will no longer be used. Although, if you don’t run this script, an upgrade from
2023.1(with the NApps that it depends on) will still work.
The following Kytos-ng projects and NApps were released in this version. For further detailed information about what was released and what changed, please visit the release page of each project you are interested in knowing more about and look for the changelog file.
The following switches have been tested with Kytos version
|NW570.2.1 and NW550.2.3
An overview of the Kytos-ng and end-to-end tests coverage is available on these dashboards:
In the kytos-ng organization, during the period of this release from February 2023 to July 2023:
- Core Team: Vinicius, Italo, David, Gretel, Rogerio, Aldo
- Team Leader: Jeronimo
Special Thanks to the Kytos-ng community.