diff --git a/.dockerignore b/.dockerignore index d10e3e7b8d2b258489c98fe2e2ec91e17558b771..8785e66f39f611c40050abfe73986b1a83557a82 100644 --- a/.dockerignore +++ b/.dockerignore @@ -15,6 +15,7 @@ # Avoid including these folders when building the components .git/ .gitlab/ +.github/ .vscode/ coverage/ data/ diff --git a/.gitignore b/.gitignore index 5b7ac121a7512842cb158fbb3fc514c504beebfb..d5af4f7f61348537a2d01f9ee356f9cfb1e19c34 100644 --- a/.gitignore +++ b/.gitignore @@ -172,6 +172,7 @@ cython_debug/ # Other /tmp +.github # Sqlite *.db diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2856f9fed0a1c5cf59140c6d9c3c9e00d331726f..e11c8474ae5ec34838b346e4fc9fc87faea06edf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + # stages of the cicd pipeline stages: #- dependencies @@ -58,6 +59,7 @@ include: - local: '/src/ztp_server/.gitlab-ci.yml' - local: '/src/osm_client/.gitlab-ci.yml' - local: '/src/simap_connector/.gitlab-ci.yml' + - local: '/src/pluggables/.gitlab-ci.yml' # This should be last one: end-to-end integration tests - local: '/src/tests/.gitlab-ci.yml' diff --git a/deploy/all.sh b/deploy/all.sh index bd171eb66cf0db4b586bc49038553519241a2e7b..cd33ff51600183ec4d282f2a48f82cb968a6e58a 100755 --- a/deploy/all.sh +++ b/deploy/all.sh @@ -69,6 +69,9 @@ export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device pathcomp service slice n # Uncomment to activate E2E Orchestrator #export TFS_COMPONENTS="${TFS_COMPONENTS} e2e_orchestrator" +# Uncomment to activate Pluggables Component +#export TFS_COMPONENTS="${TFS_COMPONENTS} pluggables" + # If not already set, set the tag you want to use for your images. export TFS_IMAGE_TAG=${TFS_IMAGE_TAG:-"dev"} @@ -210,6 +213,23 @@ export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""} export QDB_REDEPLOY=${QDB_REDEPLOY:-""} +# ----- Time Series Storage - Prometheus / Grafana Mimir ----------------------- + +# If not already set, set Time Series Storage installation mode. Accepted values are: +# 'single' and 'cluster'. +# - If TSDB_DEPLOY_MODE is "single", Time Series Storage is deployed in single node +# mode and features a basic Prometheus instance. It is convenient for development and +# testing purposes and should fit in a VM. +# IT SHOULD NOT BE USED IN PRODUCTION ENVIRONMENTS. +# - If TSDB_DEPLOY_MODE is "cluster", Time Series Storage is deployed in cluster mode +# and a Grafana Mimir database in cluster mode will be deployed. It is convenient for +# production and provides scalability features. If you are deploying for production, +# also read the following link providing details on deploying Grafana Mimir for +# production environments: +# Ref: https://grafana.com/docs/mimir/latest/manage/run-production-environment/ +export TSDB_DEPLOY_MODE=${TSDB_DEPLOY_MODE:-"single"} + + # ----- K8s Observability ------------------------------------------------------ # If not already set, set the external port Prometheus Mgmt HTTP GUI interface will be exposed to. diff --git a/deploy/monitoring.sh b/deploy/monitoring.sh index c83d331e8c031c5b76ddc6794ab5ef6b022abc88..a577c432fc2daf82cc834a748e7dbdf78b053810 100755 --- a/deploy/monitoring.sh +++ b/deploy/monitoring.sh @@ -15,6 +15,24 @@ set -euo pipefail + +# ----- Time Series Storage - Prometheus / Grafana Mimir ----------------------- + +# If not already set, set Time Series Storage installation mode. Accepted values are: +# 'single' and 'cluster'. +# - If TSDB_DEPLOY_MODE is "single", Time Series Storage is deployed in single node +# mode and features a basic Prometheus instance. It is convenient for development and +# testing purposes and should fit in a VM. +# IT SHOULD NOT BE USED IN PRODUCTION ENVIRONMENTS. +# - If TSDB_DEPLOY_MODE is "cluster", Time Series Storage is deployed in cluster mode +# and a Grafana Mimir database in cluster mode will be deployed. It is convenient for +# production and provides scalability features. If you are deploying for production, +# also read the following link providing details on deploying Grafana Mimir for +# production environments: +# Ref: https://grafana.com/docs/mimir/latest/manage/run-production-environment/ +export TSDB_DEPLOY_MODE=${TSDB_DEPLOY_MODE:-"single"} + + # ----------------------------------------------------------- # Global namespace for all deployments # ----------------------------------------------------------- @@ -33,11 +51,11 @@ VALUES_FILE_PROM="$VALUES_FILE_PATH/prometheus_values.yaml" # ----------------------------------------------------------- # Mimir Configuration # ----------------------------------------------------------- -# RELEASE_NAME_MIMIR="mon-mimir" -# CHART_REPO_NAME_MIMIR="grafana" -# CHART_REPO_URL_MIMIR="https://grafana.github.io/helm-charts" -# CHART_NAME_MIMIR="mimir-distributed" -# VALUES_FILE_MIMIR="$VALUES_FILE_PATH/mimir_values.yaml" +RELEASE_NAME_MIMIR="mon-mimir" +CHART_REPO_NAME_MIMIR="grafana" +CHART_REPO_URL_MIMIR="https://grafana.github.io/helm-charts" +CHART_NAME_MIMIR="mimir-distributed" +VALUES_FILE_MIMIR="$VALUES_FILE_PATH/mimir_values.yaml" # ----------------------------------------------------------- # Grafana Configuration @@ -105,16 +123,19 @@ kubectl rollout status deployment/"$RELEASE_NAME_PROM-server" -n "$NAMESPACE" || # 2) Deploy Mimir -# deploy_chart "$RELEASE_NAME_MIMIR" \ -# "$CHART_REPO_NAME_MIMIR" \ -# "$CHART_REPO_URL_MIMIR" \ -# "$CHART_NAME_MIMIR" \ -# "$VALUES_FILE_MIMIR" \ -# "$NAMESPACE" - -# Depending on how Mimir runs (StatefulSets, Deployments), you can wait for -# the correct resource to be ready. For example: -# kubectl rollout status statefulset/"$RELEASE_NAME_MIMIR-distributor" -n "$NAMESPACE" || true +if [ "$TSDB_DEPLOY_MODE" == "cluster" ]; then + echo "Deploying Mimir in production mode." + # You can add any production-specific configurations here if needed + deploy_chart "$RELEASE_NAME_MIMIR" \ + "$CHART_REPO_NAME_MIMIR" \ + "$CHART_REPO_URL_MIMIR" \ + "$CHART_NAME_MIMIR" \ + "$VALUES_FILE_MIMIR" \ + "$NAMESPACE" + + # you can wait for the resource to be ready. + kubectl rollout status statefulset/"$RELEASE_NAME_MIMIR-distributor" -n "$NAMESPACE" || true +fi # 3) Deploy Grafana diff --git a/install_requirements.sh b/install_requirements.sh index 5401a57c9ac606f3f2042e9e352e84e20103a4c5..9d2705e9e4ad9e2a41b3c2f17263dea0c30b6ff3 100755 --- a/install_requirements.sh +++ b/install_requirements.sh @@ -47,9 +47,12 @@ sudo ldconfig cd ../.. echo "Updating PIP, SetupTools and Wheel..." -pip install --upgrade pip # ensure next packages get the latest versions -pip install --upgrade setuptools wheel # bring basic tooling for other requirements -pip install --upgrade pip-tools pylint # bring tooling for package compilation and code linting +# Bring basic tooling for other requirements, package compilation, and code linting. +# Ensure next packages get the fixed versions to prevent: +# "'InstallRequirement' object has no attribute 'use_pep517'" +pip install --upgrade 'pip==25.2' +pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +pip install --upgrade 'pip-tools==7.3.0' printf "\n" echo "Creating integrated requirements file..." diff --git a/manifests/metallb.yaml b/manifests/metallb.yaml index 162768aca24df3a0f1b37362c65687e7f2da565b..60b82297e43934fca7f599eee64df61d035be7dc 100644 --- a/manifests/metallb.yaml +++ b/manifests/metallb.yaml @@ -17,7 +17,7 @@ apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: - name: my-ip-pool + name: metallb-address-pool namespace: metallb-system spec: addresses: diff --git a/manifests/monitoring/grafana_values.yaml b/manifests/monitoring/grafana_values.yaml index 0757603063e9c04873c14e2f70ea2c69d2fbe3ff..630fd7ef9f44d4d113dd3b0a9b1a71adf30d5d82 100644 --- a/manifests/monitoring/grafana_values.yaml +++ b/manifests/monitoring/grafana_values.yaml @@ -210,7 +210,7 @@ datasources: isDefault: true - name: Mimir type: prometheus - url: http://mimir-nginx.mon-mimir.svc:80/prometheus + url: http://mon-mimir-gateway.monitoring.svc.cluster.local/prometheus access: proxy isDefault: false diff --git a/manifests/monitoring/mimir_values.yaml b/manifests/monitoring/mimir_values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c7fa5bf94b496ed56d65e27286123c96645df460 --- /dev/null +++ b/manifests/monitoring/mimir_values.yaml @@ -0,0 +1,132 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Minimal Mimir for lab/PoC using single-binary and in-cluster MinIO. +# Chart: grafana/mimir-distributed + +global: + # -- Definitions to set up nginx resolver + dnsService: kube-dns + dnsNamespace: kube-system + clusterDomain: cluster.local. + dnsConfig: {} + +# Mimir structured configuration. Wires storage to the in-cluster MinIO. +mimir: + structuredConfig: + common: + storage: + backend: s3 + s3: + endpoint: minio:9000 + access_key_id: grafana-mimir + secret_access_key: supersecret # change in real clusters + insecure: true + blocks_storage: + s3: + bucket_name: mimir-tsdb + ruler_storage: + s3: + bucket_name: mimir-ruler + alertmanager_storage: + s3: + bucket_name: mimir-alertmanager + +minio: + enabled: true + mode: standalone + rootUser: grafana-mimir + rootPassword: supersecret # change in real clusters + buckets: + - name: mimir-tsdb + policy: none + purge: false + - name: mimir-ruler + policy: none + purge: false + - name: mimir-alertmanager + policy: none + purge: false + persistence: + enabled: true + size: 10Gi + resources: + requests: + cpu: 100m + memory: 128Mi + +# Disable embedded Kafka. Not needed for this minimal setup. +kafka: + enabled: false + +# Keep the NGINX gateway internal to the cluster for simplicity. +gateway: + enabled: true + replicas: 1 + service: + type: ClusterIP + port: 80 + nginx: + verboseLogging: true + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi + +# Turn off sharded components. singleBinary runs the core services already. +distributor: + replicas: 0 +ingester: + replicas: 0 +querier: + replicas: 0 +query_frontend: + replicas: 0 +query_scheduler: + replicas: 0 +store_gateway: + replicas: 0 +compactor: + replicas: 0 + +# Optional features disabled for minimum footprint. +ruler: + enabled: false +alertmanager: + enabled: false +overrides_exporter: + enabled: false + +# Caches off for minimal footprint. Enable later if you need performance. +memcached: + enabled: false +memcached-queries: + enabled: false +memcached-metadata: + enabled: false +memcached-results: + enabled: false + +# Meta-monitoring off to keep footprint small. Turn on when you add Prometheus. +metaMonitoring: + dashboards: + enabled: false + serviceMonitor: + enabled: false + prometheusRule: + enabled: false + grafanaAgent: + enabled: false diff --git a/my_deploy.sh b/my_deploy.sh index 0f1d581c3b801356fd5aa038a8a6c89f06c386af..852a68275d82e628d0ec17d6705f81215247bb0f 100644 --- a/my_deploy.sh +++ b/my_deploy.sh @@ -95,6 +95,9 @@ export TFS_COMPONENTS="context device pathcomp service nbi webui" # Uncomment to activate Load Generator #export TFS_COMPONENTS="${TFS_COMPONENTS} load_generator" +# Uncomment to activate Pluggables Component +#export TFS_COMPONENTS="${TFS_COMPONENTS} pluggables" + # Set the tag you want to use for your images. export TFS_IMAGE_TAG="dev" @@ -214,6 +217,14 @@ export QDB_DROP_TABLES_IF_EXIST="YES" export QDB_REDEPLOY="" +# ----- Time Series Storage - Prometheus / Grafana Mimir ----------------------- + +# Set Time Series Storage installation mode to 'single' (i.e., Prometheus only). +# This option is convenient for development and testing. See ./deploy/all.sh or +# ./deploy/monitoring.sh for additional details. +export TSDB_DEPLOY_MODE="single" + + # ----- K8s Observability ------------------------------------------------------ # Set the external port Prometheus Mgmt HTTP GUI interface will be exposed to. diff --git a/proto/context.proto b/proto/context.proto index cd00b4ed06de8f484ad9a0428e90c54fa06ee9ca..62b21b4497a2ac000ddc9405c8693e7490c35ce2 100644 --- a/proto/context.proto +++ b/proto/context.proto @@ -254,6 +254,7 @@ enum DeviceDriverEnum { DEVICEDRIVER_RYU = 18; DEVICEDRIVER_GNMI_NOKIA_SRLINUX = 19; DEVICEDRIVER_OPENROADM = 20; + DEVICEDRIVER_RESTCONF_OPENCONFIG = 21; } enum DeviceOperationalStatusEnum { @@ -566,9 +567,16 @@ message ConfigRule_Custom { string resource_value = 2; } +enum AclDirectionEnum { + ACLDIRECTION_BOTH = 0; + ACLDIRECTION_INGRESS = 1; + ACLDIRECTION_EGRESS = 2; +} + message ConfigRule_ACL { - EndPointId endpoint_id = 1; - acl.AclRuleSet rule_set = 2; + EndPointId endpoint_id = 1; + AclDirectionEnum direction = 2; + acl.AclRuleSet rule_set = 3; } message ConfigRule_IPOWDM { diff --git a/proto/ip_link.proto b/proto/ip_link.proto index 667467b1605abefc69a53986caca23563283daef..b147678751bd5c0cd0f5c7d940d22a1bbf1ef597 100644 --- a/proto/ip_link.proto +++ b/proto/ip_link.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/proto/ipowdm.proto b/proto/ipowdm.proto index 667467b1605abefc69a53986caca23563283daef..b147678751bd5c0cd0f5c7d940d22a1bbf1ef597 100644 --- a/proto/ipowdm.proto +++ b/proto/ipowdm.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/proto/pluggables.proto b/proto/pluggables.proto new file mode 100644 index 0000000000000000000000000000000000000000..da5e8081bafc5ca4270724807534af05e6caf591 --- /dev/null +++ b/proto/pluggables.proto @@ -0,0 +1,140 @@ +// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +syntax = "proto3"; + +package pluggables; + +import "context.proto"; + +service PluggablesService { + rpc CreatePluggable (CreatePluggableRequest) returns (Pluggable) {} + rpc ListPluggables (ListPluggablesRequest) returns (ListPluggablesResponse) {} + rpc GetPluggable (GetPluggableRequest) returns (Pluggable) {} + rpc DeletePluggable (DeletePluggableRequest) returns (context.Empty) {} + rpc ConfigurePluggable (ConfigurePluggableRequest) returns (Pluggable) {} +} + + +message PluggableId { + context.DeviceId device = 1; + int32 pluggable_index = 2; // physical slot number in the device +} + +message DigitalSubcarrierGroupId { + PluggableId pluggable = 1; + int32 group_index = 2; // Group id within the pluggable +} + +message DigitalSubcarrierId { + DigitalSubcarrierGroupId group = 1; + int32 subcarrier_index = 2; // Subcarrier index within the group +} + +message DigitalSubcarrierConfig { + DigitalSubcarrierId id = 1; + bool active = 2; + double target_output_power_dbm = 3; + double center_frequency_hz = 10; + double symbol_rate_baud = 11; +} + +message DigitalSubcarrierState { + DigitalSubcarrierId id = 1; + bool active = 2; + double measured_output_power_dbm = 3; + double osnr_db = 4; + context.Timestamp updated_at = 10; +} + +message DigitalSubcarrierGroupConfig { + DigitalSubcarrierGroupId id = 1; + int32 group_size = 2; // expected number of DSCs + double group_capacity_gbps = 3; // from YANG group capacity in Gbps + double subcarrier_spacing_mhz = 4; // from YANG digital-subcarrier-spacing + repeated DigitalSubcarrierConfig subcarriers = 10; +} + +message DigitalSubcarrierGroupState { + DigitalSubcarrierGroupId id = 1; + int32 count = 2; // available DSCs + double group_capacity_gbps = 3; + double subcarrier_spacing_mhz = 4; + repeated DigitalSubcarrierState subcarriers = 10; + context.Timestamp updated_at = 20; +} + +message PluggableConfig { + PluggableId id = 1; + double target_output_power_dbm = 2; // target output power for the pluggable + double center_frequency_mhz = 3; // center frequency in MHz + int32 operational_mode = 4; // e.g., 0=off and 1=on + int32 line_port = 5; // line port number + string channel_name = 6; // channel name + repeated DigitalSubcarrierGroupConfig dsc_groups = 10; +} + +message PluggableState { + PluggableId id = 1; + repeated DigitalSubcarrierGroupState dsc_groups = 10; + context.Timestamp updated_at = 20; +} + +message Pluggable { + PluggableId id = 1; + PluggableConfig config = 2; + PluggableState state = 3; +} + +// ----------------------------------------------------------------------------- +// RPC I/O Messages +// ----------------------------------------------------------------------------- +message CreatePluggableRequest { + context.DeviceId device = 1; + int32 preferred_pluggable_index = 2; // -1 for auto (physical slot number in the device(router)) + PluggableConfig initial_config = 10; +} + +message ListPluggablesRequest { + context.DeviceId device = 1; + View view_level = 2; +} + +message ListPluggablesResponse { + repeated Pluggable pluggables = 1; +} + +message GetPluggableRequest { + PluggableId id = 1; + View view_level = 2; +} + +message DeletePluggableRequest { + PluggableId id = 1; +} + +message ConfigurePluggableRequest { + PluggableConfig config = 1; + View view_level = 2; + int32 apply_timeout_seconds = 10; // Not Implemented yet (for timeout) +} + +// to control the level of detail in responses +enum View { + VIEW_UNSPECIFIED = 0; + VIEW_CONFIG = 1; + VIEW_STATE = 2; + VIEW_FULL = 3; +} diff --git a/proto/tapi_lsp.proto b/proto/tapi_lsp.proto new file mode 100644 index 0000000000000000000000000000000000000000..da9f1a739b88ccce30bf2853784b83413506590d --- /dev/null +++ b/proto/tapi_lsp.proto @@ -0,0 +1,36 @@ +// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; +package tapi_lsp; + +message TapiLspRuleSet { + string input_sip = 1; + string output_sip = 2; + string uuid = 3; + string bw = 4; + string tenant_uuid = 5; + string layer_protocol_name = 6; + string layer_protocol_qualifier = 7; + string lower_frequency_mhz = 8; + string upper_frequency_mhz = 9; + repeated string link_uuid_path = 10; + string granularity = 11; + string grid_type = 12; + string direction = 13; + string capacity_unit = 14; + string capacity_value = 15; + string route_objective_function = 16; + string url = 17; +} diff --git a/scripts/run_tests_locally-device-restconf-openconfig.sh b/scripts/run_tests_locally-device-restconf-openconfig.sh new file mode 100755 index 0000000000000000000000000000000000000000..974d584b195a8337ee239caab935120e697c2a31 --- /dev/null +++ b/scripts/run_tests_locally-device-restconf-openconfig.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +PROJECTDIR=`pwd` + +cd $PROJECTDIR/src +RCFILE=$PROJECTDIR/coverage/.coveragerc + +# Run unitary tests and analyze coverage of code at same time +# helpful pytest flags: --log-level=INFO -o log_cli=true --verbose --maxfail=1 --durations=0 +coverage run --rcfile=$RCFILE --append -m pytest --log-level=DEBUG --verbose -o log_cli=true \ + device/tests/restconf_openconfig/test_unitary_restconf_openconfig.py diff --git a/scripts/run_tests_locally-nbi-dscm.sh b/scripts/run_tests_locally-nbi-dscm.sh new file mode 100755 index 0000000000000000000000000000000000000000..4ccc156e97a29e2b4443cf8019f93552458d419a --- /dev/null +++ b/scripts/run_tests_locally-nbi-dscm.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +PROJECTDIR=`pwd` + +cd $PROJECTDIR/src + +# test DSCM NBI functions +python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \ + nbi/tests/test_dscm_restconf.py::test_post_get_delete_leaf_optical_channel_frequency + +# # test JSON to Proto conversion functions +# python3 -m pytest --log-level=INFO --log-cli-level=INFO --verbose \ +# nbi/tests/test_json_to_proto.py::test_create_pluggable_request_hub_format \ +# nbi/tests/test_json_to_proto.py::test_create_pluggable_request_leaf_format \ +# nbi/tests/test_json_to_proto.py::test_configure_pluggable_request_hub_format \ +# nbi/tests/test_json_to_proto.py::test_configure_pluggable_request_leaf_format \ +# nbi/tests/test_json_to_proto.py::test_empty_payload diff --git a/scripts/run_tests_locally-service-pluggable.sh b/scripts/run_tests_locally-service-pluggable.sh new file mode 100755 index 0000000000000000000000000000000000000000..e749bd43ca5c30192d755c59d54b492c21733ca7 --- /dev/null +++ b/scripts/run_tests_locally-service-pluggable.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +PROJECTDIR=`pwd` +cd $PROJECTDIR/src +RCFILE=$PROJECTDIR/coverage/.coveragerc + +# to run integration test: -m integration +python3 -m pytest --log-level=info --log-cli-level=info --verbose -m "not integration" \ + pluggables/tests/test_pluggables_with_SBI.py +# python3 -m pytest --log-level=info --log-cli-level=info --verbose \ +# pluggables/tests/test_Pluggables.py + +echo "Bye!" diff --git a/scripts/update_license_headers.py b/scripts/update_license_headers.py index ae4dad716842dec309786d9bed81483a4e6cdcc2..c7c821aa4578b37a32ea62aa4163132fc3ca6a1f 100644 --- a/scripts/update_license_headers.py +++ b/scripts/update_license_headers.py @@ -94,7 +94,9 @@ def skip_file(file_path : str) -> bool: if file_path.endswith('references_probes_libraries.txt'): return True return False if '/nbi/service/ietf_network/bindings/' in file_path: return True - if '/nbi/service/ietf_network_slice/bindings/' in file_path: return True + if '/nbi/service/ietf_network_slice/bindings/' in file_path: + if file_path.endswith('.py'): return False + return True if '/nbi/service/ietf_l3vpn/yang/' in file_path: return True if '/nbi/service/ietf_network/yang/' in file_path: return True if '/tests/tools/mock_qkd_nodes/yang/' in file_path: return True @@ -120,6 +122,30 @@ def process_file( file_path : str, file_no_header : TextIOWrapper, file_skipped : TextIOWrapper, file_updated : TextIOWrapper ) -> None: if skip_file(file_path): + # silent skips + if file_path.startswith('./.git'): return + if file_path.startswith('./libyang'): return + if file_path.startswith('./tmp'): return + if file_path.startswith('./hackfest/kafka/kafka_2.13-2.8.0/'): return + if file_path.startswith('./hackfest/tapi/server/tapi_server/'): return + if '/__pycache__/' in file_path: return + if '/nbi/service/ietf_network/bindings/' in file_path: return + if '/target/classes/' in file_path: return + if '/target/generated-classes/' in file_path: return + if '/target/generated-sources/' in file_path: return + if '/target/test-classes/' in file_path: return + if '/git/openconfig/public/' in file_path: return + if file_path.endswith('.class'): return + if file_path.endswith('.csv'): return + if file_path.endswith('.jar'): return + if file_path.endswith('.json'): return + if file_path.endswith('.pyc'): return + if file_path.endswith('.png'): return + if file_path.endswith('.zip'): return + if file_path.endswith('_pb2.py'): return + if file_path.endswith('_grpc.py'): return + + # verbose skip file_skipped.write(file_path + '\n') return diff --git a/src/analytics/backend/Dockerfile b/src/analytics/backend/Dockerfile index 34e506f8e9c8404c328642e4f8a6c1a650fa26db..316b70b6aa6419e74e60d4f18c01a42d68b35c2f 100644 --- a/src/analytics/backend/Dockerfile +++ b/src/analytics/backend/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/analytics/frontend/Dockerfile b/src/analytics/frontend/Dockerfile index a88fb3c5e74916156d37142c88e9d18016917838..50edd0aae4dd1d442bcc76eb6dc94ecb1260bd7d 100644 --- a/src/analytics/frontend/Dockerfile +++ b/src/analytics/frontend/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/automation/Dockerfile b/src/automation/Dockerfile index a8ebce336931e5517faa60d8628e13e19dd9745e..03264745d00d14f05975597f0d4ecf6f93711e61 100644 --- a/src/automation/Dockerfile +++ b/src/automation/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/automation/service/zsm_handlers/P4INTZSMPlugin.py b/src/automation/service/zsm_handlers/P4INTZSMPlugin.py index a16979530a6bc407cd32891ff1c965d432a2242c..e71e2e6e3e87c43ee6b9b29997f7f674d3029227 100644 --- a/src/automation/service/zsm_handlers/P4INTZSMPlugin.py +++ b/src/automation/service/zsm_handlers/P4INTZSMPlugin.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/automation/service/zsm_handlers/__init__.py b/src/automation/service/zsm_handlers/__init__.py index ae96f895eec410ee2788e47cfedb5abf8353af3a..6a371461bd8ef89b77c8acfc4cfdfbb415c1f9ac 100644 --- a/src/automation/service/zsm_handlers/__init__.py +++ b/src/automation/service/zsm_handlers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/automation/tests/test_automation_handlers.py b/src/automation/tests/test_automation_handlers.py index 16fbcb255bbfb03829f48ed8901cb23c5161deaa..0530e7614ffcba5a07deeddf5a8326a4389b925e 100644 --- a/src/automation/tests/test_automation_handlers.py +++ b/src/automation/tests/test_automation_handlers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/bgpls_speaker/Dockerfile b/src/bgpls_speaker/Dockerfile index eed5b30e93e25c172c7bdfa84ba29171b3e12e47..316efca16f7067d486bb95f1b7d25de867e5f27c 100644 --- a/src/bgpls_speaker/Dockerfile +++ b/src/bgpls_speaker/Dockerfile @@ -56,13 +56,13 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' -# Install OpenJDK-21 -RUN apt-get update && \ - apt-get install -y openjdk-21-jre && \ +# Install OpenJDK-17 +RUN apt-get update -y && \ + apt-get install -y openjdk-17-jre && \ apt-get clean; # Get common Python packages @@ -96,7 +96,7 @@ RUN python3 -m pip install -r requirements.txt # Java module necessary config files WORKDIR /var/teraflow/bgpls_speaker RUN mkdir -p /java -COPY src/bgpls_speaker/service/java/* /java/ +COPY src/bgpls_speaker/service/java/* /java/ COPY --from=build /netphony-topology/target/bgp-ls-speaker-jar-with-dependencies.jar /var/teraflow/bgpls_speaker/service/java/bgp_ls.jar # Add component files into working directory diff --git a/src/common/Constants.py b/src/common/Constants.py index a5dca46a29d5d1a416aa135419c2bdf962c7753c..e98807c962248f945fb5ead65b54687caf3c51cc 100644 --- a/src/common/Constants.py +++ b/src/common/Constants.py @@ -75,6 +75,7 @@ class ServiceNameEnum(Enum): ANALYTICSBACKEND = 'analytics-backend' QOSPROFILE = 'qos-profile' OSMCLIENT = 'osm-client' + PLUGGABLES = 'dscm-pluggable' # Used for test and debugging only DLT_GATEWAY = 'dltgateway' @@ -117,6 +118,7 @@ DEFAULT_SERVICE_GRPC_PORTS = { ServiceNameEnum.ANALYTICSBACKEND .value : 30090, ServiceNameEnum.AUTOMATION .value : 30200, ServiceNameEnum.OSMCLIENT .value : 30210, + ServiceNameEnum.PLUGGABLES .value : 30220, # Used for test and debugging only ServiceNameEnum.DLT_GATEWAY .value : 50051, diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py index 5ee0d91043dfda28c413c9ded9e01a5b6e1460f2..948de0e98b42a4de9762d65c51690ea5e6dd96ef 100644 --- a/src/common/DeviceTypes.py +++ b/src/common/DeviceTypes.py @@ -33,6 +33,7 @@ class DeviceTypeEnum(Enum): EMULATED_OPEN_ROADM = 'emu-optical-openroadm' EMULATED_OPTICAL_SPLITTER = 'emu-optical-splitter' # passive component required for XR Constellation EMULATED_P4_SWITCH = 'emu-p4-switch' + EMULATED_PACKET_FIREWALL = 'emu-packet-firewall' EMULATED_PACKET_RADIO_ROUTER = 'emu-packet-radio-router' EMULATED_PACKET_ROUTER = 'emu-packet-router' EMULATED_PACKET_SWITCH = 'emu-packet-switch' @@ -51,6 +52,7 @@ class DeviceTypeEnum(Enum): OPTICAL_ROADM = 'optical-roadm' OPTICAL_TRANSPONDER = 'optical-transponder' P4_SWITCH = 'p4-switch' + PACKET_FIREWALL = 'packet-firewall' PACKET_POP = 'packet-pop' PACKET_RADIO_ROUTER = 'packet-radio-router' PACKET_ROUTER = 'packet-router' @@ -61,7 +63,7 @@ class DeviceTypeEnum(Enum): OPEN_ROADM = 'openroadm' MORPHEUS = 'morpheus' OPENFLOW_RYU_CONTROLLER = 'openflow-ryu-controller' - IPOWDM_ROUTER = 'ipowdm-router' + DSCM_NODE = 'dscm' # ETSI TeraFlowSDN controller TERAFLOWSDN_CONTROLLER = 'teraflowsdn' diff --git a/src/common/method_wrappers/ServiceExceptions.py b/src/common/method_wrappers/ServiceExceptions.py index 3d06c00a53505d556c472985e03ed6e527f8d59f..8423188328216624f5e89d050e4a94ebfc48c799 100644 --- a/src/common/method_wrappers/ServiceExceptions.py +++ b/src/common/method_wrappers/ServiceExceptions.py @@ -33,21 +33,21 @@ class NotFoundException(ServiceException): class AlreadyExistsException(ServiceException): def __init__( - self, object_name : str, object_uuid: str, extra_details : Union[str, Iterable[str]] = None + self, object_name : str, object_uuid: str, extra_details : Union[str, Iterable[str]] = [] ) -> None: details = '{:s}({:s}) already exists'.format(str(object_name), str(object_uuid)) super().__init__(grpc.StatusCode.ALREADY_EXISTS, details, extra_details=extra_details) class InvalidArgumentException(ServiceException): def __init__( - self, argument_name : str, argument_value: str, extra_details : Union[str, Iterable[str]] = None + self, argument_name : str, argument_value: str, extra_details : Union[str, Iterable[str]] = [] ) -> None: details = '{:s}({:s}) is invalid'.format(str(argument_name), str(argument_value)) super().__init__(grpc.StatusCode.INVALID_ARGUMENT, details, extra_details=extra_details) class InvalidArgumentsException(ServiceException): def __init__( - self, arguments : List[Tuple[str, str]], extra_details : Union[str, Iterable[str]] = None + self, arguments : List[Tuple[str, str]], extra_details : Union[str, Iterable[str]] = [] ) -> None: str_arguments = ', '.join(['{:s}({:s})'.format(name, value) for name,value in arguments]) details = 'Arguments {:s} are invalid'.format(str_arguments) @@ -55,14 +55,14 @@ class InvalidArgumentsException(ServiceException): class OperationFailedException(ServiceException): def __init__( - self, operation : str, extra_details : Union[str, Iterable[str]] = None + self, operation : str, extra_details : Union[str, Iterable[str]] = [] ) -> None: details = 'Operation({:s}) failed'.format(str(operation)) super().__init__(grpc.StatusCode.INTERNAL, details, extra_details=extra_details) class NotImplementedException(ServiceException): def __init__( - self, operation : str, extra_details : Union[str, Iterable[str]] = None + self, operation : str, extra_details : Union[str, Iterable[str]] = [] ) -> None: details = 'Operation({:s}) not implemented'.format(str(operation)) super().__init__(grpc.StatusCode.UNIMPLEMENTED, details, extra_details=extra_details) diff --git a/src/common/tests/MockServicerImpl_Context.py b/src/common/tests/MockServicerImpl_Context.py index 310eb92b5b8827aa76d3b1079004f0395949a5a6..2cdfac7f7a2c1819e20d3ca3b22a929313572ce7 100644 --- a/src/common/tests/MockServicerImpl_Context.py +++ b/src/common/tests/MockServicerImpl_Context.py @@ -315,8 +315,8 @@ class MockServicerImpl_Context(ContextServiceServicer): if exclude_config_rules: del reply_device.device_config.config_rules[:] # pylint: disable=no-member if exclude_components: del reply_device.components[:] # pylint: disable=no-member devices.append(reply_device) - - reply = DeviceList(devices=devices) + + reply = DeviceList(devices=devices) LOGGER.debug('[SelectDevice] reply={:s}'.format(grpc_message_to_json_string(reply))) return reply @@ -468,13 +468,13 @@ class MockServicerImpl_Context(ContextServiceServicer): container_name = 'slice[{:s}]'.format(str(slice_id.context_id.context_uuid.uuid)) slice_uuid = slice_id.slice_uuid.uuid container_entry_uuids.setdefault(container_name, set()).add(slice_uuid) - + exclude_endpoint_ids = not request.include_endpoint_ids exclude_constraints = not request.include_constraints exclude_service_ids = not request.include_service_ids - exclude_subslice_ids = not request.include_subslice_ids + exclude_subslice_ids = not request.include_subslice_ids exclude_config_rules = not request.include_config_rules - + slices = list() for container_name in sorted(container_entry_uuids.keys()): entry_uuids = container_entry_uuids[container_name] @@ -487,7 +487,7 @@ class MockServicerImpl_Context(ContextServiceServicer): if exclude_subslice_ids : del reply_slice.slice_subslice_ids[:] # pylint: disable=no-member if exclude_config_rules: del reply_slice.slice_config .config_rules[:] # pylint: disable=no-member slices.append(reply_slice) - + reply = SliceList(slices=slices) LOGGER.debug('[SelectSlice] reply={:s}'.format(grpc_message_to_json_string(reply))) return reply @@ -563,23 +563,24 @@ class MockServicerImpl_Context(ContextServiceServicer): container_name = 'service[{:s}]'.format(str(service_id.context_id.context_uuid.uuid)) service_uuid = service_id.service_uuid.uuid container_entry_uuids.setdefault(container_name, set()).add(service_uuid) - + exclude_endpoint_ids = not request.include_endpoint_ids exclude_constraints = not request.include_constraints exclude_config_rules = not request.include_config_rules - + services = list() for container_name in sorted(container_entry_uuids.keys()): entry_uuids = container_entry_uuids[container_name] for service in self.obj_db.select_entries(container_name, entry_uuids): + LOGGER.debug('service={:s}'.format(grpc_message_to_json_string(service))) reply_service = Service() reply_service.CopyFrom(service) if exclude_endpoint_ids: del reply_service.service_endpoint_ids[:] # pylint: disable=no-member if exclude_constraints : del reply_service.service_constraints[:] # pylint: disable=no-member if exclude_config_rules: del reply_service.service_config.config_rules[:] # pylint: disable=no-member services.append(reply_service) - - reply = ServiceList(services=services) + + reply = ServiceList(services=services) LOGGER.debug('[SelectService] reply={:s}'.format(grpc_message_to_json_string(reply))) return reply diff --git a/src/common/tools/object_factory/Service.py b/src/common/tools/object_factory/Service.py index 2b9a69f5dab95d3dce1d4f9fd8712c7e2ee84753..d4e01b65f115be7cf06ffa5135e07abe8e6f7c04 100644 --- a/src/common/tools/object_factory/Service.py +++ b/src/common/tools/object_factory/Service.py @@ -103,3 +103,23 @@ def json_service_iplink_planned( service_uuid, ServiceTypeEnum.SERVICETYPE_IP_LINK, context_id=json_context_id(context_uuid), status=ServiceStatusEnum.SERVICESTATUS_PLANNED, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules) + +def json_service_ipowdm_planned( + service_uuid : str, endpoint_ids : List[Dict] = [], constraints : List[Dict] = [], + config_rules : List[Dict] = [], context_uuid : str = DEFAULT_CONTEXT_NAME + ): + + return json_service( + service_uuid, ServiceTypeEnum.SERVICETYPE_IPOWDM, context_id=json_context_id(context_uuid), + status=ServiceStatusEnum.SERVICESTATUS_PLANNED, endpoint_ids=endpoint_ids, constraints=constraints, + config_rules=config_rules) + +def json_service_tapi_lsp_planned( + service_uuid : str, endpoint_ids : List[Dict] = [], constraints : List[Dict] = [], + config_rules : List[Dict] = [], context_uuid : str = DEFAULT_CONTEXT_NAME + ): + + return json_service( + service_uuid, ServiceTypeEnum.SERVICETYPE_TAPI_LSP, context_id=json_context_id(context_uuid), + status=ServiceStatusEnum.SERVICESTATUS_PLANNED, endpoint_ids=endpoint_ids, constraints=constraints, + config_rules=config_rules) diff --git a/src/common/tools/rest_conf/client/RestConfClient.py b/src/common/tools/rest_conf/client/RestConfClient.py index 088bb4ae14c4308d11c07f4efb6e6ed1817995eb..953e68716b5c522145570aaa773c0942eb2fd6c5 100644 --- a/src/common/tools/rest_conf/client/RestConfClient.py +++ b/src/common/tools/rest_conf/client/RestConfClient.py @@ -61,6 +61,10 @@ class RestConfClient(RestApiClient): self._base_url = str(href).replace('//', '/') if self._restconf_version is not None: self._base_url += '/{:s}'.format(self._restconf_version) + if self._base_url.endswith('/data/'): + self._base_url = self._base_url.split('/data/')[0] + elif self._base_url.endswith('/data'): + self._base_url = self._base_url.split('/data')[0] def get( diff --git a/src/common/tools/rest_conf/server/Dockerfile b/src/common/tools/rest_conf/server/Dockerfile index 1dbe96c0abe3b632829809d6c0f0e8ea0b5df365..6e87c0656515a2a49e8e60b1f51f8de4f02230e2 100644 --- a/src/common/tools/rest_conf/server/Dockerfile +++ b/src/common/tools/rest_conf/server/Dockerfile @@ -38,9 +38,9 @@ RUN ldconfig ENV PYTHONUNBUFFERED=0 # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Create component sub-folders, get specific Python packages RUN mkdir -p /var/teraflow/restconf_server/ diff --git a/src/common/tools/rest_conf/server/restconf_server/Callbacks.py b/src/common/tools/rest_conf/server/restconf_server/Callbacks.py index e3e4d0f452434509f8caa083fb39d529e4f7efbd..04a8b8bd9cb4dca5908029918393abfa27780b38 100644 --- a/src/common/tools/rest_conf/server/restconf_server/Callbacks.py +++ b/src/common/tools/rest_conf/server/restconf_server/Callbacks.py @@ -38,7 +38,22 @@ class _Callback: ''' return self._path_pattern.fullmatch(path) - def execute_data( + def execute_data_pre_get( + self, match : re.Match, path : str, old_data : Optional[Dict] + ) -> bool: + ''' + Execute the callback action for a matched data path. + This method should be implemented for each specific callback. + @param match: `re.Match` object returned by `match()`. + @param path: Original request path that was matched. + @param old_data: Resource representation before retrieval, if applicable, otherwise `None` + @returns boolean indicating whether additional callbacks should be executed, defaults to False + ''' + MSG = 'match={:s}, path={:s}, old_data={:s}' + msg = MSG.format(match.groupdict(), path, old_data) + raise NotImplementedError(msg) + + def execute_data_update( self, match : re.Match, path : str, old_data : Optional[Dict], new_data : Optional[Dict] ) -> bool: @@ -78,14 +93,24 @@ class CallbackDispatcher: def register(self, callback : _Callback) -> None: self._callbacks.append(callback) - def dispatch_data( + def dispatch_data_pre_get( + self, path : str, old_data : Optional[Dict] = None + ) -> None: + LOGGER.warning('[dispatch_data_pre_get] Checking Callbacks for path={:s}'.format(str(path))) + for callback in self._callbacks: + match = callback.match(path) + if match is None: continue + keep_running_callbacks = callback.execute_data_pre_get(match, path, old_data) + if not keep_running_callbacks: break + + def dispatch_data_update( self, path : str, old_data : Optional[Dict] = None, new_data : Optional[Dict] = None ) -> None: - LOGGER.warning('[dispatch_data] Checking Callbacks for path={:s}'.format(str(path))) + LOGGER.warning('[dispatch_data_update] Checking Callbacks for path={:s}'.format(str(path))) for callback in self._callbacks: match = callback.match(path) if match is None: continue - keep_running_callbacks = callback.execute_data(match, path, old_data, new_data) + keep_running_callbacks = callback.execute_data_update(match, path, old_data, new_data) if not keep_running_callbacks: break def dispatch_operation( @@ -113,7 +138,7 @@ class CallbackOnNetwork(_Callback): pattern += r'/ietf-network:networks/network=(?P[^/]+)' super().__init__(pattern) - def execute_data( + def execute_data_update( self, match : re.Match, path : str, old_data : Optional[Dict], new_data : Optional[Dict] ) -> bool: @@ -127,7 +152,7 @@ class CallbackOnNode(_Callback): pattern += r'/node=(?P[^/]+)' super().__init__(pattern) - def execute_data( + def execute_data_update( self, match : re.Match, path : str, old_data : Optional[Dict], new_data : Optional[Dict] ) -> bool: @@ -141,7 +166,7 @@ class CallbackOnLink(_Callback): pattern += r'/ietf-network-topology:link=(?P[^/]+)' super().__init__(pattern) - def execute_data( + def execute_data_update( self, match : re.Match, path : str, old_data : Optional[Dict], new_data : Optional[Dict] ) -> bool: @@ -167,12 +192,12 @@ def main() -> None: callbacks.register(CallbackOnLink()) callbacks.register(CallbackShutdown()) - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin') - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin/node=P-PE2') - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin/ietf-network-topology:link=L6') - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin/') - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin/node=P-PE1/') - callbacks.dispatch_data('/restconf/data/ietf-network:networks/network=admin/ietf-network-topology:link=L4/') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin/node=P-PE2') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin/ietf-network-topology:link=L6') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin/') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin/node=P-PE1/') + callbacks.dispatch_data_update('/restconf/data/ietf-network:networks/network=admin/ietf-network-topology:link=L4/') callbacks.dispatch_operation('/restconf/operations/shutdown/') if __name__ == '__main__': diff --git a/src/common/tools/rest_conf/server/restconf_server/DispatchData.py b/src/common/tools/rest_conf/server/restconf_server/DispatchData.py index 89cb8206e9d2126e6e5ef78b9a9fa89a940cf038..0dff60d3a7075a43d3b3abf70be1039d54461560 100644 --- a/src/common/tools/rest_conf/server/restconf_server/DispatchData.py +++ b/src/common/tools/rest_conf/server/restconf_server/DispatchData.py @@ -31,6 +31,11 @@ class RestConfDispatchData(Resource): self._callback_dispatcher = callback_dispatcher def get(self, subpath : str = '/') -> Response: + data = self._yang_handler.get(subpath) + self._callback_dispatcher.dispatch_data_pre_get( + '/restconf/data/' + subpath, old_data=data + ) + data = self._yang_handler.get(subpath) if data is None: abort( @@ -70,7 +75,7 @@ class RestConfDispatchData(Resource): LOGGER.info('[POST] {:s} {:s} => {:s}'.format(subpath, str(payload), str(json_data))) - self._callback_dispatcher.dispatch_data( + self._callback_dispatcher.dispatch_data_update( '/restconf/data/' + subpath, old_data=None, new_data=json_data ) @@ -102,7 +107,7 @@ class RestConfDispatchData(Resource): diff_data = deepdiff.DeepDiff(old_data, new_data) updated = len(diff_data) > 0 - self._callback_dispatcher.dispatch_data( + self._callback_dispatcher.dispatch_data_update( '/restconf/data/' + subpath, old_data=old_data, new_data=new_data ) @@ -140,7 +145,7 @@ class RestConfDispatchData(Resource): #diff_data = deepdiff.DeepDiff(old_data, new_data) #updated = len(diff_data) > 0 - self._callback_dispatcher.dispatch_data( + self._callback_dispatcher.dispatch_data_update( '/restconf/data/' + subpath, old_data=old_data, new_data=new_data ) @@ -170,7 +175,7 @@ class RestConfDispatchData(Resource): description='Path({:s}) not found'.format(str(subpath)) ) - self._callback_dispatcher.dispatch_data( + self._callback_dispatcher.dispatch_data_update( '/restconf/data/' + subpath, old_data=old_data, new_data=None ) diff --git a/src/common/tools/rest_conf/server/restconf_server/RestConfServerApplication.py b/src/common/tools/rest_conf/server/restconf_server/RestConfServerApplication.py index 58384299cba8dfbee37dc776863d180153e83b45..1da9f7069b23e6034efc3406f24e7f14182c8137 100644 --- a/src/common/tools/rest_conf/server/restconf_server/RestConfServerApplication.py +++ b/src/common/tools/rest_conf/server/restconf_server/RestConfServerApplication.py @@ -63,6 +63,9 @@ class RestConfServerApplication: self._app.after_request(log_request) self._api = Api(self._app) + @property + def yang_handler(self): return self._yang_handler + @property def callback_dispatcher(self): return self._callback_dispatcher diff --git a/src/common/tools/rest_conf/server/restconf_server/YangHandler.py b/src/common/tools/rest_conf/server/restconf_server/YangHandler.py index 9df57528f93a9e599da259d30d9fb88f618346a9..22e5b63d7c15e67fb54ab157c13c784e95972b54 100644 --- a/src/common/tools/rest_conf/server/restconf_server/YangHandler.py +++ b/src/common/tools/rest_conf/server/restconf_server/YangHandler.py @@ -54,6 +54,12 @@ class YangHandler: json.dumps(yang_startup_data), fmt='json' ) + @property + def yang_context(self): return self._yang_context + + @property + def yang_datastore(self): return self._datastore + def destroy(self) -> None: self._yang_context.destroy() @@ -165,13 +171,20 @@ class YangHandler: name, val = part.split('=', 1) # keep original name (may include prefix) for output, but # use local name (without module prefix) to lookup schema - local_name = name.split(':', 1)[1] if ':' in name else name + local_name = name #.split(':', 1)[1] if ':' in name else name schema_path = schema_path + '/' + local_name if schema_path else '/' + local_name schema_nodes = list(self._yang_context.find_path(schema_path)) if len(schema_nodes) != 1: MSG = 'No/Multiple SchemaNodes({:s}) for SchemaPath({:s})' raise Exception(MSG.format( - str([repr(sn) for sn in schema_nodes]), schema_path + #str([repr(sn) for sn in schema_nodes]), schema_path + str([ + '{:s}({:s}) => {:s}'.format( + repr(sn), + str(sn.schema_path()), + str([repr(snn) for snn in sn.iter_tree()]) + ) + for sn in schema_nodes]), schema_path )) schema_node = schema_nodes[0] @@ -219,7 +232,7 @@ class YangHandler: out_parts.append(name + ''.join(preds)) else: - local_part = part.split(':', 1)[1] if ':' in part else part + local_part = part #.split(':', 1)[1] if ':' in part else part schema_path = schema_path + '/' + local_part if schema_path else '/' + local_part out_parts.append(part) diff --git a/src/common/tools/rest_conf/server/restconf_server/YangModelDiscoverer.py b/src/common/tools/rest_conf/server/restconf_server/YangModelDiscoverer.py index f31305280e45cf2ec00756cb4c2c4116e869246f..ff9ddee50923278e86c8ad52fb6f68f358dbbd2b 100644 --- a/src/common/tools/rest_conf/server/restconf_server/YangModelDiscoverer.py +++ b/src/common/tools/rest_conf/server/restconf_server/YangModelDiscoverer.py @@ -32,8 +32,14 @@ IMPORT_BLOCK_RE = re.compile(r"\bimport\s+([A-Za-z0-9_.-]+)\s*\{", re.IGNORECASE # import foo; (very rare, but we’ll support it) IMPORT_SEMI_RE = re.compile(r"\bimport\s+([A-Za-z0-9_.-]+)\s*;", re.IGNORECASE) +# include foo { ... } (most common form) +INCLUDE_BLOCK_RE = re.compile(r"\binclude\s+([A-Za-z0-9_.-]+)\s*\{", re.IGNORECASE) -def _parse_yang_file(path: Path) -> Tuple[Optional[str], Set[str]]: +# include foo; (very rare, but we’ll support it) +INCLUDE_SEMI_RE = re.compile(r"\binclude\s+([A-Za-z0-9_.-]+)\s*;", re.IGNORECASE) + + +def _parse_yang_file(path: Path) -> Tuple[Optional[str], Set[str], Set[str]]: path_stem = path.stem # file name without extension expected_module_name = path_stem.split('@', 1)[0] @@ -54,14 +60,20 @@ def _parse_yang_file(path: Path) -> Tuple[Optional[str], Set[str]]: raise Exception(MSG.format(str(module_name), str(expected_module_name))) module_imports = set() + module_includes = set() if module_name is not None: module_imports.update(IMPORT_BLOCK_RE.findall(data)) module_imports.update(IMPORT_SEMI_RE.findall(data)) + module_includes.update(INCLUDE_BLOCK_RE.findall(data)) + module_includes.update(INCLUDE_SEMI_RE.findall(data)) # ignore modules importing themselves, just in case module_imports.discard(module_name) - return module_name, module_imports + # ignore modules including themselves, just in case + module_includes.discard(module_name) + + return module_name, module_imports, module_includes class YangModuleDiscoverer: @@ -70,9 +82,9 @@ class YangModuleDiscoverer: self._module_to_paths : Dict[str, List[Path]] = defaultdict(list) self._module_to_imports : Dict[str, Set[str]] = defaultdict(set) + self._module_to_includes : Dict[str, Set[str]] = defaultdict(set) self._ordered_module_names : Optional[List[str]] = None - def run( self, do_print_order : bool = False, do_log_order : bool = False, logger : Optional[logging.Logger] = None, level : int = logging.INFO @@ -97,10 +109,30 @@ class YangModuleDiscoverer: raise Exception(MSG.format(str(self._yang_search_path))) for yang_path in yang_root.rglob('*.yang'): - module_name, module_imports = _parse_yang_file(yang_path) + module_name, module_imports, module_includes = _parse_yang_file(yang_path) if module_name is None: continue - self._module_to_paths[module_name].append(yang_path) - self._module_to_imports[module_name] = module_imports + self._module_to_paths.setdefault(module_name, list()).append(yang_path) + self._module_to_imports.setdefault(module_name, set()).update(module_imports) + self._module_to_includes.setdefault(module_name, set()).update(module_includes) + + # Propagate modules imported by included modules to modules including them: + # openconfig-platform includes openconfig-platform-common + # openconfig-platform-common imports ( + # openconfig-platform-types, openconfig-extensions, openconfig-types + # ) + # => propagate ( + # openconfig-platform-types, openconfig-extensions, openconfig-types + # ) as imports of openconfig-platform + # => remove openconfig-platform-common from list of modules_to_imports as + # cannot be imported by itself + included_modules : Set[str] = set() + for module_name, module_includes in self._module_to_includes.items(): + for inc_mdl_name in module_includes: + included_module_imports = self._module_to_imports.get(inc_mdl_name, set()) + self._module_to_imports.setdefault(module_name, set()).update(included_module_imports) + included_modules.update(module_includes) + for included_module in included_modules: + self._module_to_imports.pop(included_module) if len(self._module_to_paths) == 0: MSG = 'No modules found in Path({:s})' @@ -128,8 +160,8 @@ class YangModuleDiscoverer: def _check_missing_modules(self) -> None: local_module_names = set(self._module_to_imports.keys()) missing_modules : List[str] = list() - for module_name, imported_modules in self._module_to_imports.items(): - missing = imported_modules.difference(local_module_names) + for module_name, module_imports in self._module_to_imports.items(): + missing = module_imports.difference(local_module_names) if len(missing) == 0: continue missing_modules.append( ' {:s} => {:s}'.format(module_name, str(missing)) @@ -143,8 +175,8 @@ class YangModuleDiscoverer: def _sort_modules(self) -> None: ts = TopologicalSorter() - for module_name, imported_modules in self._module_to_imports.items(): - ts.add(module_name, *imported_modules) + for module_name, module_imports in self._module_to_imports.items(): + ts.add(module_name, *module_imports) try: self._ordered_module_names = list(ts.static_order()) # raises CycleError on cycles diff --git a/src/common/type_checkers/Assertions.py b/src/common/type_checkers/Assertions.py index 5c6b2c6d44e4def6c424e7a05ef9d8d375868829..b7c543c4f61a2e1e4ca47ba8267b020ac39a4d16 100644 --- a/src/common/type_checkers/Assertions.py +++ b/src/common/type_checkers/Assertions.py @@ -58,6 +58,8 @@ def validate_device_driver_enum(message): 'DEVICEDRIVER_MORPHEUS', 'DEVICEDRIVER_RYU', 'DEVICEDRIVER_GNMI_NOKIA_SRLINUX', + 'DEVICEDRIVER_OPENROADM', + 'DEVICEDRIVER_GNMI_OPENCONFIG', ] def validate_device_operational_status_enum(message): @@ -154,8 +156,9 @@ def validate_uuid(message, allow_empty=False): CONFIG_RULE_TYPES = { 'custom', 'acl', + 'ip_link', 'ipowdm', - 'ip_link' + 'tapi_lsp' } def validate_config_rule(message): assert isinstance(message, dict) diff --git a/src/context/Dockerfile b/src/context/Dockerfile index add63fe65aa7656a5d06f9467a087ac1558d1b0b..dc08840ccf2cb3e03b4c1d32629c46d24bf6bac9 100644 --- a/src/context/Dockerfile +++ b/src/context/Dockerfile @@ -28,9 +28,9 @@ ENV PYTHONUNBUFFERED=0 # chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/context/service/database/ConfigRule.py b/src/context/service/database/ConfigRule.py index 8ec5b631b9568600a4c0b1bdb06e438c5682e320..b801be68f8486963d4366530908ed2853855a311 100644 --- a/src/context/service/database/ConfigRule.py +++ b/src/context/service/database/ConfigRule.py @@ -71,10 +71,13 @@ def compose_config_rules_data( _, _, endpoint_uuid = endpoint_get_uuid(config_rule.acl.endpoint_id, allow_random=False) rule_set_name = config_rule.acl.rule_set.name configrule_name = '{:s}:{:s}:{:s}:{:s}'.format(parent_kind, kind.value, endpoint_uuid, rule_set_name) - elif kind == ConfigRuleKindEnum.IPOWDM: - _, _, endpoint_uuid = endpoint_get_uuid(config_rule.ipowdm.endpoint_id, allow_random=False) elif kind == ConfigRuleKindEnum.IP_LINK: _, _, endpoint_uuid = endpoint_get_uuid(config_rule.ip_link.endpoint_id, allow_random=False) + elif kind == ConfigRuleKindEnum.IPOWDM: + _, _, endpoint_uuid = endpoint_get_uuid(config_rule.ipowdm.endpoint_id, allow_random=False) + configrule_name = '{:s}:{:s}:{:s}'.format(parent_kind, kind.value, endpoint_uuid) + elif kind == ConfigRuleKindEnum.TAPI_LSP: + _, _, endpoint_uuid = endpoint_get_uuid(config_rule.tapi_lsp.endpoint_id, allow_random=False) configrule_name = '{:s}:{:s}:{:s}'.format(parent_kind, kind.value, endpoint_uuid) else: MSG = 'Name for ConfigRule({:s}) cannot be inferred '+\ diff --git a/src/context/service/database/OpticalBand.py b/src/context/service/database/OpticalBand.py index 08b88d55b1e8023b2c82b9b2e933bd0a231859b8..6057adaadc5dcde14f9fb95f2a4b82cc51a7d04c 100644 --- a/src/context/service/database/OpticalBand.py +++ b/src/context/service/database/OpticalBand.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/context/service/database/Service.py b/src/context/service/database/Service.py index a5aebd7a981e3b62d9ced5098e1dcfaaee1c0739..6685d1fbac3ca1254f634d95bb44ace812857817 100644 --- a/src/context/service/database/Service.py +++ b/src/context/service/database/Service.py @@ -88,10 +88,12 @@ def service_set(db_engine : Engine, messagebroker : MessageBroker, request : Ser service_type = grpc_to_enum__service_type(request.service_type) if service_type is None and request.service_type == ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY: service_type = "OPTICAL_CONNECTIVITY" - if service_type is None and request.service_type == ServiceTypeEnum.SERVICETYPE_IPOWDM: - service_type = "IPOWDM" if service_type is None and request.service_type == ServiceTypeEnum.SERVICETYPE_IP_LINK : service_type = "IP_LINK" + if service_type is None and request.service_type == ServiceTypeEnum.SERVICETYPE_IPOWDM: + service_type = "IPOWDM" + if service_type is None and request.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_LSP: + service_type = "TAPI_LSP" service_status = grpc_to_enum__service_status(request.service_status.service_status) diff --git a/src/context/service/database/models/ConfigRuleModel.py b/src/context/service/database/models/ConfigRuleModel.py index c13caa7300328fa6b579291b393991a90067997e..fdc6d6f64d0042fd3c36ed2633acb9005c26ef16 100644 --- a/src/context/service/database/models/ConfigRuleModel.py +++ b/src/context/service/database/models/ConfigRuleModel.py @@ -21,10 +21,11 @@ from ._Base import _Base # Enum values should match name of field in ConfigRule message class ConfigRuleKindEnum(enum.Enum): - CUSTOM = 'custom' - ACL = 'acl' - IPOWDM = 'ipowdm' - IP_LINK = 'ip_link' + CUSTOM = 'custom' + ACL = 'acl' + IP_LINK = 'ip_link' + IPOWDM = 'ipowdm' + TAPI_LSP = 'tapi_lsp' class DeviceConfigRuleModel(_Base): __tablename__ = 'device_configrule' diff --git a/src/context/service/database/models/OpticalConfig/OpticalBandModel.py b/src/context/service/database/models/OpticalConfig/OpticalBandModel.py index 735869738053644d1d282a6b13fc9f31bc0d88e1..ba69d508d0e0dedfab2cb204a5f19b9c3f1f732e 100644 --- a/src/context/service/database/models/OpticalConfig/OpticalBandModel.py +++ b/src/context/service/database/models/OpticalConfig/OpticalBandModel.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/context/service/database/models/enums/DeviceDriver.py b/src/context/service/database/models/enums/DeviceDriver.py index faa8ace3af721368e843fd95a604f029d5534371..7f45d82ec6b264761fbb92fb19d1f21afcb868ea 100644 --- a/src/context/service/database/models/enums/DeviceDriver.py +++ b/src/context/service/database/models/enums/DeviceDriver.py @@ -43,6 +43,7 @@ class ORM_DeviceDriverEnum(enum.Enum): RYU = DeviceDriverEnum.DEVICEDRIVER_RYU GNMI_NOKIA_SRLINUX = DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX OPENROADM = DeviceDriverEnum.DEVICEDRIVER_OPENROADM + RESTCONF_OPENCONFIG = DeviceDriverEnum.DEVICEDRIVER_RESTCONF_OPENCONFIG grpc_to_enum__device_driver = functools.partial( grpc_to_enum, DeviceDriverEnum, ORM_DeviceDriverEnum) diff --git a/src/context/service/database/models/enums/ServiceType.py b/src/context/service/database/models/enums/ServiceType.py index 018574eff9f32b7b2af71c9fa452e42bf4f9d8d4..c672d160ff194f35b085971a0639f8d6c8470307 100644 --- a/src/context/service/database/models/enums/ServiceType.py +++ b/src/context/service/database/models/enums/ServiceType.py @@ -33,8 +33,9 @@ class ORM_ServiceTypeEnum(enum.Enum): L1NM = ServiceTypeEnum.SERVICETYPE_L1NM INT = ServiceTypeEnum.SERVICETYPE_INT ACL = ServiceTypeEnum.SERVICETYPE_ACL - IPOWDM = ServiceTypeEnum.SERVICETYPE_IPOWDM IP_LINK = ServiceTypeEnum.SERVICETYPE_IP_LINK + IPOWDM = ServiceTypeEnum.SERVICETYPE_IPOWDM + TAPI_LSP = ServiceTypeEnum.SERVICETYPE_TAPI_LSP grpc_to_enum__service_type = functools.partial( grpc_to_enum, ServiceTypeEnum, ORM_ServiceTypeEnum) diff --git a/src/dbscanserving/Dockerfile b/src/dbscanserving/Dockerfile index a7233cf6521cf608c08d74c234a8e60639283e4a..87c6c6fafb00bb51d97ceacffc71f2d2ea31e534 100644 --- a/src/dbscanserving/Dockerfile +++ b/src/dbscanserving/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/device/Dockerfile b/src/device/Dockerfile index d8541912838a4e7c19923a6ad10c67d909a4a622..d74263414ddea90157c8aa5baf18f5c75cda8985 100644 --- a/src/device/Dockerfile +++ b/src/device/Dockerfile @@ -43,9 +43,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components @@ -82,6 +82,8 @@ COPY src/context/__init__.py context/__init__.py COPY src/context/client/. context/client/ COPY src/monitoring/__init__.py monitoring/__init__.py COPY src/monitoring/client/. monitoring/client/ +COPY src/kpi_manager/__init__.py kpi_manager/__init__.py +COPY src/kpi_manager/client/. kpi_manager/client/ # Clone test mock tools RUN mkdir -p tests/tools/mock_ietf_actn_sdn_ctrl diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py index cfa10961f35964dac2970e398ac0425db487c5e5..24ca289d02b785022df8470f70a17628db5fa584 100644 --- a/src/device/service/Tools.py +++ b/src/device/service/Tools.py @@ -395,6 +395,13 @@ def compute_rules_to_add_delete( ACL_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/acl_ruleset[{:s}]' key_or_path = ACL_KEY_TEMPLATE.format(device_uuid, endpoint_uuid, acl_ruleset_name) context_config_rules[key_or_path] = grpc_message_to_json(config_rule.acl) # get the resource value of the acl + elif config_rule_kind == 'ip_link': + device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid # get the device name + endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid # get the endpoint name request_config_rules = [] + ip_link_ruleset_name = config_rule.ip_link.rule_set.name # get the ip_link name + IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/ip_link_ruleset[{:s}]' + key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_uuid, ip_link_ruleset_name) + context_config_rules[key_or_path] = grpc_message_to_json(config_rule.ip_link) # get the resource value of the ip_link elif config_rule_kind == 'ipowdm': device_uuid = config_rule.ipowdm.endpoint_id.device_id.device_uuid.uuid endpoint_uuid = config_rule.ipowdm.endpoint_id.endpoint_uuid.uuid @@ -404,13 +411,6 @@ def compute_rules_to_add_delete( context_config_rules[key_or_path] = grpc_message_to_json(config_rule.ipowdm) LOGGER.debug('context_config_rules [%s] = %s', key_or_path, context_config_rules[key_or_path]) - elif config_rule_kind == 'ip_link': - device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid # get the device name - endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid # get the endpoint name request_config_rules = [] - ip_link_ruleset_name = config_rule.ip_link.rule_set.name # get the ip_link name - IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/ip_link_ruleset[{:s}]' - key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_uuid, ip_link_ruleset_name) - context_config_rules[key_or_path] = grpc_message_to_json(config_rule.ip_link) # get the resource value of the ip_link request_config_rules = [] for config_rule in request.device_config.config_rules: config_rule_kind = config_rule.WhichOneof('config_rule') @@ -427,6 +427,14 @@ def compute_rules_to_add_delete( request_config_rules.append(( config_rule.action, key_or_path, grpc_message_to_json(config_rule.acl) )) + elif config_rule_kind == 'ip_link': # resource management of "ip_link" rule + device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid + endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid + IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/ip_link_ruleset' + key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_uuid) + request_config_rules.append(( + config_rule.action, key_or_path, grpc_message_to_json(config_rule.ip_link) + )) elif config_rule_kind == 'ipowdm': # resource management of "ipowdm" rule device_uuid = config_rule.ipowdm.endpoint_id.device_id.device_uuid.uuid endpoint_uuid = config_rule.ipowdm.endpoint_id.endpoint_uuid.uuid @@ -437,13 +445,13 @@ def compute_rules_to_add_delete( config_rule.action, key_or_path, grpc_message_to_json(config_rule.ipowdm) )) LOGGER.debug('context_config_rules= %s', request_config_rules) - elif config_rule_kind == 'ip_link': # resource management of "ip_link" rule - device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid - endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid - IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/ip_link_ruleset' - key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_uuid) + elif config_rule_kind == 'tapi_lsp': # resource management of "tapi_lsp" rule + device_uuid = config_rule.tapi_lsp.endpoint_id.device_id.device_uuid.uuid + endpoint_uuid = config_rule.tapi_lsp.endpoint_id.endpoint_uuid.uuid + TAPI_LSP_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/tapi_lsp_ruleset' + key_or_path = TAPI_LSP_KEY_TEMPLATE.format(device_uuid, endpoint_uuid) request_config_rules.append(( - config_rule.action, key_or_path, grpc_message_to_json(config_rule.ip_link) + config_rule.action, key_or_path, grpc_message_to_json(config_rule.tapi_lsp) )) resources_to_set : List[Tuple[str, Any]] = [] # key, value diff --git a/src/device/service/drivers/__init__.py b/src/device/service/drivers/__init__.py index 8b2526cf4f843c7a449db91a64581cb0b6c77dd2..3b427055d5c46bad52907f44e0cb19bf9dae648e 100644 --- a/src/device/service/drivers/__init__.py +++ b/src/device/service/drivers/__init__.py @@ -237,7 +237,6 @@ if LOAD_ALL_DEVICE_DRIVERS: # Real Packet Router, specifying OpenConfig Driver => use OpenConfigDriver FilterFieldEnum.DEVICE_TYPE: [ DeviceTypeEnum.OPEN_ROADM, - ], FilterFieldEnum.DRIVER : DeviceDriverEnum.DEVICEDRIVER_OPENROADM, } @@ -253,3 +252,24 @@ if LOAD_ALL_DEVICE_DRIVERS: FilterFieldEnum.DRIVER : DeviceDriverEnum.DEVICEDRIVER_QKD, } ])) + +if LOAD_ALL_DEVICE_DRIVERS: + # pylint: disable=wrong-import-position + from .restconf_openconfig.RestConfOpenConfigDriver import RestConfOpenConfigDriver + DRIVERS.append( + (RestConfOpenConfigDriver, [ + { + FilterFieldEnum.DEVICE_TYPE: [ + DeviceTypeEnum.CLIENT, + DeviceTypeEnum.DATACENTER, + DeviceTypeEnum.EMULATED_CLIENT, + DeviceTypeEnum.EMULATED_COMPUTER, + DeviceTypeEnum.EMULATED_DATACENTER, + DeviceTypeEnum.EMULATED_PACKET_FIREWALL, + DeviceTypeEnum.EMULATED_VIRTUAL_MACHINE, + DeviceTypeEnum.NETWORK, + DeviceTypeEnum.PACKET_FIREWALL, + ], + FilterFieldEnum.DRIVER : DeviceDriverEnum.DEVICEDRIVER_RESTCONF_OPENCONFIG, + } + ])) diff --git a/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py b/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py index c3c52fa857aa569361083439546b5118b8457c3f..06061a0b82f3a9c2f0c123a5350d68b0fa663457 100644 --- a/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py +++ b/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py @@ -12,12 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -import json -import logging +import json, libyang, logging from typing import Any, Dict, List, Tuple - -import libyang - +from common.proto.context_pb2 import AclDirectionEnum from ._Handler import _Handler from .YangHandler import YangHandler @@ -41,6 +38,20 @@ _OC_TFS_FWD_ACTION = {v: k for k, v in _TFS_OC_FWD_ACTION.items()} # ───────────────────────────────────────────────────────────────────────── +DIRECTION_INGRESS = { + AclDirectionEnum.ACLDIRECTION_BOTH, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_BOTH), + AclDirectionEnum.ACLDIRECTION_INGRESS, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_INGRESS), +} + +DIRECTION_EGRESS = { + AclDirectionEnum.ACLDIRECTION_BOTH, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_BOTH), + AclDirectionEnum.ACLDIRECTION_EGRESS, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_EGRESS), +} + class AclHandler(_Handler): def get_resource_key(self) -> str: @@ -59,8 +70,9 @@ class AclHandler(_Handler): rs = resource_value['rule_set'] rs_name = rs['name'] oc_type = _TFS_OC_RULE_TYPE[rs['type']] - device = resource_value['endpoint_id']['device_id']['device_uuid']['uuid'] + #device = resource_value['endpoint_id']['device_id']['device_uuid']['uuid'] iface = resource_value['endpoint_id']['endpoint_uuid']['uuid'] + direction = resource_value['direction'] if delete: path = f'/acl/acl-sets/acl-set[name={rs_name}][type={oc_type}]' @@ -77,11 +89,11 @@ class AclHandler(_Handler): y_entries = y_set.create_path('acl-entries') for entry in rs.get('entries', []): seq = int(entry['sequence_id']) - m_ = entry["match"] + m_ = entry['match'] src_address = m_.get('src_address', '0.0.0.0/0') dst_address = m_.get('dst_address', '0.0.0.0/0') - src_port = m_.get("src_port") - dst_port = m_.get("dst_port") + src_port = m_.get('src_port') + dst_port = m_.get('dst_port') act = _TFS_OC_FWD_ACTION[entry['action']['forward_action']] y_e = y_entries.create_path(f'acl-entry[sequence-id="{seq}"]') @@ -91,9 +103,12 @@ class AclHandler(_Handler): y_ipv4.create_path('config/source-address', src_address) y_ipv4.create_path('config/destination-address', dst_address) + proto = m_.get('protocol') + if proto is not None: + y_ipv4.create_path('config/protocol', int(proto)) + if src_port or dst_port: - proto = m_.get("protocol") - y_trans = y_e.create_path("transport") + y_trans = y_e.create_path('transport') if src_port: y_trans.create_path("config/source-port", int(src_port)) if dst_port: @@ -106,14 +121,41 @@ class AclHandler(_Handler): # Interface binding y_intfs = yang_acl.create_path('interfaces') y_intf = y_intfs.create_path(f'interface[id="{iface}"]') - y_ing = y_intf.create_path('ingress-acl-sets') - y_ing_set = y_ing.create_path(f'ingress-acl-set[set-name="{rs_name}"][type="{oc_type}"]') - y_ing_set.create_path('config/set-name', rs_name) - y_ing_set.create_path('config/type', oc_type) + + if direction in DIRECTION_INGRESS: + y_ingress = y_intf.create_path('ingress-acl-sets') + y_ingress_set = y_ingress.create_path(f'ingress-acl-set[set-name="{rs_name}"][type="{oc_type}"]') + y_ingress_set.create_path('config/set-name', rs_name) + y_ingress_set.create_path('config/type', oc_type) + + if direction in DIRECTION_EGRESS: + y_egress = y_intf.create_path('egress-acl-sets') + y_egress_set = y_egress.create_path(f'egress-acl-set[set-name="{rs_name}"][type="{oc_type}"]') + y_egress_set.create_path('config/set-name', rs_name) + y_egress_set.create_path('config/type', oc_type) json_data = yang_acl.print_mem('json') + #json_data = str(node.print_mem( + # fmt='json', with_siblings=True, pretty=True, + # keep_empty_containers=True, include_implicit_defaults=True + #)) LOGGER.debug('JSON data: %s', json_data) json_obj = json.loads(json_data)['openconfig-acl:acl'] + + # release generated nodes to prevent side effects + node_ifs : libyang.DNode = yang_acl.find_path('/openconfig-acl:acl/interfaces') + #if node is None: return None + LOGGER.info('node_ifs = {:s}'.format(str(node_ifs))) + node_ifs.unlink() + node_ifs.free() + + # release generated nodes to prevent side effects + node_acls : libyang.DNode = yang_acl.find_path('/openconfig-acl:acl/acl-sets') + #if node is None: return None + LOGGER.info('node_acls = {:s}'.format(str(node_acls))) + node_acls.unlink() + node_acls.free() + return '/acl', json.dumps(json_obj) def parse( # pylint: disable=too-many-locals diff --git a/src/device/service/drivers/ietf_l2vpn/TfsApiClient.py b/src/device/service/drivers/ietf_l2vpn/TfsApiClient.py index ac210671608f5f764e82c3a3288459f086d080ac..1b906b82000f5f8ab421e2bb34fa6686468a8f5d 100644 --- a/src/device/service/drivers/ietf_l2vpn/TfsApiClient.py +++ b/src/device/service/drivers/ietf_l2vpn/TfsApiClient.py @@ -47,6 +47,9 @@ MAPPING_DRIVER = { 'DEVICEDRIVER_SMARTNIC' : 16, 'DEVICEDRIVER_MORPHEUS' : 17, 'DEVICEDRIVER_RYU' : 18, + 'DEVICEDRIVER_GNMI_NOKIA_SRLINUX' : 19, + 'DEVICEDRIVER_OPENROADM' : 20, + 'DEVICEDRIVER_RESTCONF_OPENCONFIG' : 21, } LOGGER = logging.getLogger(__name__) diff --git a/src/device/service/drivers/ietf_l3vpn/IetfL3VpnDriver.py b/src/device/service/drivers/ietf_l3vpn/IetfL3VpnDriver.py index c1cf51536d7a4f09eefba26a836ef13d0e2f64c8..42ab2fedcb36ebd5b7d4e68a5c443e9d0acd6e82 100644 --- a/src/device/service/drivers/ietf_l3vpn/IetfL3VpnDriver.py +++ b/src/device/service/drivers/ietf_l3vpn/IetfL3VpnDriver.py @@ -188,21 +188,59 @@ class IetfL3VpnDriver(_Driver): results = [] if len(resources) == 0: return results with self.__lock: - for i, resource in enumerate(resources): - str_resource_name = 'resource_key[#{:d}]'.format(i) - LOGGER.info('[SetConfig] resource = {:s}'.format(str(resource))) - resource_key, resource_value = resource - - if not RE_IETF_L3VPN_DATA.match(resource_key): continue - - try: - resource_value = json.loads(resource_value) - self.tac.create_connectivity_service(resource_value) - results.append((resource_key, True)) - except Exception as e: - MSG = 'Unhandled error processing SET {:s}: resource_key({:s})' - LOGGER.exception(MSG.format(str_resource_name, str(resource_key))) - results.append((resource_key, e)) + if 'ipowdm' in str(resources): + for resource in resources: + if 'ipowdm' in str(resource): + try: + create_request(resource) + LOGGER.info('Request created successfully') + results.append((resource, True)) + except Exception as e: + MSG = 'Invalid resource_value type: expected dict, got {:s}' + results.append((resource, e)) + else: + for resource in resources: + resource_key, resource_value = resource + if RE_IETF_L3VPN_OPERATION.match(resource_key): + operation_type = json.loads(resource_value)["type"] + results.append((resource_key, True)) + break + else: + raise Exception("operation type not found in resources") + for resource in resources: + LOGGER.info('resource = {:s}'.format(str(resource))) + resource_key, resource_value = resource + if not RE_IETF_L3VPN_DATA.match(resource_key): + continue + try: + resource_value = json.loads(resource_value) + + # if service_exists(self.__tfs_nbi_root, self.__auth, service_uuid): + # exc = NotImplementedError( + # "IETF L3VPN Service Update is still not supported" + # ) + # results.append((resource[0], exc)) + # continue + if operation_type == "create": + service_id = resource_value["ietf-l3vpn-svc:l3vpn-svc"][ + "vpn-services" + ]["vpn-service"][0]["vpn-id"] + self.tac.create_connectivity_service(resource_value) + elif operation_type == "update": + service_id = resource_value["ietf-l3vpn-svc:l3vpn-svc"][ + "vpn-services" + ]["vpn-service"][0]["vpn-id"] + self.tac.update_connectivity_service(resource_value) + else: + raise Exception("operation type not supported") + results.append((resource_key, True)) + except Exception as e: # pylint: disable=broad-except + LOGGER.exception( + "Unhandled error processing resource_key({:s})".format( + str(resource_key) + ) + ) + results.append((resource_key, e)) return results diff --git a/src/device/service/drivers/ietf_l3vpn/TfsApiClient.py b/src/device/service/drivers/ietf_l3vpn/TfsApiClient.py index de695685cbf9b85d3e3f020df3f83d5acd0f1fdf..c984c1adf2200b6150a5b59e416c85bf0ec7cdb3 100644 --- a/src/device/service/drivers/ietf_l3vpn/TfsApiClient.py +++ b/src/device/service/drivers/ietf_l3vpn/TfsApiClient.py @@ -53,6 +53,9 @@ MAPPING_DRIVER = { 'DEVICEDRIVER_SMARTNIC' : 16, 'DEVICEDRIVER_MORPHEUS' : 17, 'DEVICEDRIVER_RYU' : 18, + 'DEVICEDRIVER_GNMI_NOKIA_SRLINUX' : 19, + 'DEVICEDRIVER_OPENROADM' : 20, + 'DEVICEDRIVER_RESTCONF_OPENCONFIG' : 21, } diff --git a/src/device/service/drivers/ietf_l3vpn/templates/ipowdm.json b/src/device/service/drivers/ietf_l3vpn/templates/ipowdm.json index 00cc6cf150fc53f8205f512ba1966678b6c2875b..ac22e80c6c203bd63e4af4eddb8d49bdd4de2b03 100644 --- a/src/device/service/drivers/ietf_l3vpn/templates/ipowdm.json +++ b/src/device/service/drivers/ietf_l3vpn/templates/ipowdm.json @@ -46,4 +46,4 @@ ]} } ] -} \ No newline at end of file +} diff --git a/src/device/service/drivers/ietf_l3vpn/templates/tools.py b/src/device/service/drivers/ietf_l3vpn/templates/tools.py index 77cdc02e1bd377c1a0979cea36b32b799974b4af..603296ee57faff8de9214bb56a13de7948278aa2 100644 --- a/src/device/service/drivers/ietf_l3vpn/templates/tools.py +++ b/src/device/service/drivers/ietf_l3vpn/templates/tools.py @@ -11,15 +11,230 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from types import SimpleNamespace -import os + import json import logging - +import os import requests +from concurrent.futures import ThreadPoolExecutor LOGGER = logging.getLogger(__name__) +HEADERS = { + "Accept": "application/yang-data+json", + "Content-Type": "application/yang-data+json" +} + +executor = ThreadPoolExecutor() + +site_template = { + "site-id": "", + "devices": { + "device": [ + { + "device-id": "", + "location": "" + } + ] + }, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "", + "device-reference": "", + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "", + "customer-address": "", + "prefix-length": "" + } + } + }, + "vpn-attachment": { + "vpn-id": "vpn-p2mp" + }, + "site-network-access-type": "ietf-l3vpn-svc:multipoint" + } + ] + } +} + +def generate_l3vpn_template_pair(src, dst, vpn_id): + + return { + "ietf-l3vpn-svc:l3vpn-svc": { + "vpn-services": { + "vpn-service": [{"vpn-id": vpn_id}] + }, + "sites": { + "site": [ + { + "site-id": src["uuid"], + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": f"location-{src['uuid']}"}]}, + "devices": {"device": [{ + "device-id": "10.0.30.1", + "location": f"location-{src['uuid']}" + }]}, + "routing-protocols": {"routing-protocol": [{ + "type": "ietf-l3vpn-svc:static", + "static": { + "cascaded-lan-prefixes": { + "ipv4-lan-prefixes": [ + { + "lan": "128.32.10.1/24", + "lan-tag": f"vlan{src['vlan_id']}", + "next-hop": "10.0.30.10" + } + ] + } + } + }]}, + "site-network-accesses": { + "site-network-access": [{ + "site-network-access-id": f"{src['vlan_id']}", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "10.0.30.1", + "vpn-attachment": { + "vpn-id": vpn_id, "site-role": "ietf-l3vpn-svc:spoke-role" + }, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "10.0.30.254", + "customer-address": "10.0.30.10", + "prefix-length": 24 + } + } + }, + "routing-protocols": {"routing-protocol": [{ + "type": "ietf-l3vpn-svc:static", + "static": { + "cascaded-lan-prefixes": { + "ipv4-lan-prefixes": [ + { + "lan": "172.1.101.1/24", + "lan-tag": "vlan100", + "next-hop": "10.0.30.254" + } + ] + } + } + }]}, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": { + "qos-profile": { + "classes": { + "class": [ + { + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": { + "latency-boundary": 10 + }, + "bandwidth": { + "guaranteed-bw-percent": 100 + } + } + ] + } + } + } + } + }] + } + }, + { + "site-id": dst["uuid"], + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": f"location-{dst['uuid']}"}]}, + "devices": {"device": [{ + "device-id": "10.0.20.1", + "location": f"location-{dst['uuid']}" + }]}, + "routing-protocols": {"routing-protocol": [{ + "type": "ietf-l3vpn-svc:static", + "static": { + "cascaded-lan-prefixes": { + "ipv4-lan-prefixes": [ + { + "lan": "172.1.101.1/24", + "lan-tag": "vlan200", + "next-hop": "172.10.33.2" + } + ] + } + } + }]}, + "site-network-accesses": { + "site-network-access": [{ + "site-network-access-id": f"{dst['vlan_id']}", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "10.0.20.1", + "vpn-attachment": { + "vpn-id": vpn_id, "site-role": "ietf-l3vpn-svc:hub-role" + }, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "172.10.33.254", + "customer-address": "172.10.33.2", + "prefix-length": 24 + } + } + }, + "routing-protocols": {"routing-protocol": [{ + "type": "ietf-l3vpn-svc:static", + "static": { + "cascaded-lan-prefixes": { + "ipv4-lan-prefixes": [ + { + "lan": "128.32.10.1/24", + "lan-tag": "vlan200", + "next-hop": "172.10.33.254" + } + ] + } + } + }]}, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": { + "qos-profile": { + "classes": { + "class": [ + { + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": { + "latency-boundary": 10 + }, + "bandwidth": { + "guaranteed-bw-percent": 100 + } + } + ] + } + } + } + } + }] + } + } + ] + } + } + } + def create_request(resource_value): """ Create and send HTTP request based on a JSON template and provided resource value. The JSON template is expected to be in the same directory as this script, named 'ipowdm.json'. @@ -46,52 +261,61 @@ def create_request(resource_value): with open(json_path, 'r', encoding='utf-8') as f: template = json.load(f) - LOGGER.info("Sending POST DSTINATION request with payload: %s", json.dumps(template, indent=2)) + node_src = resource_value[1]['rule_set']['src'][0] + src = [{ + 'uuid': node_src["uuid"], + 'ip_address': node_src["ip_address"], + 'ip_mask': node_src["ip_mask"], + 'vlan_id': node_src["vlan_id"] + }] + dst_list = resource_value[1]['rule_set']['dst'] + dsts = [] + for node in dst_list: + dsts.append({ + 'uuid': node["uuid"], + 'ip_address': node["ip_address"], + 'ip_mask': node["ip_mask"], + 'vlan_id': node["vlan_id"] + }) + sites_input = src + dsts - response = FakeResponse() - # tfs_post(template) + components = resource_value[1]['rule_set']['transceiver']['components'] + for i, device in enumerate(components): + name = sites_input[i]['uuid'] - return response + if name == "T2.1":device["frequency"]= 195000000 + if name == "T1.1":device["frequency"]= 195006250 + if name == "T1.2":device["frequency"]= 195018750 + if name == "T1.3":device["frequency"]= 195031250 + + LOGGER.debug(f"NODE TO CONFIGURE: \n{name}: {json.dumps(device, indent=2)}") + response = patch_optical_channel_frequency(device, name) + LOGGER.debug(f"RESPONSE :\n {response}") + templates = [] + for dst in dsts: + vpn = "L3VPN_"+src[0]['uuid']+"_"+dst['uuid'] + templates.append(generate_l3vpn_template_pair(src[0], dst,vpn)) + + url = "http://192.168.202.254:80/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" + headers = { + 'accept': 'application/json', + 'Content-Type': 'application/json' + } -class FakeResponse: - """_Fake response object for testing purposes.""" - def __init__(self): - self.ok = True - self.status_code = 200 - self.text = '{"message": "OK"}' - - def json(self): - """Return a sample JSON response.""" - return {"message": "OK"} -def tfs_post(request): - """ - Send a POST request to the TeraFlow Service Orchestrator. - - Args: - ip (str): IP address of the TeraFlow Service Orchestrator. - request (dict): The request payload to be sent. - - Returns: - dict: The response from the TeraFlow Service Orchestrator. - """ - user="admin" - password="admin" - token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://10.95.86.62/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if"csrf_token" in str(item): - string=str(item).split(' List[Tuple[str, Dict[str, Any]]]: elif xml_interface.find('oci:state/oci:type', namespaces=NAMESPACES) is not None: interface_type = xml_interface.find('oci:state/oci:type', namespaces=NAMESPACES) else: continue - + interface_name = xml_interface.find('oci:name', namespaces=NAMESPACES) if interface_name is None or interface_name.text is None: continue add_value_from_tag(interface, 'name', interface_name) - + # Get the type of interface according to the vendor's type if 'ianaift:' in interface_type.text: interface_type.text = interface_type.text.replace('ianaift:', '') #ADVA @@ -102,10 +102,10 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: address = xml_ipv6_address.find('ociip:state/ociip:ip', namespaces=NAMESPACES) add_value_from_tag(subinterface, 'address_ipv6', address) - + prefix = xml_ipv6_address.find('ociip:state/ociip:prefix-length', namespaces=NAMESPACES) add_value_from_tag(subinterface, 'address_prefix_v6', prefix, cast=int) - + if len(subinterface) == 0: continue resource_key = '/interface[{:s}]/subinterface[{:s}]'.format(interface['name'], str(subinterface['index'])) response.append((resource_key, subinterface)) diff --git a/src/device/service/drivers/openconfig/templates/Inventory.py b/src/device/service/drivers/openconfig/templates/Inventory.py index d54d21d47aa1ed7e821e2c8572cc19f481a406f7..cfa31d9ba50a816547304a28da33c0e75f23e14f 100644 --- a/src/device/service/drivers/openconfig/templates/Inventory.py +++ b/src/device/service/drivers/openconfig/templates/Inventory.py @@ -25,30 +25,30 @@ XPATH_PORTS = "//ocp:components/ocp:component" #Method Name: parse #Parameters: - + - xml_data: [ET.Element] Represents the XML data to be parsed. # Functionality: The parse function of the inventerio class has the functionality to parse - an XML document represented by the xml_data parameter and extract specific - information from the XML elements, namely the relevant characteristics of the - components. + an XML document represented by the xml_data parameter and extract specific + information from the XML elements, namely the relevant characteristics of the + components. To generate the template the following steps are performed: 1) An empty list called response is created to store the results of the analysis. - 2) Iterate over the XML elements that match the pattern specified by the XPATH_PORTS + 2) Iterate over the XML elements that match the pattern specified by the XPATH_PORTS expression. These elements represent components in the XML document. 3) For each component element: - A dictionary called inventory is initialized that will store the information extracted + A dictionary called inventory is initialized that will store the information extracted from the component.The values of the relevant XML elements are extracted and added to the dictionary. -#Return: - List[Tuple[str, Dict[str, Any]]] The response list containing the tuples (path, dictionary) +#Return: + List[Tuple[str, Dict[str, Any]]] The response list containing the tuples (path, dictionary) with the information extracted from the XML document components is returned. """ @@ -59,19 +59,19 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: LOGGER.info('xml_component inventario = {:s}'.format(str(ET.tostring(xml_component)))) inventory = {} inventory['parent-component-references'] = '' - inventory['name'] = '' + inventory['name'] = '' inventory['class'] = '' inventory['attributes'] = {} component_reference = [] component_name = xml_component.find('ocp:name', namespaces=NAMESPACES) if component_name is None or component_name.text is None: continue - add_value_from_tag(inventory, 'name', component_name) + add_value_from_tag(inventory, 'name', component_name) component_description = xml_component.find('ocp:state/ocp:description', namespaces=NAMESPACES) if not component_description is None: add_value_from_tag(inventory['attributes'], 'description', component_description) - + component_location = xml_component.find('ocp:state/ocp:location', namespaces=NAMESPACES) if not component_location is None: add_value_from_tag(inventory['attributes'], 'location', component_location) @@ -79,12 +79,12 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: component_id = xml_component.find('ocp:state/ocp:id', namespaces=NAMESPACES) if not component_id is None: add_value_from_tag(inventory['attributes'], 'id', component_id) - + component_type = xml_component.find('ocp:state/ocp:type', namespaces=NAMESPACES) if component_type is not None: component_type.text = component_type.text.replace('oc-platform-types:','') add_value_from_tag(inventory, 'class', component_type) - + if inventory['class'] == 'CPU' or inventory['class'] == 'STORAGE': continue component_empty = xml_component.find('ocp:state/ocp:empty', namespaces=NAMESPACES) @@ -92,7 +92,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: add_value_from_tag(inventory['attributes'], 'empty', component_empty) component_parent = xml_component.find('ocp:state/ocp:parent', namespaces=NAMESPACES) - if not component_parent is None: + if not component_parent is None: add_value_from_tag(inventory, 'parent-component-references', component_parent) component_HW = xml_component.find('ocp:state/ocp:hardware-version', namespaces=NAMESPACES) @@ -114,7 +114,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: component_mfg_name = xml_component.find('ocp:state/ocp:mfg-name', namespaces=NAMESPACES) if not component_mfg_name is None: add_value_from_tag(inventory['attributes'], 'mfg-name', component_mfg_name) - + component_removable = xml_component.find('ocp:state/ocp:removable', namespaces=NAMESPACES) if not component_removable is None: add_value_from_tag(inventory['attributes'], 'removable', component_removable) @@ -127,10 +127,10 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: component_serial_t = xml_component.find('ocptr:transceiver/ocptr:state/ocptr:serial-no', namespaces=NAMESPACES) if not component_serial_t is None: add_value_from_tag(inventory['attributes'], 'serial-num', component_serial_t) - + component_present = xml_component.find('ocptr:transceiver/ocptr:state/ocptr:present', namespaces=NAMESPACES) if component_present is not None and 'NOT_PRESENT' in component_present.text: continue - + component_vendor = xml_component.find('ocptr:transceiver/ocptr:state/ocptr:vendor', namespaces=NAMESPACES) if not component_vendor is None: add_value_from_tag(inventory['attributes'], 'vendor', component_vendor) @@ -138,7 +138,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: if not component_connector is None: component_connector.text = component_connector.text.replace('oc-opt-types:','') add_value_from_tag(inventory['attributes'], 'connector-type', component_connector) - + component_form = xml_component.find('ocptr:transceiver/ocptr:state/ocptr:form-factor', namespaces=NAMESPACES) if not component_form is None: component_form.text = component_form.text.replace('oc-opt-types:','') @@ -148,7 +148,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: parent_types[inventory['parent-component-references']] = len(parent_types) + 1 component_reference.extend([parent_types[inventory['parent-component-references']]]) - + response.append(('/inventory/{:s}'.format(inventory['name']), inventory)) for tupla in response: @@ -156,5 +156,5 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: component_reference.extend([tupla[1]['class']]) inventory['component-reference'] = component_reference - + return response diff --git a/src/device/service/drivers/openconfig/templates/Namespace.py b/src/device/service/drivers/openconfig/templates/Namespace.py index 4604481bb666365752e33e9a8ef3bcf8523e6d1c..9455ed3b384452a1f21f192a12233cacae4542f3 100644 --- a/src/device/service/drivers/openconfig/templates/Namespace.py +++ b/src/device/service/drivers/openconfig/templates/Namespace.py @@ -13,22 +13,23 @@ # limitations under the License. -NAMESPACE_NETCONF = 'urn:ietf:params:xml:ns:netconf:base:1.0' +NAMESPACE_NETCONF = 'urn:ietf:params:xml:ns:netconf:base:1.0' -NAMESPACE_ACL = 'http://openconfig.net/yang/acl' -NAMESPACE_BGP_POLICY = 'http://openconfig.net/yang/bgp-policy' -NAMESPACE_INTERFACES = 'http://openconfig.net/yang/interfaces' -NAMESPACE_INTERFACES_IP = 'http://openconfig.net/yang/interfaces/ip' -NAMESPACE_NETWORK_INSTANCE = 'http://openconfig.net/yang/network-instance' -NAMESPACE_NETWORK_INSTANCE_TYPES = 'http://openconfig.net/yang/network-instance-types' -NAMESPACE_OPENCONFIG_TYPES = 'http://openconfig.net/yang/openconfig-types' -NAMESPACE_PLATFORM = 'http://openconfig.net/yang/platform' -NAMESPACE_PLATFORM_PORT = 'http://openconfig.net/yang/platform/port' -NAMESPACE_POLICY_TYPES = 'http://openconfig.net/yang/policy-types' -NAMESPACE_POLICY_TYPES_2 = 'http://openconfig.net/yang/policy_types' -NAMESPACE_ROUTING_POLICY = 'http://openconfig.net/yang/routing-policy' -NAMESPACE_VLAN = 'http://openconfig.net/yang/vlan' -NAMESPACE_PLATFORM_TRANSCEIVER = 'http://openconfig.net/yang/platform/transceiver' +NAMESPACE_ACL = 'http://openconfig.net/yang/acl' +NAMESPACE_BGP_POLICY = 'http://openconfig.net/yang/bgp-policy' +NAMESPACE_INTERFACES = 'http://openconfig.net/yang/interfaces' +NAMESPACE_INTERFACES_IP = 'http://openconfig.net/yang/interfaces/ip' +NAMESPACE_NETWORK_INSTANCE = 'http://openconfig.net/yang/network-instance' +NAMESPACE_NETWORK_INSTANCE_TYPES = 'http://openconfig.net/yang/network-instance-types' +NAMESPACE_OPENCONFIG_TYPES = 'http://openconfig.net/yang/openconfig-types' +NAMESPACE_PLATFORM = 'http://openconfig.net/yang/platform' +NAMESPACE_PLATFORM_PORT = 'http://openconfig.net/yang/platform/port' +NAMESPACE_POLICY_TYPES = 'http://openconfig.net/yang/policy-types' +NAMESPACE_POLICY_TYPES_2 = 'http://openconfig.net/yang/policy_types' +NAMESPACE_ROUTING_POLICY = 'http://openconfig.net/yang/routing-policy' +NAMESPACE_VLAN = 'http://openconfig.net/yang/vlan' +NAMESPACE_PLATFORM_TRANSCEIVER = 'http://openconfig.net/yang/platform/transceiver' +NAMESPACE_TERMINAL_DEVICE_DIGITAL_SUBCARRIERS = 'http://openconfig.net/yang/terminal-device-digital-subcarriers' NAMESPACES = { 'nc' : NAMESPACE_NETCONF, @@ -46,4 +47,5 @@ NAMESPACES = { 'ocrp' : NAMESPACE_ROUTING_POLICY, 'ocv' : NAMESPACE_VLAN, 'ocptr': NAMESPACE_PLATFORM_TRANSCEIVER, + 'octds': NAMESPACE_TERMINAL_DEVICE_DIGITAL_SUBCARRIERS, } diff --git a/src/device/service/drivers/openconfig/templates/NetworkInstances.py b/src/device/service/drivers/openconfig/templates/NetworkInstances.py index 7fee1b76137e9d0d55451d2326c2a38c2d51d79e..bab097d79f15c6c4cf46c28b12bac55d496b4324 100644 --- a/src/device/service/drivers/openconfig/templates/NetworkInstances.py +++ b/src/device/service/drivers/openconfig/templates/NetworkInstances.py @@ -48,7 +48,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: ni_type.text = ni_type.text.replace('oc-ni-types:','') add_value_from_tag(network_instance, 'type', ni_type) ''' - + if xml_network_instance.find('ocni:config/ocni:type', namespaces=NAMESPACES) is not None: ni_type = xml_network_instance.find('ocni:config/ocni:type', namespaces=NAMESPACES) elif xml_network_instance.find('oci:state/oci:type', namespaces=NAMESPACES) is not None: @@ -60,7 +60,7 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: elif 'idx'in ni_type.text: ni_type.text = ni_type.text.replace('idx:', '') #CISCO add_value_from_tag(network_instance, 'type', ni_type) - + ni_router_id = xml_network_instance.find('ocni:config/ocni:router-id', namespaces=NAMESPACES) add_value_from_tag(network_instance, 'router_id', ni_router_id) @@ -145,10 +145,10 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]: name_iface = xml_interface.find('ocni:config/ocni:interface', namespaces=NAMESPACES) if name_iface is None or name_iface.text is None: continue add_value_from_tag(interface, 'name_iface', name_iface) - + name_subiface = xml_interface.find('ocni:config/ocni:subinterface', namespaces=NAMESPACES) add_value_from_tag(interface, 'name_subiface', name_subiface) - + resource_key = '/network_instance[{:s}]/interface[{:s}]'.format( network_instance['name'], interface['name_iface']) response.append((resource_key, interface)) diff --git a/src/device/service/drivers/openconfig/templates/Tools.py b/src/device/service/drivers/openconfig/templates/Tools.py index 2bf9535b3965aedf372a122b3d2c66678a419761..dc1d9ae0c5fd1288c4f9e3751efd106eca487c04 100644 --- a/src/device/service/drivers/openconfig/templates/Tools.py +++ b/src/device/service/drivers/openconfig/templates/Tools.py @@ -33,20 +33,20 @@ def add_value_from_collection(target : Dict, field_name: str, field_value : Coll """ # Method Name: generate_templates - + # Parameters: - resource_key: [str] Variable to identify the rule to be executed. - resource_value: [str] Variable with the configuration parameters of the rule to be executed. - delete: [bool] Variable to identify whether to create or delete the rule. - vendor: [str] Variable to identify the vendor of the equipment to be configured. - + # Functionality: - This method generates the template to configure the equipment using pyangbind. + This method generates the template to configure the equipment using pyangbind. To generate the template the following steps are performed: 1) Get the first parameter of the variable "resource_key" to identify the main path of the rule. 2) Search for the specific configuration path - 3) Call the method with the configuration parameters (resource_data variable). - + 3) Call the method with the configuration parameters (resource_data variable). + # Return: [dict] Set of templates generated according to the configuration rule """ @@ -86,7 +86,7 @@ def generate_templates(resource_key: str, resource_value: str, delete: bool,vend result_templates.append(create_rp_statement(data, delete)) elif "acl_ruleset" in resource_key: # acl rules management result_templates.extend(acl_mgmt(resource_value,vendor, delete)) - else: + else: if "ip_link" in resource_key: result_templates.append(ip_link_mgmt(resource_value,vendor,delete)) diff --git a/src/device/service/drivers/openconfig/templates/__init__.py b/src/device/service/drivers/openconfig/templates/__init__.py index 3704791d86a003d938d1831af8f15b6480c7166a..eca314a842be1f87056267affee7b4229fd5bb51 100644 --- a/src/device/service/drivers/openconfig/templates/__init__.py +++ b/src/device/service/drivers/openconfig/templates/__init__.py @@ -136,6 +136,14 @@ def compose_config( # template generation templates.append(JINJA_ENV.get_template(enable_ingress_filter_path)) templates.append(JINJA_ENV.get_template(acl_entry_path)) templates.append(JINJA_ENV.get_template(acl_ingress_path)) + elif "pluggable" in resource_key: # MANAGING DSCM (Digital Subcarrier Modules) + # Use generic pluggable template for all devices (hub and leaf) + # Resource key format: /pluggable/{template_index}/config + template_name = '{:s}/edit_config.xml'.format(RE_REMOVE_FILTERS.sub('', resource_key)) + templates.append(JINJA_ENV.get_template(template_name)) + LOGGER.info(f"Loading DSCM template: {template_name}") + + data : Dict[str, Any] = json.loads(resource_value) else: template_name = '{:s}/edit_config.xml'.format(RE_REMOVE_FILTERS.sub('', resource_key)) templates.append(JINJA_ENV.get_template(template_name)) diff --git a/src/device/service/drivers/openconfig/templates/pluggable/1/config/edit_config.xml b/src/device/service/drivers/openconfig/templates/pluggable/1/config/edit_config.xml new file mode 100644 index 0000000000000000000000000000000000000000..4149bccdac876b92428b96926727a9335fc87d54 --- /dev/null +++ b/src/device/service/drivers/openconfig/templates/pluggable/1/config/edit_config.xml @@ -0,0 +1,31 @@ + + + {{name}} + + {% if operation is defined and operation != 'delete' %} + + {% if frequency is defined %}{{frequency}}{% endif %} + {% if target_output_power is defined %}{{target_output_power}}{% endif %} + {% if operational_mode is defined %}{{operational_mode}}{% endif %} + + {% if digital_sub_carriers_group is defined and digital_sub_carriers_group %} + {% for group in digital_sub_carriers_group %} + + {{group.digital_sub_carriers_group_id}} + + {% if group.digital_sub_carrier_id is defined and group.digital_sub_carrier_id %} + {% for sub_carrier in group.digital_sub_carrier_id %} + + {{sub_carrier.sub_carrier_id}} + {{sub_carrier.active}} + + {% endfor %} + {% endif %} + + {% endfor %} + {% endif %} + + {% endif %} + + + diff --git a/src/device/service/drivers/openroadm/OpenROADMDriver.py b/src/device/service/drivers/openroadm/OpenROADMDriver.py index f1a388b84b079d28fb03cd2fe0cccd940fecff3e..8468d472352b37629f499ef6e89549143d496a8b 100644 --- a/src/device/service/drivers/openroadm/OpenROADMDriver.py +++ b/src/device/service/drivers/openroadm/OpenROADMDriver.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/device/service/drivers/openroadm/RetryDecorator.py b/src/device/service/drivers/openroadm/RetryDecorator.py index df37414c15fa2be63ba74e6c6f9955749b15302a..be86498fed535a692530737f93a3444684930d16 100644 --- a/src/device/service/drivers/openroadm/RetryDecorator.py +++ b/src/device/service/drivers/openroadm/RetryDecorator.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/device/service/drivers/openroadm/Tools.py b/src/device/service/drivers/openroadm/Tools.py index 45407d38d28892f9bbe049520cc3d615ec1bc965..33c755d7156f01373a4e84aa989da1d6c53c782f 100644 --- a/src/device/service/drivers/openroadm/Tools.py +++ b/src/device/service/drivers/openroadm/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/device/service/drivers/openroadm/templates/Provisioning/common.py b/src/device/service/drivers/openroadm/templates/Provisioning/common.py index 6edaefc2fd9339dc368cefd2ac8a49334ba0c5c5..55d404f8dc3d55dc84468ad809e22a2853413672 100644 --- a/src/device/service/drivers/openroadm/templates/Provisioning/common.py +++ b/src/device/service/drivers/openroadm/templates/Provisioning/common.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/device/service/drivers/openroadm/templates/Provisioning/openroadm.py b/src/device/service/drivers/openroadm/templates/Provisioning/openroadm.py index 32c03b026e98c75d529b747013219fc204eda285..ef51d3a05c585e1b5bfd03f402e5054370ed7c7a 100644 --- a/src/device/service/drivers/openroadm/templates/Provisioning/openroadm.py +++ b/src/device/service/drivers/openroadm/templates/Provisioning/openroadm.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/device/service/drivers/optical_tfs/TfsApiClient.py b/src/device/service/drivers/optical_tfs/TfsApiClient.py index 79802fcf6d2708fe12fceccd68c0b1460c1e5ef8..59126c7b1734a3cc298c26cfdebc5aaa904e02b9 100644 --- a/src/device/service/drivers/optical_tfs/TfsApiClient.py +++ b/src/device/service/drivers/optical_tfs/TfsApiClient.py @@ -55,6 +55,9 @@ MAPPING_DRIVER = { 'DEVICEDRIVER_SMARTNIC' : 16, 'DEVICEDRIVER_MORPHEUS' : 17, 'DEVICEDRIVER_RYU' : 18, + 'DEVICEDRIVER_GNMI_NOKIA_SRLINUX' : 19, + 'DEVICEDRIVER_OPENROADM' : 20, + 'DEVICEDRIVER_RESTCONF_OPENCONFIG' : 21, } LOGGER = logging.getLogger(__name__) diff --git a/src/device/service/drivers/restconf_openconfig/RestConfOpenConfigDriver.py b/src/device/service/drivers/restconf_openconfig/RestConfOpenConfigDriver.py new file mode 100644 index 0000000000000000000000000000000000000000..b940f27baf16774f1648b60ce010b98d7d7eb8f2 --- /dev/null +++ b/src/device/service/drivers/restconf_openconfig/RestConfOpenConfigDriver.py @@ -0,0 +1,173 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import copy, json, logging, re, requests, threading +from typing import Any, Iterator, List, Optional, Tuple, Union +from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method +from common.tools.rest_conf.client.RestConfClient import RestConfClient +from common.type_checkers.Checkers import chk_string, chk_type +from device.service.driver_api._Driver import ( + _Driver, RESOURCE_ACL, RESOURCE_ENDPOINTS, RESOURCE_INTERFACES +) +from .handlers.ComponentsHandler import ComponentsHandler +from .handlers.AclRuleSetHandler import AclRuleSetHandler + + +ALL_RESOURCE_KEYS = [ + RESOURCE_ACL, + RESOURCE_ENDPOINTS, + RESOURCE_INTERFACES, +] + + +RE_ACL_RULESET = re.compile( + r'^\/device\[([^\]]+)\]\/endpoint\[([^\]]+)\]\/acl\_ruleset\[([^\]]+)\]$' +) + +def parse_resource_key(resource_key : str) -> Optional[Tuple[str, str, str]]: + re_match_acl_ruleset = RE_ACL_RULESET.match(resource_key) + if re_match_acl_ruleset is None: return None + device_key, endpoint_key, acl_ruleset_name = re_match_acl_ruleset.groups() + return device_key, endpoint_key, acl_ruleset_name + + + +DRIVER_NAME = 'restconf_openconfig' +METRICS_POOL = MetricsPool('Device', 'Driver', labels={'driver': DRIVER_NAME}) + + +class RestConfOpenConfigDriver(_Driver): + def __init__(self, address : str, port : int, **settings) -> None: + super().__init__(DRIVER_NAME, address, port, **settings) + logger_prefix = '{:s}:[{:s}:{:s}]'.format( + str(__name__), str(self.address), str(self.port) + ) + self.__logger = logging.getLogger(logger_prefix) + self.__lock = threading.Lock() + self.__started = threading.Event() + self.__terminate = threading.Event() + + restconf_settings = copy.deepcopy(settings) + restconf_settings['logger'] = logging.getLogger(logger_prefix + '.RestConfClient_v1') + + self._rest_conf_client = RestConfClient(address, port=port, **restconf_settings) + self._handler_components = ComponentsHandler(self._rest_conf_client) + self._handler_acl_ruleset = AclRuleSetHandler(self._rest_conf_client) + + def Connect(self) -> bool: + with self.__lock: + if self.__started.is_set(): return True + try: + self._rest_conf_client._discover_base_url() + except requests.exceptions.Timeout: + self.__logger.exception('Timeout exception checking connectivity') + return False + except Exception: # pylint: disable=broad-except + self.__logger.exception('Unhandled exception checking connectivity') + return False + else: + self.__started.set() + return True + + def Disconnect(self) -> bool: + with self.__lock: + self.__terminate.set() + if not self.__started.is_set(): return True + return True + + @metered_subclass_method(METRICS_POOL) + def GetInitialConfig(self) -> List[Tuple[str, Any]]: + with self.__lock: + return [] + + @metered_subclass_method(METRICS_POOL) + def GetConfig(self, resource_keys : List[str] = []) -> List[Tuple[str, Union[Any, None, Exception]]]: + chk_type('resources', resource_keys, list) + results = list() + with self.__lock: + if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS + for i, resource_key in enumerate(resource_keys): + str_resource_name = 'resource_key[#{:d}]'.format(i) + try: + chk_string(str_resource_name, resource_key, allow_empty=False) + if resource_key == RESOURCE_ENDPOINTS: + results.extend(self._handler_components.get()) + elif resource_key == RESOURCE_ACL: + results.extend(self._handler_acl_ruleset.get()) + else: + parts = parse_resource_key(resource_key) + if parts is None: continue + device_key, endpoint_key, acl_ruleset_name = parts + results.extend(self._handler_acl_ruleset.get(acl_ruleset_name=acl_ruleset_name)) + except Exception as e: + MSG = 'Error processing resource_key({:s}, {:s})' + self.__logger.exception(MSG.format(str_resource_name, str(resource_key))) + results.append((resource_key, e)) # if processing fails, store the exception + + return results + + @metered_subclass_method(METRICS_POOL) + def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]: + chk_type('resources', resources, list) + if len(resources) == 0: return [] + + results = [] + with self.__lock: + for resource_key, resource_value in resources: + self.__logger.info('resource: key({:s}) => value({:s})'.format(str(resource_key), str(resource_value))) + try: + if isinstance(resource_value, str): resource_value = json.loads(resource_value) + if parse_resource_key(resource_key) is None: continue + results.append(self._handler_acl_ruleset.update(resource_value)) + except Exception as e: + results.append(e) + + return results + + @metered_subclass_method(METRICS_POOL) + def DeleteConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]: + chk_type('resources', resources, list) + if len(resources) == 0: return [] + + results = [] + with self.__lock: + for resource_key, resource_value in resources: + self.__logger.info('resource: key({:s}) => value({:s})'.format(str(resource_key), str(resource_value))) + try: + #if isinstance(resource_value, str): resource_value = json.loads(resource_value) + resource_key_parts = parse_resource_key(resource_key) + if resource_key_parts is None: continue + _, _, acl_ruleset_name = resource_key_parts + results.append(self._handler_acl_ruleset.delete(acl_ruleset_name)) + except Exception as e: + results.append(e) + + return results + + @metered_subclass_method(METRICS_POOL) + def SubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]: + # TODO: RESTCONF OPENCONFIG does not support monitoring by now + return [False for _ in subscriptions] + + @metered_subclass_method(METRICS_POOL) + def UnsubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]: + # TODO: RESTCONF OPENCONFIG does not support monitoring by now + return [False for _ in subscriptions] + + def GetState( + self, blocking=False, terminate : Optional[threading.Event] = None + ) -> Iterator[Tuple[float, str, Any]]: + # TODO: RESTCONF OPENCONFIG does not support monitoring by now + return [] diff --git a/src/device/service/drivers/restconf_openconfig/__init__.py b/src/device/service/drivers/restconf_openconfig/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/device/service/drivers/restconf_openconfig/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/device/service/drivers/restconf_openconfig/handlers/AclRuleSetHandler.py b/src/device/service/drivers/restconf_openconfig/handlers/AclRuleSetHandler.py new file mode 100644 index 0000000000000000000000000000000000000000..9ef029c0969d4091c3a11248b45a785c4fb9f5c3 --- /dev/null +++ b/src/device/service/drivers/restconf_openconfig/handlers/AclRuleSetHandler.py @@ -0,0 +1,248 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +from typing import Any, Dict, List, Optional, Tuple, Union +from common.proto.context_pb2 import AclDirectionEnum +from common.tools.rest_conf.client.RestConfClient import RestConfClient + + +LOGGER = logging.getLogger(__name__) + + +_TFS_2_OC_RULE_TYPE = { + 'ACLRULETYPE_IPV4': 'ACL_IPV4', + 'ACLRULETYPE_IPV6': 'ACL_IPV6', +} +_OC_2_TFS_RULE_TYPE = {v: k for k, v in _TFS_2_OC_RULE_TYPE.items() } + +_TFS_2_OC_PROTOCOL = { + 1 : 'IP_ICMP', + 6 : 'IP_TCP', + 17 : 'IP_UDP', +} +_OC_2_TFS_PROTOCOL = {v: k for k, v in _TFS_2_OC_PROTOCOL.items() } + +_TFS_2_OC_FWD_ACTION = { + 'ACLFORWARDINGACTION_DROP' : 'DROP', + 'ACLFORWARDINGACTION_ACCEPT': 'ACCEPT', + 'ACLFORWARDINGACTION_REJECT': 'REJECT', +} +_OC_2_TFS_FWD_ACTION = {v: k for k, v in _TFS_2_OC_FWD_ACTION.items()} + + +DIRECTION_INGRESS = { + AclDirectionEnum.ACLDIRECTION_BOTH, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_BOTH), + AclDirectionEnum.ACLDIRECTION_INGRESS, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_INGRESS), +} + +DIRECTION_EGRESS = { + AclDirectionEnum.ACLDIRECTION_BOTH, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_BOTH), + AclDirectionEnum.ACLDIRECTION_EGRESS, + AclDirectionEnum.Name(AclDirectionEnum.ACLDIRECTION_EGRESS), +} + + +class AclRuleSetHandler: + def __init__(self, rest_conf_client : RestConfClient) -> None: + self._rest_conf_client = rest_conf_client + self._subpath_root = '/openconfig-acl:acl' + self._subpath_item = self._subpath_root + '/acl-sets/acl-set={acl_ruleset_name:s}' + + + def get(self, acl_ruleset_name : Optional[str] = None) -> Union[Dict, List]: + if acl_ruleset_name is None: + subpath_url = self._subpath_root + else: + subpath_url = self._subpath_item.format(acl_ruleset_name=acl_ruleset_name) + + reply = self._rest_conf_client.get(subpath_url) + + if 'openconfig-acl:acl' not in reply: + raise Exception('Malformed reply. "openconfig-acl:acl" missing') + acls = reply['openconfig-acl:acl'] + + if 'acl-sets' not in acls: + raise Exception('Malformed reply. "openconfig-acl:acl/acl-sets" missing') + aclsets = acls['acl-sets'] + + if 'acl-set' not in aclsets: + raise Exception('Malformed reply. "openconfig-acl:acl/acl-sets/acl-set" missing') + aclset_lst = aclsets['acl-set'] + + if len(aclset_lst) == 0: + MSG = '[get] No ACL-Sets are reported' + LOGGER.debug(MSG) + return list() + + results : List[Tuple[str, Dict[str, Any]]] = list() + for acl_set in aclset_lst: + acl_set_name = acl_set['name'] + oc_acl_set_type = acl_set['config']['type'] + tfs_acl_set_type = _OC_2_TFS_RULE_TYPE[oc_acl_set_type] + + rule_set: Dict[str, Any] = { + 'name' : acl_set_name, + 'type' : tfs_acl_set_type, + 'entries' : [], + } + + acl_set_config : Dict = acl_set.get('config', {}) + acl_set_description = acl_set_config.get('description') + if acl_set_description is not None: + rule_set['description'] = acl_set_description + + for ace in acl_set.get('acl-entries', {}).get('acl-entry', []): + seq = ace['sequence-id'] + + ipv4_cfg = ace.get('ipv4', {}).get('config', {}) + match = dict() + if 'source-address' in ipv4_cfg: + match['src_address'] = ipv4_cfg['source-address'] + if 'destination-address' in ipv4_cfg: + match['dst_address'] = ipv4_cfg['destination-address'] + if 'protocol' in ipv4_cfg: + match['protocol'] = _OC_2_TFS_PROTOCOL[ipv4_cfg['protocol']] + + transp_cfg = ace.get('transport', {}).get('config', {}) + if 'source-port' in transp_cfg: + match['src_port'] = transp_cfg['source-port'] + if 'destination-port' in transp_cfg: + match['dst_port'] = transp_cfg['destination-port'] + + act = ace.get('actions', {}).get('config', {}).get('forwarding-action', 'DROP') + fwd_tfs = _OC_2_TFS_FWD_ACTION[act] + + rule_set['entries'].append({ + 'sequence_id': seq, + 'match': match, + 'action': {'forward_action': fwd_tfs}, + }) + + # find where that ACL is bound (first matching interface) + if_name = '' + for intf in acls.get('interfaces', {}).get('interface', []): + for ing in intf.get('ingress-acl-sets', {}).get('ingress-acl-set', []): + if ing['set-name'] == acl_set_name: + if_name = intf['id'] + break + + path = '/device[]/endpoint[{:s}]/acl_ruleset[{:s}]'.format( + if_name, acl_set_name + ) + tfs_acl_data = { + 'endpoint_id': {'endpoint_uuid': {'uuid': if_name}}, + 'direction': 'ACLDIRECTION_INGRESS', + 'rule_set': rule_set, + } + results.append((path, tfs_acl_data)) + + return results + + + def update(self, acl_data : Dict) -> bool: + if_name = acl_data['endpoint_id']['endpoint_uuid']['uuid'] + direction = acl_data['direction'] + rule_set = acl_data['rule_set'] + + if direction in DIRECTION_INGRESS: + acl_set_name = 'ip-filter-input' + elif direction in DIRECTION_EGRESS: + acl_set_name = 'ip-filter-output' + else: + MSG = 'Unsupported direction: {:s}' + raise Exception(MSG.format(str(direction))) + + acl_entry_desc = rule_set['name'] + acl_set_type = _TFS_2_OC_RULE_TYPE[rule_set['type']] + + oc_acl_entries = list() + sequence_ids : List[int] = list() + for entry in rule_set.get('entries', []): + sequence_id = int(entry['sequence_id']) + oc_action = _TFS_2_OC_FWD_ACTION[entry['action']['forward_action']] + oc_acl_entry = { + 'sequence-id': sequence_id, + 'config': {'sequence-id': sequence_id, 'description' : acl_entry_desc}, + 'actions': {'config': {'forwarding-action': oc_action}} + } + + entry_match = entry.get('match', dict()) + + ipv4_config = dict() + if 'protocol' in entry_match and entry_match['protocol'] > 0: + ipv4_config['protocol'] = _TFS_2_OC_PROTOCOL[entry_match['protocol']] + if 'src_address' in entry_match and len(entry_match['src_address']) > 0: + ipv4_config['source-address'] = entry_match['src_address'] + if 'dst_address' in entry_match and len(entry_match['dst_address']) > 0: + ipv4_config['destination-address'] = entry_match['dst_address'] + if len(ipv4_config) > 0: + oc_acl_entry.setdefault('ipv4', dict())['config'] = ipv4_config + + transport_config = dict() + if 'src_port' in entry_match and entry_match['src_port'] > 0: + transport_config['source-port'] = entry_match['src_port'] + if 'dst_port' in entry_match and entry_match['dst_port'] > 0: + transport_config['destination-port'] = entry_match['dst_port'] + if len(transport_config) > 0: + oc_acl_entry.setdefault('transport', dict())['config'] = transport_config + + oc_acl_entries.append(oc_acl_entry) + sequence_ids.append(sequence_id) + + oc_interface = { + 'id': if_name, + 'config': {'id': if_name}, + 'interface-ref': {'config': {'interface': if_name, 'subinterface': 1}}, + } + + if direction in DIRECTION_INGRESS: + oc_interface['ingress-acl-sets'] = {'ingress-acl-set': [{ + 'set-name': acl_set_name, 'type': acl_set_type, + 'config': {'set-name': acl_set_name, 'type': acl_set_type}, + 'acl-entries': {'acl-entry': [ + {'sequence-id': sequence_id} + for sequence_id in sequence_ids + ]} + }]} + + if direction in DIRECTION_EGRESS: + oc_interface['egress-acl-sets'] = {'egress-acl-set': [{ + 'set-name': acl_set_name, 'type': acl_set_type, + 'config': {'set-name': acl_set_name, 'type': acl_set_type}, + 'acl-entries': {'acl-entry': [ + {'sequence-id': sequence_id} + for sequence_id in sequence_ids + ]} + }]} + + oc_acl_data = {'openconfig-acl:acl': { + 'acl-sets': {'acl-set': [{ + 'name': acl_set_name, 'type': acl_set_type, + 'config': {'name': acl_set_name, 'type': acl_set_type}, + 'acl-entries': {'acl-entry': oc_acl_entries}, + }]}, + 'interfaces': {'interface': [oc_interface]}, + }} + return self._rest_conf_client.post(self._subpath_root, body=oc_acl_data) is not None + + + def delete(self, acl_ruleset_name : str) -> bool: + if acl_ruleset_name is None: raise Exception('acl_ruleset_name is None') + subpath_url = self._subpath_item.format(acl_ruleset_name=acl_ruleset_name) + return self._rest_conf_client.delete(subpath_url) diff --git a/src/device/service/drivers/restconf_openconfig/handlers/ComponentsHandler.py b/src/device/service/drivers/restconf_openconfig/handlers/ComponentsHandler.py new file mode 100644 index 0000000000000000000000000000000000000000..f2c9fc6e380cf52fdc559caf9efa7d260ecfad83 --- /dev/null +++ b/src/device/service/drivers/restconf_openconfig/handlers/ComponentsHandler.py @@ -0,0 +1,71 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from typing import Dict, List, Tuple +from common.tools.rest_conf.client.RestConfClient import RestConfClient + + +LOGGER = logging.getLogger(__name__) + + +class ComponentsHandler: + def __init__(self, rest_conf_client : RestConfClient) -> None: + self._rest_conf_client = rest_conf_client + self._subpath_root = '/openconfig-platform:components' + + def get(self) -> List[Tuple[str, Dict]]: + reply = self._rest_conf_client.get(self._subpath_root) + + if 'openconfig-platform:components' not in reply: + raise Exception('Malformed reply. "openconfig-platform:components" missing') + components = reply['openconfig-platform:components'] + + if 'component' not in components: + raise Exception('Malformed reply. "openconfig-platform:components/component" missing') + component_lst = components['component'] + + if len(component_lst) == 0: + MSG = '[get] No components are reported' + LOGGER.debug(MSG) + return list() + + entries : List[Tuple[str, Dict]] = list() + for component in component_lst: + if 'state' not in component: + MSG = 'Malformed component. "state" missing: {:s}' + raise Exception(MSG.format(str(component))) + comp_state = component['state'] + + if 'type' not in comp_state: + MSG = 'Malformed component. "state/type" missing: {:s}' + raise Exception(MSG.format(str(component))) + comp_type : str = comp_state['type'] + comp_type = comp_type.split(':')[-1] + if comp_type != 'PORT': continue + + if 'name' not in component: + MSG = 'Malformed component. "name" missing: {:s}' + raise Exception(MSG.format(str(component))) + comp_name = component['name'] + + if comp_name.startswith('cali'): continue # calico port + if comp_name.startswith('vxlan'): continue # vxlan.calico port + if comp_name.startswith('docker'): continue # docker port + if comp_name in {'lo', 'loop', 'loopback'}: continue # loopback port + + endpoint = {'uuid': comp_name, 'type': '-'} + entries.append(('/endpoints/endpoint[{:s}]'.format(endpoint['uuid']), endpoint)) + + return entries diff --git a/src/telemetry/backend/collectors/intcollector/__init__.py b/src/device/service/drivers/restconf_openconfig/handlers/__init__.py similarity index 100% rename from src/telemetry/backend/collectors/intcollector/__init__.py rename to src/device/service/drivers/restconf_openconfig/handlers/__init__.py diff --git a/src/device/service/drivers/transport_api/Tools.py b/src/device/service/drivers/transport_api/Tools.py index 877aa967c27304072c59c76e959c37ea51367aed..fb9112be5a796bf65eae8b8ab4b5fa6526146883 100644 --- a/src/device/service/drivers/transport_api/Tools.py +++ b/src/device/service/drivers/transport_api/Tools.py @@ -16,9 +16,13 @@ import json, logging, operator, requests from requests.auth import HTTPBasicAuth from typing import Optional from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_SERVICES +from concurrent.futures import ThreadPoolExecutor + LOGGER = logging.getLogger(__name__) +EXECUTOR = ThreadPoolExecutor() + HTTP_OK_CODES = { 200, # OK 201, # Created @@ -199,3 +203,96 @@ def delete_connectivity_service(root_url, uuid, auth : Optional[HTTPBasicAuth] = LOGGER.error(msg.format(str(uuid), str(response.status_code), str(response))) results.append(response.status_code in HTTP_OK_CODES) return results + +def tapi_tequest(resource_value): + + services, urls = build_tapi_connectivity(resource_value) + for service, url in zip(services, urls): + LOGGER.info(f"Services to be processed: {json.dumps(service, indent=2)}") + LOGGER.info(f"URL to be used: {url}") + + EXECUTOR.submit(process_uuid, service, url) + +def process_uuid(service, url): + headers = { + "Content-Type": "application/json", + "Accept": "application/json" + } + + LOGGER.info(f"Processing service {service} to URL: {url}") + try: + response = requests.post(url = url, json=service, headers=headers, timeout=300) + LOGGER.info("Response Status code: %s", response) + except requests.exceptions.RequestException as e: + LOGGER.info(f"ERROR equest to {service} failed: {e}") + +def build_tapi_connectivity(service_data): + LOGGER.info(f"Building TAPI connectivity for services data: {service_data}") + outputs = [] + urls = [] + rules_set = service_data[1]["rule_set"] + for rule_set in rules_set: + direction = rule_set["direction"] + layer_name = rule_set["layer_protocol_name"] + layer_qualifier = rule_set["layer_protocol_qualifier"] + urls.append(rule_set["url"]) + cs = { + "uuid": rule_set["uuid"], + "connectivity-direction": direction, + "layer-protocol-name": layer_name, + "layer-protocol-qualifier": layer_qualifier, + "end-point": [] + } + + endpoints = [] + if direction == "UNIDIRECTIONAL": + endpoints.append({ + "layer-protocol-name": layer_name, + "layer-protocol-qualifier": layer_qualifier, + "service-interface-point": {"service-interface-point-uuid": rule_set["input_sip"]}, + "direction:": "INPUT", + "local-id": rule_set["input_sip"] + }) + endpoints.append({ + "layer-protocol-name": layer_name, + "layer-protocol-qualifier": layer_qualifier, + "service-interface-point": {"service-interface-point-uuid": rule_set["output_sip"]}, + "direction:": "OUTPUT", + "local-id": rule_set["output_sip"] + }) + else: + for point in [rule_set["input_sip"], rule_set["output_sip"]]: + ep = { + "layer-protocol-name": layer_name, + "layer-protocol-qualifier": layer_qualifier, + "service-interface-point": {"service-interface-point-uuid": point}, + "direction:": "BIDIRECTIONAL", + "local-id": point + } + if rule_set.get("lower_frequency_mhz") != "NONE": + ep["tapi-photonic-media:media-channel-connectivity-service-end-point-spec"] = { + "mc-config": { + "spectrum": { + "frequency-constraint": { + "adjustment-granularity": rule_set.get("granularity", "NONE"), + "grid-type": rule_set.get("grid_type", "NONE") + }, + "lower-frequency": rule_set["lower_frequency_mhz"], + "upper-frequency": rule_set["upper_frequency_mhz"] + } + } + } + endpoints.append(ep) + cs["end-point"] = endpoints + + route_obj = rule_set.get("route_objective_function", "UNSPECIFIED") + cs["route-objective-function"] = route_obj if route_obj != "NONE" else "10000" + capacity_value = rule_set.get("capacity_value", "NONE") + capacity_unit = rule_set.get("capacity_unit" , "NONE") + + if capacity_value != "NONE": + cs["requested-capacity"] = { + "total-size": {"value": capacity_value, "unit": capacity_unit} + } + outputs.append({"tapi-connectivity:connectivity-service": [cs]}) + return outputs, urls diff --git a/src/device/service/drivers/transport_api/TransportApiDriver.py b/src/device/service/drivers/transport_api/TransportApiDriver.py index 1766a714b8077fcbe48c021c9b256d08f1645035..86d6306d496af7463c52cb3d69952c87d1a65715 100644 --- a/src/device/service/drivers/transport_api/TransportApiDriver.py +++ b/src/device/service/drivers/transport_api/TransportApiDriver.py @@ -20,8 +20,8 @@ from common.type_checkers.Checkers import chk_string, chk_type from device.service.driver_api._Driver import _Driver, RESOURCE_ENDPOINTS, RESOURCE_SERVICES from device.service.driver_api.ImportTopologyEnum import ImportTopologyEnum, get_import_topology from . import ALL_RESOURCE_KEYS -from .Tools import create_connectivity_service, find_key, config_getter, delete_connectivity_service from .TfsApiClient import TfsApiClient +from .Tools import create_connectivity_service, find_key, config_getter, delete_connectivity_service, tapi_tequest LOGGER = logging.getLogger(__name__) @@ -43,7 +43,7 @@ class TransportApiDriver(_Driver): # If import_topology is set, this is a teraflowsdn device, not a real OLS self.__import_topology = get_import_topology(self.settings, default=ImportTopologyEnum.DISABLED) self.__skip_tapi_queries = self.__import_topology != ImportTopologyEnum.DISABLED - + # Initialize TfsApiClient for topology import if self.__skip_tapi_queries: self.tac = TfsApiClient(address, port, scheme=scheme, username=username, password=password, timeout=self.__timeout) @@ -99,7 +99,7 @@ class TransportApiDriver(_Driver): LOGGER.exception('Failed to import topology from NBI: {:s}'.format(str(e))) results.append((resource_key, e)) return results - + # For real OLS devices, query TAPI endpoints if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS for i, resource_key in enumerate(resource_keys): @@ -117,9 +117,9 @@ class TransportApiDriver(_Driver): with self.__lock: for resource in resources: LOGGER.info('resource = {:s}'.format(str(resource))) - + resource_key = resource[0] - + # Handle optical slice resources if '/optical_slice/context/' in resource_key: LOGGER.info('=' * 80) @@ -127,12 +127,12 @@ class TransportApiDriver(_Driver): LOGGER.info('=' * 80) try: optical_slice_data = json.loads(resource[1]) - + # Extract URL from tapi-common:context url = optical_slice_data.get('url', '') LOGGER.info('URL: %s', url) LOGGER.info('-' * 80) - + # Log the full optical slice data LOGGER.info('Optical Slice Data:') optical_slice = optical_slice_data.get('data', {}) @@ -143,31 +143,51 @@ class TransportApiDriver(_Driver): LOGGER.error(f'Failed to parse optical slice data: {str(e)}') results.append(e) continue - + # Handle media channel resources elif '/media_channel/service/' in resource_key: try: # Import here to avoid circular dependency from .TapiRequestBuilder import create_tapi_request - + # Generate complete TAPI request from resource data tapi_request, url = create_tapi_request(resource) LOGGER.info('URL: {:s}'.format(url)) LOGGER.info('Generated TAPI request: {:s}'.format(json.dumps(tapi_request, indent=2))) - + # For now, just log the request (HTTP POST is commented out in Tools.py) # In production, this would be sent to the TAPI endpoint results.append(True) - + except Exception as e: LOGGER.error('Failed to create TAPI request: {:s}'.format(str(e)), exc_info=True) results.append(e) - + + elif "tapi_lsp" in str(resources): + for resource in resources: + try: + tapi_tequest(resource) + results.append((resource, True)) + except Exception as e: + MSG = "Invalid resource_value type: expected dict, got {:s}" + results.append((resource, e)) else: - # Unknown resource type - LOGGER.warning(f'Unknown resource type: {resource_key}') - results.append(True) # Don't fail, just log warning - + for resource in resources: + LOGGER.info('resource = {:s}'.format(str(resource))) + + uuid = find_key(resource, 'uuid') + input_sip = find_key(resource, 'input_sip_uuid') + output_sip = find_key(resource, 'output_sip_uuid') + capacity_value = find_key(resource, 'capacity_value') + capacity_unit = find_key(resource, 'capacity_unit') + layer_protocol_name = find_key(resource, 'layer_protocol_name') + layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier') + direction = find_key(resource, 'direction') + + data = create_connectivity_service( + self.__tapi_root, uuid, input_sip, output_sip, direction, capacity_value, capacity_unit, + layer_protocol_name, layer_protocol_qualifier, timeout=self.__timeout, auth=self.__auth) + results.extend(data) return results @metered_subclass_method(METRICS_POOL) diff --git a/src/device/service/drivers/transport_api/templates/lsp.json b/src/device/service/drivers/transport_api/templates/lsp.json deleted file mode 100644 index 6120050398c00ac1643982ccb22352e6932d2f8d..0000000000000000000000000000000000000000 --- a/src/device/service/drivers/transport_api/templates/lsp.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "tapi-connectivity:connectivity-service" : [ - { - "connectivity-direction" : "", - "end-point" : [ - { - "direction" : "", - "layer-protocol-name" : "", - "layer-protocol-qualifier" : "", - "local-id" : "", - "service-interface-point" : { - "service-interface-point-uuid" : "" - }, - - "tapi-photonic-media:media-channel-connectivity-service-end-point-spec":{ - "mc-config":{ - "spectrum":{ - "lower-frequency": "", - "upper-frequency": "", - "frequency-constraint":{ - "adjustment-granularity" : "", - "grid-type": "" - } - } - } - } - }, - { - "direction" : "", - "layer-protocol-name" : "", - "layer-protocol-qualifier" : "", - "local-id" : "", - "service-interface-point" : { - "service-interface-point-uuid" : "" - } - } - ], - "layer-protocol-name" : "", - "layer-protocol-qualifier" : "", - "requested-capacity" : { - "total-size" : { - "unit" : "", - "value" : "" - } - }, - "include-link":[ - ], - "route-objective-function" : "10000", - "uuid" : "" - } - ] -} \ No newline at end of file diff --git a/src/device/tests/dscm/Fixtures.py b/src/device/tests/dscm/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..ab9e67a90ebe8511ce12a058fe0e3c6aa03c4a1e --- /dev/null +++ b/src/device/tests/dscm/Fixtures.py @@ -0,0 +1,58 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pytest +import logging + +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from kpi_manager.client.KpiManagerClient import KpiManagerClient + + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient(host="10.152.183.127") + _client.connect() + LOGGER.info('Yielding Connected ContextClient...') + yield _client + _client.close() + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient(host="10.152.183.95") + _client.connect() + LOGGER.info('Yielding Connected DeviceClient...') + yield _client + _client.close() + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient(host="10.152.183.47") + _client.connect() + LOGGER.info('Yielding Connected DeviceClient...') + yield _client + _client.close() + +@pytest.fixture(scope='session') +def kpi_manager_client(): + _client = KpiManagerClient(host="10.152.183.118") + LOGGER.info('Yielding Connected KpiManagerClient...') + yield _client + _client.close() + LOGGER.info('Closed KpiManagerClient...') diff --git a/src/device/tests/dscm/__init__.py b/src/device/tests/dscm/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7363515f07a52d996229bcbd72932ce1423258d7 --- /dev/null +++ b/src/device/tests/dscm/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/src/device/tests/dscm/test_dscm_netconf_hub_leaf.py b/src/device/tests/dscm/test_dscm_netconf_hub_leaf.py new file mode 100644 index 0000000000000000000000000000000000000000..7c707a7694f9c775b111b72615dafa4dcf381058 --- /dev/null +++ b/src/device/tests/dscm/test_dscm_netconf_hub_leaf.py @@ -0,0 +1,243 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import json, logging, os, pytest, time +from typing import Dict, Tuple +from device.service.drivers.netconf_dscm.NetConfDriver import NetConfDriver + +logging.basicConfig(level=logging.DEBUG) +LOGGER = logging.getLogger(__name__) + +DEVICES = { + 'hub': {'address': '10.30.7.7', 'port': 2023, 'settings': {}}, + 'leaf': {'address': '10.30.7.8', 'port': 2023, 'settings': {}} + } + +@pytest.fixture(autouse=True) +def log_each(request): + LOGGER.info(f">>>>>> START {request.node.name} >>>>>>") + yield + LOGGER.info(f"<<<<<< END {request.node.name} <<<<<<") + +@pytest.fixture(scope='session') +def get_driver_hub() -> Tuple[NetConfDriver, None]: # pyright: ignore[reportInvalidTypeForm] + driver = NetConfDriver( + DEVICES['hub']['address'], DEVICES['hub']['port'], **(DEVICES['hub']['settings']) + ) + yield driver # pyright: ignore[reportReturnType] + time.sleep(1) + +@pytest.fixture(scope='session') +def get_driver_leaf() -> Tuple[NetConfDriver, None]: # pyright: ignore[reportInvalidTypeForm] + driver = NetConfDriver( + DEVICES['leaf']['address'], DEVICES['leaf']['port'], **(DEVICES['leaf']['settings']) + ) + yield driver # pyright: ignore[reportReturnType] + time.sleep(1) + + +# --- Directly Testing SBI +def test_get_default_hub_config(get_driver_hub) -> Dict: + data = { + "name": "channel-1", + "frequency": 195000000, + "operational_mode": 1, + "target_output_power": 0.0, + "operation" : "merge", + "digital_sub_carriers_group": [ + { + "digital_sub_carriers_group_id": 1, + "digital_sub_carrier_id": [ + { + "sub_carrier_id": 1, + "active": "true" + }, + { + "sub_carrier_id": 2, + "active": "true" + }, + { + "sub_carrier_id": 3, + "active": "true" + }, + { + "sub_carrier_id": 4, + "active": "true" + } + ] + }, + { + "digital_sub_carriers_group_id": 2, + "digital_sub_carrier_id": [ + { + "sub_carrier_id": 5, + "active": "true" + }, + { + "sub_carrier_id": 6, + "active": "true" + }, + { + "sub_carrier_id": 7, + "active": "true" + }, + { + "sub_carrier_id": 8, + "active": "true" + } + ] + } + ], + } + node = 'T2.1' + result_config = get_driver_hub.SetConfig([(node, data)]) + assert result_config is not None + +def test_get_default_leaves_config(get_driver_leaf) -> Dict: + data = { + "name" : "channel-1", # "channel-1", "channel-3", "channel-5" + "frequency" : 195006250, # "195006250", 195018750, 195031250 + "operational_mode" : 1, + "target_output_power": -99, # should be -99 + "operation" : "merge", + "digital_sub_carriers_group": [ + { + "digital_sub_carriers_group_id": 1, + "digital_sub_carrier_id": [ + { + "sub_carrier_id": 1, + "active": "false" # should be set to false + }, + { + "sub_carrier_id": 2, + "active": "false" + }, + { + "sub_carrier_id": 3, + "active": "false" + }, + { + "sub_carrier_id": 4, + "active": "false" + } + ] + } + ], + } + node = 'T1.1' + result_config = get_driver_leaf.SetConfig([(node, data)]) + assert result_config is not None + +# netconf-console2 --host=10.30.7.7 --port=2023 --tcp --get-config -x '/components/component[name="channel-1"]/optical-channel/state/input-power/instant' + +# def test_get_config(get_driver): +# path = '/components/component[name="channel-1"]/optical-channel/state/input-power/instant' +# result_config = get_driver.GetConfig([path]) +# assert result_config is not None +# LOGGER.info(f"GetConfig result: {result_config}") + +# netconf-console2 --host=10.30.7.7 --port=2023 --tcp --edit-config edit_dscm_hub.xml + +# def test_set_config_hub(get_driver_hub): +# data = { +# "name": "channel-1", +# "frequency": "195000000", +# "target_output_power": "-3.0", +# "operational_mode": "1", +# "operation": "merge", +# "digital_subcarriers_groups": [ +# { "group_id": 1, "digital-subcarrier-id": [{ "subcarrier-id": 1, "active": True}, ]}, +# { "group_id": 2, "digital-subcarrier-id": [{ "subcarrier-id": 2, "active": True}, ]}, +# { "group_id": 3, "digital-subcarrier-id": [{ "subcarrier-id": 3, "active": True}, ]}, +# { "group_id": 4, "digital-subcarrier-id": [{ "subcarrier-id": 4, "active": True}, ]}, +# ], +# } +# node = 'hub' +# result_config = get_driver_hub.SetConfig([(node, data)]) +# assert result_config is not None +# # LOGGER.info(f"SetConfig result: {result_config}") + +# def test_set_config_leaf(get_driver_leaf): +# data = { +# "operation": "merge", +# "channels": +# [ +# { +# "name": "channel-1", +# "frequency": "195006250", +# "target_output_power": "-99.0", +# "operational_mode": "1", +# "digital_subcarriers_groups": +# [{ "group_id": 1 }] +# }, +# { +# "name": "channel-3", +# "frequency": "195018750", +# "target_output_power": "-99.0", +# "operational_mode": "1", +# "digital_subcarriers_groups": +# [{ "group_id": 1 }] +# }, +# { +# "name": "channel-5", +# "frequency": "195031250", +# "target_output_power": "-99.0", +# "operational_mode": "1", +# "digital_subcarriers_groups": +# [{ "group_id": 1 }] +# } +# ] +# } +# node = 'leaf' +# result_config = get_driver_leaf.SetConfig([(node, data)]) +# assert result_config is not None +# # LOGGER.info(f"SetConfig result: {result_config}") + + +# def test_dscm_netconf_hub(drivers): +# path = '/components/component[name="channel-1"]/config' +# data = json.dumps( +# { "name": "channel-1", +# "frequency": "195000000", +# "target_output_power": "-3.0", +# "operational_mode": "1", +# } +# ) +# config_to_set = [(path, data)] +# result_config = drivers['DSCM1'].SetConfig(config_to_set) +# assert result_config is not None +# LOGGER.info(f"SetConfig result: {result_config}") + + + +from common.tools.context_queries.Topology import get_topology +from common.proto.context_pb2 import TopologyId, ContextId +from .Fixtures import context_client +def test_get_and_remove_topology_context(context_client): + response = get_topology(context_client = context_client, topology_uuid = "admin", context_uuid = "admin") + LOGGER.info(f"Topology: {response}") + assert response is not None + # create context_id and topology_id from response + context_id = ContextId() + context_id = response.topology_id.context_id + topology_id = TopologyId() + topology_id = response.topology_id + # Remove Topology + topology_id.context_id.CopyFrom(context_id) + response = context_client.RemoveTopology(topology_id) + LOGGER.info(f"Topology removed Sucessfully") + # Remove Context + response = context_client.RemoveContext(context_id) + LOGGER.info(f"Context removed Sucessfully") diff --git a/src/device/tests/restconf_openconfig/__init__.py b/src/device/tests/restconf_openconfig/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/device/tests/restconf_openconfig/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_10.json b/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_10.json new file mode 100644 index 0000000000000000000000000000000000000000..edb3b917741b075d19325d1c88988b5be61f09e5 --- /dev/null +++ b/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_10.json @@ -0,0 +1,19 @@ +{ + "endpoint_id": { + "device_id": {"device_uuid": {"uuid": "my-firewall"}}, + "endpoint_uuid": {"uuid": "enp0s3"} + }, + "direction": "ACLDIRECTION_INGRESS", + "rule_set": { + "name" : "accept-30435-from-10-0-2-10", + "type" : "ACLRULETYPE_IPV4", + "description" : "accept-30435-from-10-0-2-10", + "user_id" : "teraflowsdn", + "entries" : [{ + "sequence_id" : 1, + "description" : "accept-30435-from-10-0-2-10", + "match" : {"src_address": "10.0.2.10/32", "protocol": 6, "dst_port": 30435}, + "action" : {"forward_action": "ACLFORWARDINGACTION_ACCEPT"} + }] + } +} diff --git a/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_2.json b/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_2.json new file mode 100644 index 0000000000000000000000000000000000000000..9a2b7c7c16807fb9957a6149afe57520bf19f478 --- /dev/null +++ b/src/device/tests/restconf_openconfig/data/accept_30435_from_10_0_2_2.json @@ -0,0 +1,19 @@ +{ + "endpoint_id": { + "device_id": {"device_uuid": {"uuid": "my-firewall"}}, + "endpoint_uuid": {"uuid": "enp0s3"} + }, + "direction": "ACLDIRECTION_INGRESS", + "rule_set": { + "name" : "accept-30435-from-10-0-2-2", + "type" : "ACLRULETYPE_IPV4", + "description" : "accept-30435-from-10-0-2-2", + "user_id" : "teraflowsdn", + "entries" : [{ + "sequence_id" : 1, + "description" : "accept-30435-from-10-0-2-2", + "match" : {"src_address": "10.0.2.2/32", "protocol": 6, "dst_port": 30435}, + "action" : {"forward_action": "ACLFORWARDINGACTION_ACCEPT"} + }] + } +} diff --git a/src/device/tests/restconf_openconfig/data/reject_30435_from_all.json b/src/device/tests/restconf_openconfig/data/reject_30435_from_all.json new file mode 100644 index 0000000000000000000000000000000000000000..79a87086ae381eabc52c27f5bfc7e18f0d6ad63d --- /dev/null +++ b/src/device/tests/restconf_openconfig/data/reject_30435_from_all.json @@ -0,0 +1,19 @@ +{ + "endpoint_id": { + "device_id": {"device_uuid": {"uuid": "my-firewall"}}, + "endpoint_uuid": {"uuid": "enp0s3"} + }, + "direction": "ACLDIRECTION_INGRESS", + "rule_set": { + "name" : "reject-30435-from-all", + "type" : "ACLRULETYPE_IPV4", + "description" : "reject-30435-from-all", + "user_id" : "teraflowsdn", + "entries" : [{ + "sequence_id" : 10000, + "description" : "reject-30435-from-all", + "match" : {"protocol": 6, "dst_port": 30435}, + "action" : {"forward_action": "ACLFORWARDINGACTION_REJECT"} + }] + } +} diff --git a/src/device/tests/restconf_openconfig/test_unitary_restconf_openconfig.py b/src/device/tests/restconf_openconfig/test_unitary_restconf_openconfig.py new file mode 100644 index 0000000000000000000000000000000000000000..0d4aa6253a39cc7cd033f286ce2d763c16c40957 --- /dev/null +++ b/src/device/tests/restconf_openconfig/test_unitary_restconf_openconfig.py @@ -0,0 +1,150 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +os.environ['DEVICE_EMULATED_ONLY'] = 'YES' + + +# pylint: disable=wrong-import-position +import json, logging, pytest, time +from typing import Dict, List, Tuple, Union +from device.service.driver_api._Driver import RESOURCE_ACL, RESOURCE_ENDPOINTS +from device.service.drivers.restconf_openconfig.RestConfOpenConfigDriver import RestConfOpenConfigDriver + + +DATA_FILE_PATH = 'device/tests/restconf_openconfig/data/' + +##### LOGGERS ########################################################################################################## + +logging.basicConfig(level=logging.DEBUG) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + + +##### DRIVER FIXTURE ################################################################################################### + +DRIVER_ADDRESS = '10.0.2.25' +DRIVER_PORT = 8888 +DRIVER_SETTINGS = dict( + scheme='http', username='admin', password='admin', + timeout=30, verify_certs=False, allow_redirects=True, +) + +@pytest.fixture(scope='session') +def driver() -> RestConfOpenConfigDriver: + _driver = RestConfOpenConfigDriver( + DRIVER_ADDRESS, DRIVER_PORT, **DRIVER_SETTINGS + ) + _driver.Connect() + yield _driver + time.sleep(1) + _driver.Disconnect() + + +##### HELPER METHODS ################################################################################################### + +def get_config( + driver : RestConfOpenConfigDriver, resources_to_get : List[str] +) -> List[Tuple[str, Dict]]: + LOGGER.info('[get_config] resources_to_get = {:s}'.format(str(resources_to_get))) + results_getconfig = driver.GetConfig(resources_to_get) + LOGGER.info('[get_config] results_getconfig = {:s}'.format(str(results_getconfig))) + return results_getconfig + +def set_config( + driver : RestConfOpenConfigDriver, resources_to_set : List[Tuple[str, Dict]] +) -> List[Tuple[str, Union[bool, Exception]]]: + LOGGER.info('[set_config] resources_to_set = {:s}'.format(str(resources_to_set))) + results_setconfig = driver.SetConfig(resources_to_set) + LOGGER.info('[set_config] results_setconfig = {:s}'.format(str(results_setconfig))) + return results_setconfig + +def del_config( + driver : RestConfOpenConfigDriver, resources_to_delete : List[Tuple[str, Dict]] +) -> List[Tuple[str, Union[bool, Exception]]]: + LOGGER.info('[del_config] resources_to_delete = {:s}'.format(str(resources_to_delete))) + results_deleteconfig = driver.DeleteConfig(resources_to_delete) + LOGGER.info('[del_config] results_deleteconfig = {:s}'.format(str(results_deleteconfig))) + return results_deleteconfig + +def create_acl_from_file(file_name : str) -> Tuple[str, Dict]: + with open(DATA_FILE_PATH + file_name, 'r', encoding='UTF-8') as f: + acl_data = json.load(f) + device_uuid = acl_data['endpoint_id']['device_id']['device_uuid']['uuid'] + endpoint_uuid = acl_data['endpoint_id']['endpoint_uuid']['uuid'] + aclset_name = acl_data['rule_set']['name'] + key_or_path = '/device[{:s}]/endpoint[{:s}]/acl_ruleset[{:s}]'.format( + device_uuid, endpoint_uuid, aclset_name + ) + return key_or_path, acl_data + + +##### TEST METHODS ##################################################################################################### + +def test_get_endpoints( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + results_getconfig = get_config(driver, [RESOURCE_ENDPOINTS]) + assert len(results_getconfig) > 0 + endpoint_names = {res_val['uuid'] for _, res_val in results_getconfig} + assert len(endpoint_names) == 1 + assert 'enp0s3' in endpoint_names + + +def test_get_acls( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + get_config(driver, [RESOURCE_ACL]) + + +def test_set_acl_reject_30435_from_all( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_set = [create_acl_from_file('reject_30435_from_all.json')] + set_config(driver, resources_to_set) + + +def test_set_acl_accept_30435_from_10_0_2_2( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_set = [create_acl_from_file('accept_30435_from_10_0_2_2.json')] + set_config(driver, resources_to_set) + + +def test_set_acl_accept_30435_from_10_0_2_10( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_set = [create_acl_from_file('accept_30435_from_10_0_2_10.json')] + set_config(driver, resources_to_set) + + +def test_del_acl_accept_30435_from_10_0_2_10( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_delete = [create_acl_from_file('accept_30435_from_10_0_2_10.json')] + del_config(driver, resources_to_delete) + + +def test_del_acl_accept_30435_from_10_0_2_2( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_delete = [create_acl_from_file('accept_30435_from_10_0_2_2.json')] + del_config(driver, resources_to_delete) + + +def test_del_acl_reject_30435_from_all( + driver : RestConfOpenConfigDriver, # pylint: disable=redefined-outer-name +) -> None: + resources_to_delete = [create_acl_from_file('reject_30435_from_all.json')] + del_config(driver, resources_to_delete) diff --git a/src/dlt/connector/Dockerfile b/src/dlt/connector/Dockerfile index 53788da18d62c62e6570aece3a30d70eeda55c28..22d44a13d0c4e5f5f8f45a516e905e9aa15e4683 100644 --- a/src/dlt/connector/Dockerfile +++ b/src/dlt/connector/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/dlt/mock_blockchain/Dockerfile b/src/dlt/mock_blockchain/Dockerfile index 14b63c9ab38e5a76e13afabd4676b3f8e76b5bb9..92066f20bc12518ea9e99722906404631d492b74 100644 --- a/src/dlt/mock_blockchain/Dockerfile +++ b/src/dlt/mock_blockchain/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/e2e_orchestrator/Dockerfile b/src/e2e_orchestrator/Dockerfile index 483aebb79155f9b886771cf1a214b925759880c8..ba3b57c3a3abfc2cc36d43f30c03d931bec51e14 100644 --- a/src/e2e_orchestrator/Dockerfile +++ b/src/e2e_orchestrator/Dockerfile @@ -42,9 +42,9 @@ RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/forecaster/Dockerfile b/src/forecaster/Dockerfile index f72ebadedaf0320ac7c5d047d8b75351d2aa3172..2cc6428f418912a9d05793178b483a01fe8d36ab 100644 --- a/src/forecaster/Dockerfile +++ b/src/forecaster/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/interdomain/Dockerfile b/src/interdomain/Dockerfile index ea99ce3990354d82ab898fbd4dd3afff40fb891c..7e689bdd1baba5648acc9e82ad37860a63cb8ccd 100644 --- a/src/interdomain/Dockerfile +++ b/src/interdomain/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/kpi_manager/Dockerfile b/src/kpi_manager/Dockerfile index 8bf1cedd61296388ce322f32d7fc7e08cbbe8d92..3057534bedae58d281c3057d4fbd6d7fec5909d3 100644 --- a/src/kpi_manager/Dockerfile +++ b/src/kpi_manager/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/kpi_manager/database/KpiModel.py b/src/kpi_manager/database/KpiModel.py index 169f9d2652cc6656128ca8d6ff671ca7abab6e46..62596d0c964487013d659e945deccc9c5390e9ae 100644 --- a/src/kpi_manager/database/KpiModel.py +++ b/src/kpi_manager/database/KpiModel.py @@ -18,7 +18,6 @@ from sqlalchemy import Column, Integer, String, Text from sqlalchemy.orm import registry from common.proto.kpi_manager_pb2 import KpiDescriptor -logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) # Create a base class for declarative models diff --git a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py index da3eefe788f61f99e192c5820440928c93c38c79..86683898a5af81ebd605a749b35c3fb3d289280c 100644 --- a/src/kpi_manager/service/KpiManagerServiceServicerImpl.py +++ b/src/kpi_manager/service/KpiManagerServiceServicerImpl.py @@ -35,7 +35,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): self, request: KpiDescriptor, grpc_context: grpc.ServicerContext # type: ignore ) -> KpiId: # type: ignore response = KpiId() - LOGGER.info("Received gRPC message object: {:}".format(request)) + LOGGER.debug(f"SetKpiDescriptor - Received gRPC message object: {request}") kpi_to_insert = KpiModel.convert_KpiDescriptor_to_row(request) if self.kpi_db_obj.add_row_to_db(kpi_to_insert): response.kpi_id.uuid = request.kpi_id.kpi_id.uuid @@ -47,11 +47,11 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore ) -> KpiDescriptor: # type: ignore response = KpiDescriptor() - LOGGER.info("Received gRPC message object: {:}".format(request)) + LOGGER.debug(f"GetKpiDescriptor - Received gRPC message object: {request}") kpi_id_to_search = request.kpi_id.uuid row = self.kpi_db_obj.search_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search) if row is None: - LOGGER.info('No matching row found kpi id: {:}'.format(kpi_id_to_search)) + LOGGER.error(f"No matching row found kpi id: {kpi_id_to_search}") raise NotFoundException('KpiDescriptor', kpi_id_to_search) response = KpiModel.convert_row_to_KpiDescriptor(row) return response @@ -60,7 +60,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): def DeleteKpiDescriptor( self, request: KpiId, grpc_context: grpc.ServicerContext # type: ignore ) -> Empty: # type: ignore - LOGGER.info("Received gRPC message object: {:}".format(request)) + LOGGER.debug(f"DeleteKpiDescriptor - Received gRPC message object: {request}") kpi_id_to_search = request.kpi_id.uuid self.kpi_db_obj.delete_db_row_by_id(KpiModel, 'kpi_id', kpi_id_to_search) return Empty() @@ -69,7 +69,7 @@ class KpiManagerServiceServicerImpl(KpiManagerServiceServicer): def SelectKpiDescriptor( self, filter: KpiDescriptorFilter, grpc_context: grpc.ServicerContext # type: ignore ) -> KpiDescriptorList: # type: ignore - LOGGER.info("Received gRPC message object: {:}".format(filter)) + LOGGER.debug(f"SelectKpiDescriptor - Received gRPC message object: {filter}") response = KpiDescriptorList() rows = self.kpi_db_obj.select_with_filter(KpiModel, filter) for row in rows: diff --git a/src/kpi_manager/service/__main__.py b/src/kpi_manager/service/__main__.py index 936a8fb3da1aaec16b37e98d71ac446a1d7ad117..0421fc6a1542264c520ad9861334bf7562130cf0 100644 --- a/src/kpi_manager/service/__main__.py +++ b/src/kpi_manager/service/__main__.py @@ -30,7 +30,7 @@ def main(): global LOGGER # pylint: disable=global-statement log_level = get_log_level() - logging.basicConfig(level=log_level) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") LOGGER = logging.getLogger(__name__) signal.signal(signal.SIGINT, signal_handler) diff --git a/src/kpi_value_api/Dockerfile b/src/kpi_value_api/Dockerfile index 1386fcd49792bc1866d3c5076d53850e80a408b9..c1bfb9ca7ae38e5ddaa9798ac729d01025f4dda9 100644 --- a/src/kpi_value_api/Dockerfile +++ b/src/kpi_value_api/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/kpi_value_api/service/__main__.py b/src/kpi_value_api/service/__main__.py index 062856874bbe24a6407bd15fe3854b8780c25ad3..be6596e9835cf2b39638e38b6ee63ff07e8324d3 100644 --- a/src/kpi_value_api/service/__main__.py +++ b/src/kpi_value_api/service/__main__.py @@ -27,7 +27,7 @@ def main(): global LOGGER # pylint: disable=global-statement log_level = get_log_level() - logging.basicConfig(level=log_level) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") LOGGER = logging.getLogger(__name__) signal.signal(signal.SIGINT, signal_handler) diff --git a/src/kpi_value_writer/Dockerfile b/src/kpi_value_writer/Dockerfile index 9e6b4ff2992c59ce28ab38d9144c04b70905c8fc..6f7f16a84c9b85a93cb8ee8e086d7d51f7f35864 100644 --- a/src/kpi_value_writer/Dockerfile +++ b/src/kpi_value_writer/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/kpi_value_writer/service/KpiValueWriter.py b/src/kpi_value_writer/service/KpiValueWriter.py index fa4d482b583ed69e16563e6aa8944c837f0a0ba4..fe84fabaa15996833523a1301f78bc5506431db1 100644 --- a/src/kpi_value_writer/service/KpiValueWriter.py +++ b/src/kpi_value_writer/service/KpiValueWriter.py @@ -49,21 +49,21 @@ class KpiValueWriter(GenericGrpcService): consumer = self.kafka_consumer consumer.subscribe([KafkaTopic.VALUE.value]) - LOGGER.debug("Kafka Consumer start listenng on topic: {:}".format(KafkaTopic.VALUE.value)) + LOGGER.debug(f"Kafka Consumer start listening on topic: {KafkaTopic.VALUE.value}") while True: raw_kpi = consumer.poll(1.0) if raw_kpi is None: continue elif raw_kpi.error(): if raw_kpi.error().code() != KafkaError._PARTITION_EOF: - print("Consumer error: {}".format(raw_kpi.error())) + LOGGER.debug(f"Consumer error: {raw_kpi.error()}") continue try: kpi_value = json.loads(raw_kpi.value().decode('utf-8')) - LOGGER.info("Received KPI : {:}".format(kpi_value)) + LOGGER.debug(f"Received KPI: {kpi_value}") self.get_kpi_descriptor(kpi_value, kpi_manager_client, metric_writer) - except: - LOGGER.exception("Error detail: ") + except Exception as ex: + LOGGER.exception(f"Error detail: {ex}") continue def get_kpi_descriptor(self, kpi_value: str, kpi_manager_client, metric_writer): @@ -73,9 +73,9 @@ class KpiValueWriter(GenericGrpcService): kpi_descriptor_object = KpiDescriptor() kpi_descriptor_object = kpi_manager_client.GetKpiDescriptor(kpi_id) if kpi_descriptor_object.kpi_id.kpi_id.uuid == kpi_id.kpi_id.uuid: - LOGGER.info("Extracted KpiDescriptor: {:}".format(kpi_descriptor_object)) + LOGGER.debug(f"Extracted KpiDescriptor: {kpi_descriptor_object}") metric_writer.create_and_expose_cooked_kpi(kpi_descriptor_object, kpi_value) else: - LOGGER.info("No KPI Descriptor found in Database for Kpi ID: {:}".format(kpi_id)) + LOGGER.warning(f"No KPI Descriptor found in Database for KPI ID: {kpi_id}") except: LOGGER.exception("Unable to get KpiDescriptor") diff --git a/src/kpi_value_writer/service/__main__.py b/src/kpi_value_writer/service/__main__.py index e90bdf9bd105a112b5d83ae6ce50a7c7588b27fb..ddda5173a0449a342a0d4246ce8ca0bd1f08b253 100644 --- a/src/kpi_value_writer/service/__main__.py +++ b/src/kpi_value_writer/service/__main__.py @@ -27,7 +27,7 @@ def main(): global LOGGER # pylint: disable=global-statement log_level = get_log_level() - logging.basicConfig(level=log_level) + logging.basicConfig(level=log_level, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s") LOGGER = logging.getLogger(__name__) signal.signal(signal.SIGINT, signal_handler) diff --git a/src/l3_attackmitigator/Dockerfile b/src/l3_attackmitigator/Dockerfile index 2c074d759253f2cf514b3c2c0abb67008a67a3ab..14002ada6aa9e74f166355bedab4e8fa50e93bf8 100644 --- a/src/l3_attackmitigator/Dockerfile +++ b/src/l3_attackmitigator/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/l3_centralizedattackdetector/Dockerfile b/src/l3_centralizedattackdetector/Dockerfile index a409449e32be70d60498ebadbcbb609cda8420bd..acaa28b3d8f3f82e633e2eace966bf3d44c2ab3c 100644 --- a/src/l3_centralizedattackdetector/Dockerfile +++ b/src/l3_centralizedattackdetector/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/l3_distributedattackdetector/Dockerfile b/src/l3_distributedattackdetector/Dockerfile index c41fbc86994f180cae859c7eb7379a310a928ce0..64f862b8ba5bf71b26ffbd595f1ad2e7b75f54b2 100644 --- a/src/l3_distributedattackdetector/Dockerfile +++ b/src/l3_distributedattackdetector/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/load_generator/Dockerfile b/src/load_generator/Dockerfile index ca70a36974d5f047bff1ed77b998421e3b46ce69..54d5d3c0e6c917453ad5a98dd75aa62614578695 100644 --- a/src/load_generator/Dockerfile +++ b/src/load_generator/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/load_generator/requirements.in b/src/load_generator/requirements.in index a2ee41d8317c5146977ef173654b823f476d2237..aa83a97e393b2fb344655a742d98047a8b8fc69a 100644 --- a/src/load_generator/requirements.in +++ b/src/load_generator/requirements.in @@ -13,3 +13,4 @@ # limitations under the License. APScheduler>=3.10.4 +pytz>=2025.2 diff --git a/src/monitoring/Dockerfile b/src/monitoring/Dockerfile index 9ed58954f63c8451080b4fbe5327a102ae79124b..1689986b17924421ea9d2452832a3dca2d0ad480 100644 --- a/src/monitoring/Dockerfile +++ b/src/monitoring/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/nbi/.gitlab-ci.yml b/src/nbi/.gitlab-ci.yml index 0a5810354d65a8d366d931f723e290a869b568b2..492c4603ab96360c1508e708a0447317849c1761 100644 --- a/src/nbi/.gitlab-ci.yml +++ b/src/nbi/.gitlab-ci.yml @@ -120,6 +120,7 @@ unit_test nbi: - docker exec -i $IMAGE_NAME bash -c "coverage run --append -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_ietf_l3vpn.py --junitxml=/opt/results/${IMAGE_NAME}_report_ietf_l3vpn.xml" - docker exec -i $IMAGE_NAME bash -c "coverage run --append -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_etsi_bwm.py --junitxml=/opt/results/${IMAGE_NAME}_report_etsi_bwm.xml" - docker exec -i $IMAGE_NAME bash -c "coverage run --append -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_camara_qod.py --junitxml=/opt/results/${IMAGE_NAME}_report_camara_qod.xml" + #- docker exec -i $IMAGE_NAME bash -c "coverage run --append -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_dscm_restconf.py --junitxml=/opt/results/${IMAGE_NAME}_report_dscm_restconf.xml" - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing" coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' after_script: diff --git a/src/nbi/Dockerfile b/src/nbi/Dockerfile index e34aaa36d865ec2e9606a31094bca2321be50b10..1b0d841f344bb06f871118302f565b61cc26bd1d 100644 --- a/src/nbi/Dockerfile +++ b/src/nbi/Dockerfile @@ -38,9 +38,9 @@ RUN ldconfig ENV PYTHONUNBUFFERED=0 # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components @@ -77,18 +77,20 @@ COPY src/context/__init__.py context/__init__.py COPY src/context/client/. context/client/ COPY src/device/__init__.py device/__init__.py COPY src/device/client/. device/client/ -COPY src/service/__init__.py service/__init__.py -COPY src/service/client/. service/client/ -COPY src/slice/__init__.py slice/__init__.py -COPY src/slice/client/. slice/client/ +COPY src/osm_client/__init__.py osm_client/__init__.py +COPY src/osm_client/client/. osm_client/client/ +COPY src/pluggables/__init__.py pluggables/__init__.py +COPY src/pluggables/client/. pluggables/client/ COPY src/qkd_app/__init__.py qkd_app/__init__.py COPY src/qkd_app/client/. qkd_app/client/ COPY src/qos_profile/__init__.py qos_profile/__init__.py COPY src/qos_profile/client/. qos_profile/client/ -COPY src/osm_client/__init__.py osm_client/__init__.py -COPY src/osm_client/client/. osm_client/client/ +COPY src/service/__init__.py service/__init__.py +COPY src/service/client/. service/client/ COPY src/simap_connector/__init__.py simap_connector/__init__.py COPY src/simap_connector/client/. simap_connector/client/ +COPY src/slice/__init__.py slice/__init__.py +COPY src/slice/client/. slice/client/ COPY src/vnt_manager/__init__.py vnt_manager/__init__.py COPY src/vnt_manager/client/. vnt_manager/client/ RUN mkdir -p /var/teraflow/tests/tools diff --git a/src/nbi/requirements.in b/src/nbi/requirements.in index 6c176e3f0206b5e32c82ea6841061ce2c3c870ac..c72fe279d762ff7d5838d30ff1fa974bc4930304 100644 --- a/src/nbi/requirements.in +++ b/src/nbi/requirements.in @@ -12,26 +12,27 @@ # See the License for the specific language governing permissions and # limitations under the License. +#gevent-websocket==0.10.1 +#gevent==24.11.1 +#greenlet==3.1.1 +#websockets==12.0 deepdiff==6.7.* deepmerge==1.1.* eventlet==0.39.0 -Flask==2.1.3 Flask-HTTPAuth==4.5.0 Flask-RESTful==0.3.9 flask-socketio==5.5.1 -#gevent==24.11.1 -#gevent-websocket==0.10.1 -#greenlet==3.1.1 +Flask==2.1.3 +git+https://github.com/robshakir/pyangbind.git gunicorn==23.0.0 -jsonschema==4.4.0 +Jinja2==3.0.3 +jsonschema==4.4.0 # 3.2.0 is incompatible kafka-python==2.0.6 libyang==2.8.4 netaddr==0.9.0 pyang==2.6.0 -git+https://github.com/robshakir/pyangbind.git pydantic==2.6.3 python-socketio==5.12.1 requests==2.27.* -werkzeug==2.3.7 -#websockets==12.0 websocket-client==1.8.0 # used by socketio to upgrate to websocket +werkzeug==2.3.7 diff --git a/src/nbi/service/app.py b/src/nbi/service/app.py index eea02d82728542496a57ca0b191329e267372841..f2d59a3bfedab29afd54dcf80c2ef432c71c9f50 100644 --- a/src/nbi/service/app.py +++ b/src/nbi/service/app.py @@ -30,6 +30,8 @@ from common.Settings import ( ) from .NbiApplication import NbiApplication from .camara_qod import register_camara_qod +from .dscm_oc import register_dscm_oc +from .e2e_services import register_etsi_api from .etsi_bwm import register_etsi_bwm_api from .health_probes import register_health_probes from .ietf_acl import register_ietf_acl @@ -38,13 +40,13 @@ from .ietf_l2vpn import register_ietf_l2vpn from .ietf_l3vpn import register_ietf_l3vpn from .ietf_network import register_ietf_network from .ietf_network_slice import register_ietf_nss +from .osm_nbi import register_osm_api from .qkd_app import register_qkd_app from .restconf_root import register_restconf_root +from .sse_telemetry import register_telemetry_subscription from .tfs_api import register_tfs_api -from .osm_nbi import register_osm_api #from .topology_updates import register_topology_updates from .vntm_recommend import register_vntm_recommend -from .sse_telemetry import register_telemetry_subscription from .well_known_meta import register_well_known from .e2e_services import register_etsi_api from .media_channel import register_media_channel @@ -89,18 +91,22 @@ KafkaTopic.create_all_topics() LOGGER.info('Created required Kafka topics') nbi_app = NbiApplication(base_url=BASE_URL) -register_health_probes (nbi_app) -register_restconf_root (nbi_app) -register_well_known (nbi_app) -register_tfs_api (nbi_app) +register_camara_qod (nbi_app) +register_dscm_oc (nbi_app) +register_etsi_api (nbi_app) register_etsi_bwm_api (nbi_app) +register_health_probes (nbi_app) +register_ietf_acl (nbi_app) register_ietf_hardware (nbi_app) register_ietf_l2vpn (nbi_app) register_ietf_l3vpn (nbi_app) register_ietf_network (nbi_app) register_ietf_nss (nbi_app) -register_ietf_acl (nbi_app) +register_osm_api (nbi_app) register_qkd_app (nbi_app) +register_restconf_root (nbi_app) +register_telemetry_subscription(nbi_app) +register_tfs_api (nbi_app) #register_topology_updates(nbi_app) # does not work; check if eventlet-grpc side effects register_vntm_recommend (nbi_app) register_telemetry_subscription(nbi_app) diff --git a/src/nbi/service/dscm_oc/__init__.py b/src/nbi/service/dscm_oc/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1b8b4e36ea5d05d6c0013f517a13761ce6f3f9c3 --- /dev/null +++ b/src/nbi/service/dscm_oc/__init__.py @@ -0,0 +1,22 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from .routes import blueprint +from nbi.service.NbiApplication import NbiApplication + +# NBI service calls this in main.py file to register blueprints. +def register_dscm_oc(nbi_application : NbiApplication): + nbi_flask_app = nbi_application.get_flask_app() + nbi_flask_app.register_blueprint(blueprint, url_prefix='/restconf/data') diff --git a/src/nbi/service/dscm_oc/enforce_header.py b/src/nbi/service/dscm_oc/enforce_header.py new file mode 100644 index 0000000000000000000000000000000000000000..65e9172cb65fc59f1819e85f93adb8a79a61d0ea --- /dev/null +++ b/src/nbi/service/dscm_oc/enforce_header.py @@ -0,0 +1,40 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from functools import wraps +from flask import request +from .error import yang_error + +def require_accept(allowed): + def deco(fn): + @wraps(fn) + def _wrap(*args, **kwargs): + accept = request.headers.get("Accept", "") + if not any(a in accept or accept == "*/*" for a in allowed): + return yang_error({"error-message": f"Accept not supported. Use one of {allowed}"}, status=406) + return fn(*args, **kwargs) + return _wrap + return deco + +def require_content_type(allowed): + def deco(fn): + @wraps(fn) + def _wrap(*args, **kwargs): + ctype = request.headers.get("Content-Type", "") + if not any(a in ctype for a in allowed): + return yang_error({"error-message": f"Content-Type not supported. Use one of {allowed}"}, status=415) + return fn(*args, **kwargs) + return _wrap + return deco diff --git a/src/nbi/service/dscm_oc/error.py b/src/nbi/service/dscm_oc/error.py new file mode 100644 index 0000000000000000000000000000000000000000..3b1873e8ba9e400586f1612ab2b48d5789e4c007 --- /dev/null +++ b/src/nbi/service/dscm_oc/error.py @@ -0,0 +1,35 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +from flask import Response + +YANG_JSON = "application/yang-data+json" +ERR_JSON = "application/yang-errors+json" + + +def yang_json(data, status=200): + return Response(json.dumps(data, ensure_ascii=False), status=status, mimetype=YANG_JSON) + +def yang_error(err_dict, status=400): + body = {"errors": {"error": [err_dict]}} + return Response(json.dumps(body, ensure_ascii=False), status=status, mimetype=ERR_JSON) + +def _bad_request(msg, path=None): + return yang_error({"error-type": "protocol", "error-tag": "operation-failed", + "error-message": msg, **({"error-path": path} if path else {})}, status=400) + +def _not_found(msg, path=None): + return yang_error({"error-type": "application", "error-tag": "data-missing", + "error-message": msg, **({"error-path": path} if path else {})}, status=404) diff --git a/src/nbi/service/dscm_oc/json_to_proto_conversion.py b/src/nbi/service/dscm_oc/json_to_proto_conversion.py new file mode 100644 index 0000000000000000000000000000000000000000..d8eb2bbad700b3d1d8558403d8d54dfab4b2b57f --- /dev/null +++ b/src/nbi/service/dscm_oc/json_to_proto_conversion.py @@ -0,0 +1,239 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Helper functions to convert JSON payload from RESTCONF to Pluggables proto messages. +""" + +from typing import Dict, Any +from common.proto import pluggables_pb2 + + +def json_to_get_pluggable_request( + device_uuid: str, + pluggable_index: int = -1, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL # pyright: ignore[reportInvalidTypeForm] +) -> pluggables_pb2.GetPluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a GetPluggableRequest proto message. + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + view_level: View level (VIEW_CONFIG, VIEW_STATE, VIEW_FULL, VIEW_UNSPECIFIED) + Returns: + GetPluggableRequest proto message + """ + request = pluggables_pb2.GetPluggableRequest() + request.id.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.id.pluggable_index = pluggable_index # type: ignore[attr-defined] + request.view_level = view_level # type: ignore[attr-defined] + return request + + +def json_to_list_pluggables_request( + device_uuid: str, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL # pyright: ignore[reportInvalidTypeForm] +) -> pluggables_pb2.ListPluggablesRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a ListPluggablesRequest proto message. + Args: + device_uuid: UUID of the device to filter by + view_level: View level (VIEW_CONFIG, VIEW_STATE, VIEW_FULL, VIEW_UNSPECIFIED) + Returns: + ListPluggablesRequest proto message + """ + request = pluggables_pb2.ListPluggablesRequest() + request.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.view_level = view_level # type: ignore[attr-defined] + return request + + +def json_to_delete_pluggable_request( + device_uuid: str, + pluggable_index: int = -1 +) -> pluggables_pb2.DeletePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a DeletePluggableRequest proto message. + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + Returns: + DeletePluggableRequest proto message + """ + request = pluggables_pb2.DeletePluggableRequest() + request.id.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.id.pluggable_index = pluggable_index # type: ignore[attr-defined] + return request + + +def json_to_create_pluggable_request( + device_uuid: str, + initial_config: Dict[str, Any], + preferred_pluggable_index: int = -1 +) -> pluggables_pb2.CreatePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Convert JSON initial_config to CreatePluggableRequest proto message. + Args: + device_uuid: UUID of the device + initial_config: JSON initial_config from RESTCONF request + preferred_pluggable_index: Preferred pluggable slot index (-1 for auto) + Returns: + CreatePluggableRequest proto message + """ + request = pluggables_pb2.CreatePluggableRequest() + request.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.preferred_pluggable_index = preferred_pluggable_index # type: ignore[attr-defined] + + # If initial_config contains configuration, add it as initial_config + if initial_config: + request.initial_config.id.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.initial_config.id.pluggable_index = preferred_pluggable_index # type: ignore[attr-defined] + + if "digital_subcarriers_groups" in initial_config: # (HUB format) + _add_dsc_groups_from_hub_format( + request.initial_config, device_uuid, preferred_pluggable_index, initial_config) # type: ignore[attr-defined] + elif "channels" in initial_config: # (LEAF format) + _add_dsc_groups_from_leaf_format( + request.initial_config, device_uuid, preferred_pluggable_index, initial_config) # type: ignore[attr-defined] + return request + + +def json_to_configure_pluggable_request( + device_uuid: str, + payload: Dict[str, Any], + pluggable_index: int = -1, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL, # pyright: ignore[reportInvalidTypeForm] + apply_timeout_seconds: int = 30 +) -> pluggables_pb2.ConfigurePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Convert JSON payload to ConfigurePluggableRequest proto message. + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable to configure + payload: JSON payload from RESTCONF request + view_level: View level for response + apply_timeout_seconds: Timeout in seconds for applying configuration + Returns: + ConfigurePluggableRequest proto message + """ + request = pluggables_pb2.ConfigurePluggableRequest() + request.config.id.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + request.config.id.pluggable_index = pluggable_index # type: ignore[attr-defined] + request.view_level = view_level # type: ignore[attr-defined] + request.apply_timeout_seconds = apply_timeout_seconds # type: ignore[attr-defined] + + if "digital_subcarriers_groups" in payload: # (HUB format) + _add_dsc_groups_from_hub_format( + request.config, device_uuid, pluggable_index, payload) # type: ignore[attr-defined] + elif "channels" in payload: # (LEAF format) + _add_dsc_groups_from_leaf_format( + request.config, device_uuid, pluggable_index, payload) # type: ignore[attr-defined] + return request + + +def _add_dsc_groups_from_hub_format( + config: pluggables_pb2.DigitalSubcarrierGroupConfig, # pyright: ignore[reportInvalidTypeForm] + device_uuid: str, + pluggable_index: int, + payload: Dict[str, Any] +) -> None: + """ + Add DSC groups from HUB format JSON payload. + """ + dsc_groups = payload.get("digital_subcarriers_groups", []) + + for group_data in dsc_groups: + group_id = group_data.get("group_id", 0) + + dsc_group = config.dsc_groups.add() # type: ignore[attr-defined] + dsc_group.id.pluggable.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + dsc_group.id.pluggable.pluggable_index = pluggable_index # type: ignore[attr-defined] + dsc_group.id.group_index = group_id # type: ignore[attr-defined] + + # Set group parameters from payload + # For HUB, these are at the top level + dsc_group.group_capacity_gbps = 400.0 # type: ignore[attr-defined] # Default + dsc_group.subcarrier_spacing_mhz = 75.0 # type: ignore[attr-defined] # Default + + # Process digital subcarriers + subcarrier_list = group_data.get("digital-subcarrier-id", []) + dsc_group.group_size = len(subcarrier_list) # type: ignore[attr-defined] + + for subcarrier_data in subcarrier_list: + subcarrier_id = subcarrier_data.get("subcarrier-id", 0) + is_active = subcarrier_data.get("active", False) + + subcarrier = dsc_group.subcarriers.add() # type: ignore[attr-defined] + subcarrier.id.group.pluggable.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + subcarrier.id.group.pluggable.pluggable_index = pluggable_index # type: ignore[attr-defined] + subcarrier.id.group.group_index = group_id # type: ignore[attr-defined] + subcarrier.id.subcarrier_index = subcarrier_id # type: ignore[attr-defined] + subcarrier.active = is_active # type: ignore[attr-defined] + + # Set frequency and power from top-level payload + if "frequency" in payload: + subcarrier.center_frequency_hz = float(payload["frequency"]) # type: ignore[attr-defined] + + if "target_output_power" in payload: + subcarrier.target_output_power_dbm = float(payload["target_output_power"]) # type: ignore[attr-defined] + + # Default symbol rate + subcarrier.symbol_rate_baud = 64000000000 # type: ignore[attr-defined] + + +def _add_dsc_groups_from_leaf_format( + config: pluggables_pb2.DigitalSubcarrierGroupConfig, # pyright: ignore[reportInvalidTypeForm] + device_uuid: str, + pluggable_index: int, + payload: Dict[str, Any] +) -> None: + """ + Add DSC groups from LEAF format JSON payload. + """ + channels = payload.get("channels", []) + + for channel_idx, channel_data in enumerate(channels): + dsc_groups = channel_data.get("digital_subcarriers_groups", []) + + for group_data in dsc_groups: + group_id = group_data.get("group_id", channel_idx) + + # Create DSC group (protobuf repeated field operations) + dsc_group = config.dsc_groups.add() # type: ignore[attr-defined] + dsc_group.id.pluggable.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + dsc_group.id.pluggable.pluggable_index = pluggable_index # type: ignore[attr-defined] + dsc_group.id.group_index = group_id # type: ignore[attr-defined] + + # Set group parameters + dsc_group.group_capacity_gbps = 400.0 # type: ignore[attr-defined] # Default + dsc_group.subcarrier_spacing_mhz = 75.0 # type: ignore[attr-defined] # Default + dsc_group.group_size = 1 # type: ignore[attr-defined] # Default for LEAF + + # Create a single subcarrier for this channel + subcarrier = dsc_group.subcarriers.add() # type: ignore[attr-defined] + subcarrier.id.group.pluggable.device.device_uuid.uuid = device_uuid # type: ignore[attr-defined] + subcarrier.id.group.pluggable.pluggable_index = pluggable_index # type: ignore[attr-defined] + subcarrier.id.group.group_index = group_id # type: ignore[attr-defined] + subcarrier.id.subcarrier_index = 0 # type: ignore[attr-defined] + subcarrier.active = True # type: ignore[attr-defined] # Default for LEAF channels + + # Set frequency and power from channel data + if "frequency" in channel_data: + subcarrier.center_frequency_hz = float(channel_data["frequency"]) # type: ignore[attr-defined] # MHz to Hz + + if "target_output_power" in channel_data: + subcarrier.target_output_power_dbm = float(channel_data["target_output_power"]) # type: ignore[attr-defined] + + # Default symbol rate + subcarrier.symbol_rate_baud = 64000000000 # type: ignore[attr-defined] # 64 GBaud diff --git a/src/nbi/service/dscm_oc/routes.py b/src/nbi/service/dscm_oc/routes.py new file mode 100644 index 0000000000000000000000000000000000000000..e0ca2766f56fe29349adfd83131b6310e66a9cd8 --- /dev/null +++ b/src/nbi/service/dscm_oc/routes.py @@ -0,0 +1,145 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from .enforce_header import require_accept, require_content_type +from .error import _bad_request, _not_found, yang_json +from .json_to_proto_conversion import ( + json_to_create_pluggable_request, + json_to_delete_pluggable_request, + json_to_get_pluggable_request, + json_to_list_pluggables_request, +) +from common.method_wrappers.ServiceExceptions import ( + ServiceException, + NotFoundException, + AlreadyExistsException, + InvalidArgumentException +) +from common.tools.grpc.Tools import grpc_message_to_json +from flask import Blueprint, request, Response +from pluggables.client.PluggablesClient import PluggablesClient + + +LOGGER = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +blueprint = Blueprint("testconf_dscm", __name__) + +YANG_JSON = "application/yang-data+json" +ERR_JSON = "application/yang-errors+json" + + +# Root endpoints (both prefixes) TODO: call list pluggables if device_uuid is given +# @blueprint.route("/device=/", methods=["GET"]) +# @blueprint.route("/", methods=["GET"], defaults={'device_uuid': None}) +# @require_accept([YANG_JSON]) +# def list_root(device_uuid=None): +# """List top-level modules/containers available.""" +# # TODO: If device_uuid is given, call ListPluggables gRPC method +# return + + +@blueprint.route("/device=/", methods=["GET"]) +@require_accept([YANG_JSON]) +def rc_get(rc_path, device_uuid=None): + LOGGER.info(f"GET request for path: {rc_path} on device UUID: {device_uuid}") + + if device_uuid is None: + return _bad_request("Device UUID must be specified for GET requests.", path=rc_path) + pluggables_client = PluggablesClient() + + try: + get_request = json_to_get_pluggable_request(device_uuid) + pluggable = pluggables_client.GetPluggable(get_request) + LOGGER.info(f"Successfully retrieved pluggable for device {device_uuid}") + response_data = grpc_message_to_json(pluggable) + return yang_json(response_data) + + except NotFoundException as e: + LOGGER.warning(f"Pluggable not found for device {device_uuid}: {e.details}") + return _not_found(f"Pluggable not found: {e.details}", path=rc_path) + + except ServiceException as e: + LOGGER.error(f"Unexpected error getting pluggable for device {device_uuid}: {str(e)}", exc_info=True) + return _bad_request(f"Failed to get pluggable: {str(e)}", path=rc_path) + + finally: + pluggables_client.close() + +@blueprint.route("/device=/", methods=["POST"]) +@require_accept([YANG_JSON]) +@require_content_type([YANG_JSON]) +def rc_post(rc_path, device_uuid=None): + if device_uuid is None: + return _bad_request("Device UUID must be specified for POST requests.", path=rc_path) + + payload = request.get_json(force=True, silent=True) + if payload is None: + return _bad_request("Invalid or empty JSON payload.", path=rc_path) + + try: + create_request = json_to_create_pluggable_request( + device_uuid = device_uuid, + initial_config = payload, + ) + + pluggables_client = PluggablesClient() + try: + pluggable = pluggables_client.CreatePluggable(create_request) + LOGGER.info(f"Successfully created pluggable for device {device_uuid}") + response_data = grpc_message_to_json(pluggable) + + return yang_json(response_data, status=201) + finally: + pluggables_client.close() + + except AlreadyExistsException as e: + LOGGER.warning(f"Pluggable already exists for device {device_uuid}: {e.details}") + return _bad_request(f"Pluggable already exists: {e.details}", path=rc_path) + + except InvalidArgumentException as e: + LOGGER.warning(f"Invalid argument creating pluggable for device {device_uuid}: {e.details}") + return _bad_request(f"Invalid argument: {e.details}", path=rc_path) + + except ServiceException as e: + LOGGER.error(f"Unexpected error creating pluggable for device {device_uuid}: {str(e)}", exc_info=True) + return _bad_request(f"Failed to create pluggable: {str(e)}", path=rc_path) + +@blueprint.route("/device=/", methods=["DELETE"]) +@require_accept([YANG_JSON]) +def rc_delete(rc_path, device_uuid=None): + LOGGER.info(f"DELETE request for path: {rc_path} on device UUID: {device_uuid}") + + if device_uuid is None: + return _bad_request("Device UUID must be specified for DELETE requests.", path=rc_path) + + pluggables_client = PluggablesClient() + try: + # Delete specific pluggable + delete_request = json_to_delete_pluggable_request(device_uuid) + pluggables_client.DeletePluggable(delete_request) + LOGGER.info(f"Successfully deleted pluggable for device {device_uuid}") + return Response(status=204) + + except NotFoundException as e: + LOGGER.warning(f"Pluggable not found for device {device_uuid}: {e.details} (already deleted or never existed)") + return Response(status=204) + + except ServiceException as e: + LOGGER.error(f"Unexpected error deleting pluggable for device {device_uuid}: {str(e)}", exc_info=True) + return _bad_request(f"Failed to delete pluggable: {str(e)}", path=rc_path) + + finally: + pluggables_client.close() diff --git a/src/nbi/service/e2e_services/Resources.py b/src/nbi/service/e2e_services/Resources.py index 1e35b7610a581c62b3d88e47f861d58dc0302adb..6d496b3736d495911fe2414a9b409910a5568699 100644 --- a/src/nbi/service/e2e_services/Resources.py +++ b/src/nbi/service/e2e_services/Resources.py @@ -11,39 +11,81 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import logging +import ast +import json +import logging import requests -from flask_restful import Resource, request +from flask_restful import Resource from common.Constants import DEFAULT_CONTEXT_NAME from service.client.ServiceClient import ServiceClient from .Tools import grpc_service_id +from concurrent.futures import ThreadPoolExecutor +import requests +import threading LOGGER = logging.getLogger(__name__) + +HEADERS = { + "Accept": "application/yang-data+json", + "Content-Type": "application/yang-data+json" +} + +headers = { + "Content-Type": "application/json", + "Expect": "" +} + class E2EInfoDelete(Resource): def __init__(self): super().__init__() self.service_client = ServiceClient() def delete(self, allocationId: str): - LOGGER.info("Received DELETE request for allocationId: %s", allocationId) - - service_type = None - if 'ipowdm' in allocationId: service_type = 'IPoWDM' - LOGGER.info("Service type identified as: %s", service_type) - - if service_type == 'TAPI_LSP': - delete_media_channel_id = allocationId.split(':')[-1] - allocationId = allocationId.split('=')[1].split(':')[0] - url = f'http://11.1.1.101:4900/{allocationId}/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service={delete_media_channel_id}' - allocationId = delete_media_channel_id - requests.delete(url, timeout=10) - elif service_type == 'IPoWDM': - aux = allocationId - allocationId = allocationId.split('=')[1].split(':')[0] - url = f'http://10.95.86.62/restconf/E2E/v1/service/{aux}' - requests.delete(url, timeout=10) + service_id = "" + if 'ipowdm' in allocationId: + service_id = allocationId.split('=')[1].split(':')[0].split('[[')[0] + nodes_str = allocationId.split('[[')[1].split(']]')[0] + nodes_list_str = nodes_str + ']' + nodes = ast.literal_eval(nodes_list_str) + data_str = allocationId.split(':', 1)[1] + data = json.loads(data_str) + components = data.get("components", []) + + src = nodes[0] + dst_list = nodes[1:] + services = [f"L3VPN_{src}_{dst}" for dst in dst_list] + for service in services: + url = f"http://192.168.202.254:80/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={service}" + response = requests.delete(url=url) + LOGGER.debug(f"RESPONSE :\n {response}") + + for i, device in enumerate(components): + if i >= len(nodes): + LOGGER.warning(f"Index {i} exceeds nodes list length {len(nodes)}") + break + name = nodes[i] + if name == "T2.1":device["frequency"]= 195000000 + if name == "T1.1":device["frequency"]= 195006250 + if name == "T1.2":device["frequency"]= 195018750 + if name == "T1.3":device["frequency"]= 195031250 + + LOGGER.debug(f"NODE TO DELETE: \n{name}:{device}") + response = test_patch_optical_channel_frequency(device, name) + LOGGER.debug(f"RESPONSE :\n {response}") + elif 'tapi_lsp' in allocationId: + service_id = str(allocationId.split('=')[1]) + service_id_list = [s.strip() for s in service_id.split(',')] + service_id = service_id_list[0] + + LOGGER.info("Service ID list: %s", service_id_list) + + executor = ThreadPoolExecutor(max_workers=len(service_id_list)) + for key in service_id_list: + executor.submit(delete_slice, key, headers) + + threading.Thread(target=executor.shutdown, kwargs={'wait': True}).start() else: LOGGER.error("Unknown service type for allocationId: %s", allocationId) return { @@ -51,11 +93,36 @@ class E2EInfoDelete(Resource): 'message': 'Unknown service type', }, 400 - - service_id = grpc_service_id(DEFAULT_CONTEXT_NAME, allocationId) + service_id = grpc_service_id(DEFAULT_CONTEXT_NAME, service_id) self.service_client.DeleteService(service_id) return { 'status': 'Service deleted', 'allocationId': allocationId, }, 200 + +def delete_slice(key, headers): + url_delete_slice = f'http://172.24.36.54:4900/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service={key}' + try: + response = requests.delete(url=url_delete_slice, headers=headers, timeout=300) + LOGGER.info("Key: %s", key) + LOGGER.info("Response Status code: %s", response.status_code) + LOGGER.info("Response Text: %s", response.text) + except requests.exceptions.RequestException as e: + LOGGER.info(f"ERROR request to delete slice {key} failed: {e}") + +def test_patch_optical_channel_frequency(data, DEVICE_ID): + """Test PATCH to update optical channel frequency.""" + # Use simple path with / and encode manually for component name + encoded_path = f"http://192.168.202.254:80/restconf/data/device={DEVICE_ID}/openconfig-platform:components/component=channel-1/optical-channel/config" + + # Update frequency + patch_data = data + + response = requests.patch(f"{encoded_path}", + json=patch_data, + headers=HEADERS) + assert response.status_code == 200 + + # Validate restoration + return response diff --git a/src/nbi/service/e2e_services/__init__.py b/src/nbi/service/e2e_services/__init__.py index d90f352f311ff460e044b93e25f36c7b0809a451..5adbcd9c98394f107f1b19e45e412cbe88ec65bf 100644 --- a/src/nbi/service/e2e_services/__init__.py +++ b/src/nbi/service/e2e_services/__init__.py @@ -11,6 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + from nbi.service.NbiApplication import NbiApplication from .Resources import E2EInfoDelete diff --git a/src/nbi/service/ietf_acl/Acls.py b/src/nbi/service/ietf_acl/Acls.py index c537c8172cde6c0a9a796cc61e56e48cda65dfe7..e966f2c0c0fda057dfdf3c5d397c10b667f69d40 100644 --- a/src/nbi/service/ietf_acl/Acls.py +++ b/src/nbi/service/ietf_acl/Acls.py @@ -46,12 +46,11 @@ def compose_interface_direction_acl_rules( if acl_set is None: MSG = 'Interface({:s})/{:s}/AclSet({:s}) not found' raise NotFound(MSG.format( - str(interface_name), acl_direction_title, - str(acl_set_name) + str(interface_name), acl_direction_title, str(acl_set_name) )) acl_config_rule = config_rule_from_ietf_acl( - device_name, interface_name, acl_set + device_name, interface_name, acl_direction, acl_set ) MSG = 'Adding {:s} ACL Config Rule: {:s}' LOGGER.info(MSG.format( @@ -114,17 +113,19 @@ class Acls(Resource): interface_data = interface_name__to__interface_data.get(interface_name) if interface_data is None: continue - ingress_acl_config_rules = compose_interface_direction_acl_rules( - device_name, interface_name, interface_data, AclDirectionEnum.INGRESS, - acl_name__to__acl_data - ) - device.device_config.config_rules.extend(ingress_acl_config_rules) - - egress_acl_config_rules = compose_interface_direction_acl_rules( - device_name, interface_name, interface_data, AclDirectionEnum.EGRESS, - acl_name__to__acl_data - ) - device.device_config.config_rules.extend(egress_acl_config_rules) + if 'ingress' in interface_data: + ingress_acl_config_rules = compose_interface_direction_acl_rules( + device_name, interface_name, interface_data, AclDirectionEnum.INGRESS, + acl_name__to__acl_data + ) + device.device_config.config_rules.extend(ingress_acl_config_rules) + + if 'egress' in interface_data: + egress_acl_config_rules = compose_interface_direction_acl_rules( + device_name, interface_name, interface_data, AclDirectionEnum.EGRESS, + acl_name__to__acl_data + ) + device.device_config.config_rules.extend(egress_acl_config_rules) device_client = DeviceClient() device_client.ConfigureDevice(device) diff --git a/src/nbi/service/ietf_acl/ietf_acl_parser.py b/src/nbi/service/ietf_acl/ietf_acl_parser.py index b7977fe35ea852c67d5cc2f1c8fa763099f59049..7305775b8f83392afc9902e350729073ada1a6fd 100644 --- a/src/nbi/service/ietf_acl/ietf_acl_parser.py +++ b/src/nbi/service/ietf_acl/ietf_acl_parser.py @@ -17,12 +17,13 @@ from typing import List, Dict, Optional from pydantic import BaseModel, Field from werkzeug.exceptions import NotImplemented from common.proto.acl_pb2 import AclForwardActionEnum, AclRuleTypeEnum, AclEntry -from common.proto.context_pb2 import ConfigActionEnum, ConfigRule +from common.proto.context_pb2 import ConfigActionEnum, ConfigRule, AclDirectionEnum as Proto_AclDirectionEnum class AclDirectionEnum(Enum): + BOTH = 'both' INGRESS = 'ingress' - EGRESS = 'egress' + EGRESS = 'egress' class Ipv4(BaseModel): @@ -117,7 +118,8 @@ IETF_TFS_RULE_TYPE_MAPPING = { IETF_TFS_FORWARDING_ACTION_MAPPING = { 'accept': 'ACLFORWARDINGACTION_ACCEPT', - 'drop': 'ACLFORWARDINGACTION_DROP', + 'drop' : 'ACLFORWARDINGACTION_DROP', + 'reject': 'ACLFORWARDINGACTION_REJECT', } TFS_IETF_RULE_TYPE_MAPPING = { @@ -127,19 +129,29 @@ TFS_IETF_RULE_TYPE_MAPPING = { TFS_IETF_FORWARDING_ACTION_MAPPING = { 'ACLFORWARDINGACTION_ACCEPT': 'accept', - 'ACLFORWARDINGACTION_DROP': 'drop', + 'ACLFORWARDINGACTION_DROP' : 'drop', + 'ACLFORWARDINGACTION_REJECT': 'reject', } def config_rule_from_ietf_acl( - device_name: str, endpoint_name: str, acl_set_data: Dict + device_name : str, endpoint_name : str, acl_direction : AclDirectionEnum, + acl_set_data : Dict ) -> ConfigRule: acl_config_rule = ConfigRule() acl_config_rule.action = ConfigActionEnum.CONFIGACTION_SET + acl_endpoint_id = acl_config_rule.acl.endpoint_id acl_endpoint_id.device_id.device_uuid.uuid = device_name acl_endpoint_id.endpoint_uuid.uuid = endpoint_name + if acl_direction == AclDirectionEnum.INGRESS: + acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_INGRESS + elif acl_direction == AclDirectionEnum.EGRESS: + acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_EGRESS + else: + acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_BOTH + acl_name = acl_set_data['name'] acl_type = acl_set_data['type'] if acl_type.startswith('ietf-access-control-list:'): diff --git a/src/nbi/service/ietf_l3vpn/Handlers.py b/src/nbi/service/ietf_l3vpn/Handlers.py index 268ec49afef8bc3703ee59389eea9ea65e2b8449..c5efc0d5aeda317a25d641a3b77a85fa6df5c159 100644 --- a/src/nbi/service/ietf_l3vpn/Handlers.py +++ b/src/nbi/service/ietf_l3vpn/Handlers.py @@ -58,8 +58,8 @@ def update_service_endpoint( vlan_tag : int, ipv4_address : str, neighbor_ipv4_address : str, ipv4_prefix_length : int, capacity_gbps : Optional[float] = None, e2e_latency_ms : Optional[float] = None, availability : Optional[float] = None, mtu : Optional[int] = None, - static_routing : Optional[Dict[Tuple[str, str], str]] = None, - context_uuid : Optional[str] = DEFAULT_CONTEXT_NAME, + static_routing : Optional[Dict[Tuple[str, int, int], str]] = None, + context_uuid : Optional[str] = DEFAULT_CONTEXT_NAME, ) -> Optional[Exception]: context_client = ContextClient() service = get_service_by_uuid(context_client, service_uuid, context_uuid=context_uuid, rw_copy=True) @@ -111,11 +111,14 @@ def update_service_endpoint( return e def process_site_network_access( - site_id : str, network_access : Dict, site_static_routing : Dict[Tuple[str, str], str], errors : List[Dict] + site_id : str, network_access : Dict, site_static_routing : Dict[Tuple[str, int, int], str], errors : List[Dict] ) -> None: endpoint_uuid = network_access['site-network-access-id'] - if network_access['site-network-access-type'] != 'ietf-l3vpn-svc:multipoint': + if 'ietf-l3vpn-svc' in network_access['site-network-access-type']: + # replace 'ietf-l3vpn-svc:multipoint' with 'multipoint' for backward compatibility + network_access['site-network-access-type'] = network_access['site-network-access-type'].replace('ietf-l3vpn-svc:', '') + if network_access['site-network-access-type'] != 'multipoint': MSG = 'Site Network Access Type: {:s}' raise NotImplementedError(MSG.format(str(network_access['site-network-access-type']))) @@ -129,7 +132,10 @@ def process_site_network_access( raise NotImplementedError(MSG.format(str(network_access['site-network-access-type']))) ipv4_allocation = network_access['ip-connection']['ipv4'] - if ipv4_allocation['address-allocation-type'] != 'ietf-l3vpn-svc:static-address': + if 'ietf-l3vpn-svc' in ipv4_allocation['address-allocation-type']: + # replace 'ietf-l3vpn-svc:static-address' with 'static-address' for backward compatibility + ipv4_allocation['address-allocation-type'] = ipv4_allocation['address-allocation-type'].replace('ietf-l3vpn-svc:', '') + if ipv4_allocation['address-allocation-type'] != 'static-address': MSG = 'Site Network Access IPv4 Allocation Type: {:s}' raise NotImplementedError(MSG.format(str(ipv4_allocation['address-allocation-type']))) ipv4_allocation_addresses = ipv4_allocation['addresses'] @@ -171,7 +177,10 @@ def process_site_network_access( MSG = 'Site Network Access QoS Class Id: {:s}' raise NotImplementedError(MSG.format(str(qos_profile_class['class-id']))) - if qos_profile_class['direction'] != 'ietf-l3vpn-svc:both': + if 'ietf-l3vpn-svc' in qos_profile_class['direction']: + # replace 'ietf-l3vpn-svc:both' with 'both' for backward compatibility + qos_profile_class['direction'] = qos_profile_class['direction'].replace('ietf-l3vpn-svc:', '') + if qos_profile_class['direction'] != 'both': MSG = 'Site Network Access QoS Class Direction: {:s}' raise NotImplementedError(MSG.format(str(qos_profile_class['direction']))) @@ -189,16 +198,21 @@ def process_site_network_access( def process_site(site : Dict, errors : List[Dict]) -> None: site_id = site['site-id'] + # this change is made for ECOC2025 demo purposes if site['management']['type'] != 'ietf-l3vpn-svc:provider-managed': + # if site['management']['type'] == 'customer-managed': MSG = 'Site Management Type: {:s}' raise NotImplementedError(MSG.format(str(site['management']['type']))) # site_static_routing: (lan-range, lan-prefix-len, lan-tag) => next-hop - site_static_routing : Dict[Tuple[str, str], str] = {} + site_static_routing : Dict[Tuple[str, int, int], str] = {} site_routing_protocols : Dict = site.get('routing-protocols', dict()) site_routing_protocol : List = site_routing_protocols.get('routing-protocol', list()) for rt_proto in site_routing_protocol: - if rt_proto['type'] != 'ietf-l3vpn-svc:static': + if 'ietf-l3vpn-svc' in rt_proto['type']: + # replace 'ietf-l3vpn-svc:static' with 'static' for backward compatibility + rt_proto['type'] = rt_proto['type'].replace('ietf-l3vpn-svc:', '') + if rt_proto['type'] != 'static': MSG = 'Site Routing Protocol Type: {:s}' raise NotImplementedError(MSG.format(str(rt_proto['type']))) diff --git a/src/nbi/service/ietf_network/Networks.py b/src/nbi/service/ietf_network/Networks.py index ec124632bb0fa542f30fa99c1a0efedf039989de..e8a69c449e23e84be292b2753e0d3077337e338f 100644 --- a/src/nbi/service/ietf_network/Networks.py +++ b/src/nbi/service/ietf_network/Networks.py @@ -74,7 +74,7 @@ class Networks(Resource): # TODO: improve these workarounds to enhance performance json_response = json.loads(pybindJSON.dumps(ietf_nets, mode='ietf')) - + # Workaround; pyangbind does not allow to set otn_topology / eth-tran-topology manual_fixes(json_response) elif USE_RENDERER == Renderer.LIBYANG.value: diff --git a/src/nbi/service/ietf_network/YangHandler.py b/src/nbi/service/ietf_network/YangHandler.py index 3ef718a64aac132bf23843d3df7e0dd2cf0ae77c..ea702934fd4c8f2f97b151b3b5825542d40b2d08 100644 --- a/src/nbi/service/ietf_network/YangHandler.py +++ b/src/nbi/service/ietf_network/YangHandler.py @@ -38,12 +38,12 @@ class YangHandler: network = networks.create_path(f'network[network-id="{te_topology_name}"]') network.create_path('network-id', te_topology_name) - network_types = network.create_path('network-types') - network_types.create_path('ietf-l3-unicast-topology:l3-unicast-topology') + network_types = network.create_path('network-types') + network_types.create_path('ietf-l3-unicast-topology:l3-unicast-topology') name_mappings = NameMappings() - for device in topology_details.devices: + for device in topology_details.devices: self.compose_node(device, name_mappings, network) for link in topology_details.links: @@ -51,7 +51,7 @@ class YangHandler: return json.loads(networks.print_mem('json')) - def compose_node(self, dev: Device, name_mappings: NameMappings, network: Any) -> None: + def compose_node(self, dev: Device, name_mappings: NameMappings, network: Any) -> None: device_name = dev.name name_mappings.store_device_name(dev) diff --git a/src/nbi/service/ietf_network_slice/bindings/__init__.py b/src/nbi/service/ietf_network_slice/bindings/__init__.py index 1ce8327f5ad525b2bf49b9c84a229aa2d958bb57..ebcdd717ab70423deda85079ab469da83897efbe 100644 --- a/src/nbi/service/ietf_network_slice/bindings/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/__init__.py index eeddff20c41d9819c03c79232a7ec6e763b32239..232a40dd07b7c03f0ce4a08b6fba7634b991b6dc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/groups/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/groups/__init__.py index 43035855bbd9742ee0e38556a4fc9cbd411ba8ef..8f9cec53089fab54f5ab8e8d4b81ff25631eb6b1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/groups/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/groups/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/groups/group/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/groups/group/__init__.py index 25c76f6808935ff2ea0f188c10d02ccab648e9c4..5ffbb1991880ea5ff5a70f608a812fc12b3b8492 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/groups/group/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/groups/group/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/__init__.py index a4886cb86a625210cdc5b1bcba9413f525c1b81b..9512bb80063c9b8b7c2a43cfbaa90eda5624adc0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py index 955ce25383328c5f02d3c644fed415cc9a384b85..0e7f801e26eb707675c7a74bdf8dc22071f7442f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py index 2e904a74e9430d7b96a4b864721294797bc6c8e1..65afdd24ebed8e73930058c7de3a23cf17aa824b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py index 6dee458b28d386c8f0165ee3ae5ca8b8106bb5b1..f3aee3998af289a6e1c2582ec25d454755625f87 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py index 651b60be76807ce54114aab53f8edda043529f36..020ff68107b88620112384cf4063d18e0c75468f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py index 57c048d408159e02b9702486d7a2574e65d5b4e9..46e308b9257e69b50da34c2bffec0e6bf288104f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/__init__.py index 8441bdeb0694db003fee46ec8887a69331bed355..e6e79bd3bfb872f60cadaee3b0cee217a17b7f78 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py index e353bf60b5ee6aa3cf5d15722bb943ce2ed624ad..c55b113d696a7e7a18365c9395607b3ec4c8bc62 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py index 296b0c9c8f53142821807ee1c3b86cb36b202e8b..2d93ed4848e1a493b96cd98659ad965f92324a64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py index adb053989315379cc890bc0891981bf8a0a9255b..e32a6de222cc857feb5a7d452de66450f19702b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py index 4c3c0bba33f0ac654a4ad4f5f0150350de2fd3b1..9ab3dfddbeac8eea8c734790bbd46a6cb129b387 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py index e172ea22fccd98d865fb99a441e8849d67694cfa..1e444d181f0c11c7d0086a458d7cef7378cab6c3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py index 0de7b4ae596aaaf99209c82418dafb32fefefe1e..9f4ef5bab8f69fc2fcef5689c76c815a2bef16f1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py index 8c8e02942244f4961d0aafb9c4b128ee48d8148d..541ade643ba63523fda04ddd8e597e57eda5080c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py index 4224da0be010ed8f7e13f085c38ea1f3f3ace9d9..2d177391784b8c7b50ff59e93df07fffae1870f9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py index 447517ee1da2d271189eb6ac03faf7c66934d434..1f3cf9464eae30db9d25c1dfbd7e4f40b9805469 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py index 9b3e158596cf4aa62fd219f91742afa046d286a3..306bd9643da3b52a90cea6a0b1b90545ec838610 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py index b2b1f998e42cffeeebd9a89c8f64503831d3b65c..c554750de7292b0e682f86947878828b688e7dbf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py index e542083d84663afe77efc98b57401bca2ebdff89..07d50f95cbafc1a2d9b2b9847eb27f4df80b99e9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py index 36ed9c582b84713ae7d2ff3b5b5c961eefce64cd..230c81bb6e184010de90f18a63ae275314c856ad 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py index b8c97e698a3241058ea813f1aa37f9f0613aff9d..54775ed4ddd193a5c1b8c779dcce9cd58a4cd0d0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py index b27058bcda070017c573c2ac62e22c98e9501be7..6bc03c5dc6ebfa676e44c4b7de18a12cdf18a800 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py index bdf32c475add75b454b03f6e9b45e35f6b556593..76c7f221a31d5a87e963a5e08d0f50ea2619c818 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py index 297fdc436d5a324e011d4db71d10103b17fa86a5..4da57e17de2294656260cef31de9ac6672cadcbc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py index 639f8336ced845d0f4c8c459676f27144a2ef2e7..575fa1d7682839987a9d5f252da59eed8c6fe925 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py index fb95db32893dd51d33560d08fa461a1b8a81dbab..2aded7ebb357c11f5289706a112e28a005a67a7c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py index 23c354154783908636ae387f5e644275f76a7da8..ebf37924512f377553fdd505107ee0c650227101 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py index 9b3e158596cf4aa62fd219f91742afa046d286a3..306bd9643da3b52a90cea6a0b1b90545ec838610 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py index b2b1f998e42cffeeebd9a89c8f64503831d3b65c..c554750de7292b0e682f86947878828b688e7dbf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py index e542083d84663afe77efc98b57401bca2ebdff89..07d50f95cbafc1a2d9b2b9847eb27f4df80b99e9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py index 36ed9c582b84713ae7d2ff3b5b5c961eefce64cd..230c81bb6e184010de90f18a63ae275314c856ad 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py index fd09001989f239be28683e3662212a67a9928e5a..0c9611302ae417c18fc81e5223ef52cec52cd568 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py index 9ac75543b9cef16b0c4229c57bc16ac020404b92..96f536c265ef25654ebf86c79ce65528a63b7639 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py index bdf32c475add75b454b03f6e9b45e35f6b556593..76c7f221a31d5a87e963a5e08d0f50ea2619c818 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py index 297fdc436d5a324e011d4db71d10103b17fa86a5..4da57e17de2294656260cef31de9ac6672cadcbc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py index 639f8336ced845d0f4c8c459676f27144a2ef2e7..575fa1d7682839987a9d5f252da59eed8c6fe925 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py index 9b3e158596cf4aa62fd219f91742afa046d286a3..306bd9643da3b52a90cea6a0b1b90545ec838610 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py index b2b1f998e42cffeeebd9a89c8f64503831d3b65c..c554750de7292b0e682f86947878828b688e7dbf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py index f30bd594b6f890d6c41a71c26951c04b818397bc..b43464046230fb8c8f07a28b4e8c91f2ce38465b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py index 36ed9c582b84713ae7d2ff3b5b5c961eefce64cd..230c81bb6e184010de90f18a63ae275314c856ad 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py index e1385f4d0f397416f48a6293f343e83062c6cf0f..e611bb14bb46a5535271d9d454dc01ff125feaf1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py index 9ac75543b9cef16b0c4229c57bc16ac020404b92..96f536c265ef25654ebf86c79ce65528a63b7639 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py index bdf32c475add75b454b03f6e9b45e35f6b556593..76c7f221a31d5a87e963a5e08d0f50ea2619c818 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py index 297fdc436d5a324e011d4db71d10103b17fa86a5..4da57e17de2294656260cef31de9ac6672cadcbc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py index 639f8336ced845d0f4c8c459676f27144a2ef2e7..575fa1d7682839987a9d5f252da59eed8c6fe925 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py index 73ce59f0c595c23f1843bcfd8caf1762d50b1076..a32ca56022522cb51a33400cd8788f5b9ef4c427 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py index 3727a0a9b4f9300693fa6e89c523c7b493bea7c5..1a46b0e0bb03174563cbc2e022c12a709cc81378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py index 9f31168ac33bbb7a741f5527e8807e30d89e7745..402a9a9283d0b147917e8fb4142542272cc595ee 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py index a5bb242343b9510c3babe658d5687fd050e8437c..60fdf5a6aa296688340f8c20db3050a3eb5eda33 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py index 1ad33efea7f6765432dc979c4e02bd2ad2fa1127..30be918e120592b10a9b45c7691d4d09a5e559a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py index da51291e64f46be7bcfa387dd4c22644873208cc..eb3dc7faa44b65086e89bd424330fc40601dde9c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py index a4bf2a4babfdfd9a6878b464321dd019694cc919..8cb6b3aa43352bf497d696d33949e37fc16bf3b6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py index 1803594454aa66ca639ae483b23d5c75623bbfbb..cd537e19b20556aa4994e537fa4b183c4ac59891 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py index 644b85a6cb5851dcd73f41cbe4928706d9438006..0fcaf98bd3aaa244114f8f730ca8b9a9e65340e5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py index 438ecad18cf453c82f246c0b2e01b6c7867d1502..f39c2f9988d172d424c631462f9deb0eafb00455 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py index 7b4c7ea22540c575f2bca546c2c8f841f5a40fbc..41c2ae2c5927d7d335b9edb033beafe78caf39ef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py index bff2bb9c153ab12693b750b73213ace0797faf4e..b63287c912c67c0eee2d6d54f87e45e6b5772e8e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py index c397ebdd74959a116c4f420d7f1de67805052eba..5bb1f4bd64133251bfe32561bca5158c6e34b179 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py index 428e2dbee6177178cc516f50c7516de4a89ec7cc..49cf03ea9cbeaa049ced2c1a99d7a1ea4aff1ec8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py index ff3ba97325ed43f4a256a471b61d78dcd6317569..31a45f64040037e2a6f54240b4800584077e4ff0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py index 1803594454aa66ca639ae483b23d5c75623bbfbb..cd537e19b20556aa4994e537fa4b183c4ac59891 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py index 929407f497a9bcc46b4d63fe71284abb0aad353b..ca8c8a32244e270724720fd186bd94c67da233df 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py index 11f0d0d786a6787fe2296e1567b681d5ac864ba1..fdb0065e85e1983b796fe98b93d5d8ef0b117d68 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py index 438ecad18cf453c82f246c0b2e01b6c7867d1502..f39c2f9988d172d424c631462f9deb0eafb00455 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py index 620fcb65ba0b007d7a998b8b6a66d633ffb335d8..cec99e125486364a815119c3afad5ef4761c7cc8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py index b3ceabd8562fb89fba74c1567767161132b7cb5b..dc64c69b81a4314c4d78af27cc68f708ff0d48df 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py index cec33be52f6eea99ab416124615ffd284f3b785d..e813f22206eee0d488267a55363ce472ee7673c4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py index c397ebdd74959a116c4f420d7f1de67805052eba..5bb1f4bd64133251bfe32561bca5158c6e34b179 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py index 428e2dbee6177178cc516f50c7516de4a89ec7cc..49cf03ea9cbeaa049ced2c1a99d7a1ea4aff1ec8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py index ff3ba97325ed43f4a256a471b61d78dcd6317569..31a45f64040037e2a6f54240b4800584077e4ff0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py index 5d6e28b31589b748832c45afd4f1db3b75c1ec2c..02a4e0ccd08b26d513cb37ce43159628a57c54a9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py index 0eb9e966eab889db7f6983acec5bdb6503a856e5..c7b0c4ba5d497e9a52f5d6cd8740b46ee6f58428 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py index 637502c60b97e0dc7ba074411ffd051e75e0d59c..38be5671acc2d7ed2b063bfebb750fa0f199c55c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py index 8be09818ece8ad1e4863a37e3695bb8766e221db..bddc103f29c7c38910421c6b030b46478c75a6f1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py index 1e2ef07ed29711474f94764f2e2b30f7ee53a853..295aa1060e426948a9c340a21b507e1b0639576c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py index 361525f8b1b9fc28b95f3b6d6f53454737e75524..9597e79a9f8a9eb6f6df5991e072806efae5bf5e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py index 62c13c73d3921150c4c6dec83eca2b0fb187e33d..68cd304b42f3326626a06d24dcc15cd26d9c6494 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py index cc114d6147813bcffa28bed6c42359f7687b6ec2..e6445e883c451946e581115fd9a9273fd88e77b7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py index 9b3e158596cf4aa62fd219f91742afa046d286a3..306bd9643da3b52a90cea6a0b1b90545ec838610 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py index b2b1f998e42cffeeebd9a89c8f64503831d3b65c..c554750de7292b0e682f86947878828b688e7dbf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py index 39b030bcbe5ec1e26ae544823a11392e8f502c49..d1c08e962b06f1b03ffc83e143423f53cdb86473 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py index 36ed9c582b84713ae7d2ff3b5b5c961eefce64cd..230c81bb6e184010de90f18a63ae275314c856ad 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py index a1898734d977fde94a8f3bacbf382af2f3a39ffd..40d7be9e110d2314480672c1b9c65b554791dafc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py index b27058bcda070017c573c2ac62e22c98e9501be7..6bc03c5dc6ebfa676e44c4b7de18a12cdf18a800 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py index bdf32c475add75b454b03f6e9b45e35f6b556593..76c7f221a31d5a87e963a5e08d0f50ea2619c818 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py index 297fdc436d5a324e011d4db71d10103b17fa86a5..4da57e17de2294656260cef31de9ac6672cadcbc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py index 639f8336ced845d0f4c8c459676f27144a2ef2e7..575fa1d7682839987a9d5f252da59eed8c6fe925 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py index c1e5d9a4edc937e3bec9bef13912b46c5c25595c..dd5f0dce1241b9a846839e5fd414d64f780341a1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py index 8be09818ece8ad1e4863a37e3695bb8766e221db..bddc103f29c7c38910421c6b030b46478c75a6f1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py index c8c38236ce056f5a400e99b4d948f908f1a54f59..abda39cb3e1a85abcdb37881df851e40c7cc3bc6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py index 500ec92619ae5a6dcc32b14d34ccea0f40737191..213b1b84bce74bab6319c2953d30bbf7649b579f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py index f4558fd1bbb1dd822b32f445e66339143b2478e9..574cf554e870ab8c7c04cc7a7ef70fffb1399f4a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py index 94bd457d698c576c1f5b959ee1cf610d29c6d607..da6f73b2ff1bb6658be2c713f4b1c8faead0b1cf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py index 4bbee9dd66033a713b6da00dcf56ee91e9be9eee..0e53eada407bb79617288c93f181eb44e8746c21 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py index 36ed9c582b84713ae7d2ff3b5b5c961eefce64cd..230c81bb6e184010de90f18a63ae275314c856ad 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py index 5fc6a303a36a47ff9d3457f69556b935e1dee0db..a5349d2f9563ef06e02e1cf61ae6ba81af07789e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py index 9ac75543b9cef16b0c4229c57bc16ac020404b92..96f536c265ef25654ebf86c79ce65528a63b7639 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py index bdf32c475add75b454b03f6e9b45e35f6b556593..76c7f221a31d5a87e963a5e08d0f50ea2619c818 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py index 297fdc436d5a324e011d4db71d10103b17fa86a5..4da57e17de2294656260cef31de9ac6672cadcbc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/__init__.py index 829a50433257eb9a5584655e13f99d80dd214320..bc23279553b3181f572400c7eb66c9978f961425 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/__init__.py index 9d4ece4ea74f4c31d35b98a115e33517eafe1398..6356fd464947d32fed5c1f2b935ddf51e51ca128 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/__init__.py index 44ba6bd98295d3c48e92dacb5a6cfb176238e37d..fa985aa32d72b91e9aec35d28e828e87cc5d0b8f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/destination/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/destination/__init__.py index 09e7e7583fc57d75bcad193dfb593abfc02346d5..39c6acfade4cba852450d44228cf278fd284a346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/destination/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/destination/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/source/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/source/__init__.py index 5f37f2c29a0d1030c1f2634b065b62dbe6733dc3..361e262744e0970b6a57d8e9f4cd252a7e61e248 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/source/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/source/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py index 8cf3fcc8e94948a7f4fa93c5a7430049c3a5d3a6..c5c8f671d59e8c097d2a41fdc1d90be2c44d2861 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/__init__.py index 6c80a7e3152191c8b6b38c9618e7b49072b42b7a..a5f2301641a006617635c67c24eed5e8112f42d7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py index 651d9ad0743836b195f95a19d193acc233663f09..8fcae0cfb27d1676464bf474e2d8bdf0e3f38526 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py index 99efa3fb5f08dedddca2df887243ef74cf8198b4..6afe62a220e09a70eaf6acf6107dc6b939d86fee 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py index 20087ee95e5ecd1948d3cdf49a4a5751bb6dbbe7..1ffa2cd7e34f4eecd8bf4f396d7a4eaf2861e7aa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py index f5fb3a8768a7a0035ca00db0bb6e7e17de23d73a..e3ab212ba7b58066d6ce17e6dff67afe2e0d1cf8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py index 4758899a4fea940be6709d45f85641230259b579..f964388b304b77d160ea36e3366084e62a49ab88 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py index 4eb9596f6babe6de0e1f0b9108266fed242a5bc6..95cf7e5c1c732217903b8bf0d2cf6cd7471c1150 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py index 89077be905cdd8c4c862acc2d29662bc6072954b..e830deb1959b8c72b99d1ec000ff79e577361726 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py index 11983d935bb7a66b021733eb99e48ccf33da4c15..f96d871a8ecd91c5b0d970ee2cea63165c469d30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py index 7cfdd77bffc1ccb5983b51c0b80ce4ee7228ee82..e93a409b1b330cac3ea33d7c67baf185870f6977 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py index 04d31ad2e080990497efe7c49c7114d12b24a401..f5c0175d7a1770d778aa231355db4b8c91c5ad26 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py index 5354fe13e6dde61a2eefd3866e17d29bd14755cf..ad32fba62a14875c77061a34c0635dce979ec512 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py index c01e6ec6a9bb1e56c0081e4166af677aa037260b..9eac5d44ffbd214cdac33774be1a76a2dbf928aa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py index e009a37246936ab2045ab0ddd25f67f855d54a2a..8634f076eb837cc61d761cebcc7ad271ce8a774b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py index c92c7b9e1e3e7db8f65b4ee54b817da0c779bf08..919164eab26f63382dbabc4ae9435df0502dad6d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py index 968d401f366d3005a5d8cda261606b480e272da3..53a06becf8f78b9c747744b4ad6167866c6624f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py index 43b0c777f396ce9bb2c63e09b91942ce5f72c57a..df2ea88b9d55e8bf3aae7c9d2b6ccb8abb3aa907 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py index f9c1d141a1127dbb1f1e43d86c1ed2b347e6c86a..64eed911ea205bb2f9f4258d4c337c41a928b18d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py index 7aecfd9bad7b90745226b34cdc6bcd3354537c1b..daa35056c667e7b9b65ef20c106d32df325d9553 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py index 253f6b7f324045d3cbe94315c623a1650c9d44ec..5f66514335cb18090df66ee35acae6f2e692392c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py index 04d31ad2e080990497efe7c49c7114d12b24a401..f5c0175d7a1770d778aa231355db4b8c91c5ad26 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py index ce56898d373d62bea60122c428ec5202a16b3bdb..4e14fa05b3f9a1a06d9e0a9d9d34f0c93bf2f0f1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py index aaedda522742f2164959f090bf267285af0b5ab8..0d53a3d8f300fbde1e3c93b287968895d7bdb13a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py index 60cc483bfca459c15ceaf59f1695b504c786b2de..68e369035c7c152afc1b89f0ce67d0036bd456ea 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py index 9f0e311f823234f26e0d474e682bae647868bbcf..ec2252d8d6491d719303e2f66b30c8d0ade79c49 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py index 5354fe13e6dde61a2eefd3866e17d29bd14755cf..ad32fba62a14875c77061a34c0635dce979ec512 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py index c01e6ec6a9bb1e56c0081e4166af677aa037260b..9eac5d44ffbd214cdac33774be1a76a2dbf928aa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py index 24d80112a5857618b108fc413e2f5532cf0f5131..45e75bac3b0bb38c10a9ee1d4e480d869165b608 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py index c92c7b9e1e3e7db8f65b4ee54b817da0c779bf08..919164eab26f63382dbabc4ae9435df0502dad6d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py index 968d401f366d3005a5d8cda261606b480e272da3..53a06becf8f78b9c747744b4ad6167866c6624f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py index 43b0c777f396ce9bb2c63e09b91942ce5f72c57a..df2ea88b9d55e8bf3aae7c9d2b6ccb8abb3aa907 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py index f9c1d141a1127dbb1f1e43d86c1ed2b347e6c86a..64eed911ea205bb2f9f4258d4c337c41a928b18d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py index 78ef423bba5d1b3fa3b53e1b352e472d8f63ad73..4f15ef163fca46a9ac284b9f72627927ecbdaefd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py index ed635c2bbcd9aa08db82c44fb82a07b71715a70f..1743b834b20e56afb59489ae6fd8873981380413 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py index ef4c66a9a11288b9f73beb51bb55aacce369aab5..7d355d071bc8105e8318c51f352f0660b25e2022 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 635a53cb52cc3c1fddff4a4aa7531456661d03a8..35f11fe0084cd8f1eeb4901d48da4edf2545b529 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py index f63a6bff07a0ad221f5111610cc95c0a27588efb..b5d0c513caa859c49744b3388d1d08d4ef5b24b7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 34a7b45cc1ea419d4ebdc88b4aea977a4810b942..e60c1ab541956b3d62ad4a4095f9eb375ab9f0e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py index 3f481cdb5adcd93e124ab370f5cea07a7368a08a..f34e300f7d52fd043d68f63981f7928343f07b67 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py index 94c595725b80725776d1dea823dce5076560cf72..dfb86b109a13b30b65f7c200f2579b35255dd01a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py index 7aecfd9bad7b90745226b34cdc6bcd3354537c1b..daa35056c667e7b9b65ef20c106d32df325d9553 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py index ad317168f140e131179e6774022963459c556364..1810d340e4fb1f69e88a96ce056336e6ffd27259 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/__init__.py index 4a4fce484c23330a6e9f80465501b15ed317c9c3..c03ca9931130df718fd6b8eb9b3d7c9f2730cf8f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py index 951167fa07b78ba9cbdc02efa6ce728a3efd66fe..51a1b78aec7f8c4ca081b1ee484b1efaa69eaeac 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/__init__.py index 758a7e0a331379d960b5878e49c12a1bc5a620de..12b79c14345ad0e5ebf0144bf186e9bbcf8bf73c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py index c946dabadb72e6f2debf412559955ed8aa435da5..2d545b9c206e374a72a2ba53f96dcf6eb8df4118 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/__init__.py index be22df4039439e3275b7ff55649428fa77ff42e6..4d5bc09663fd06e5d5fdaf44a061a23adddb8664 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py index aac7b3acf8634789427ab387046e673a61c3666c..0f5f8f9ef1653b63d662722bedafb64b1ac6077d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py index 9fb753a1d0e019353d129a83f3484de1c43e30a8..d64456a5ad16f9074a5ae7072c3f80aaf0e4b280 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py index 87ed01e106a7560233cdcb41f274a5171264d1eb..da5a0070dedc74b83319aa127c6ce741d97786fc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py index ec322aff112906fa42559de9ea92be249570c14e..6add374d12e4646dcea6ffe7ecf92e360ab3e1cb 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py index 6486624f9daaaad05b919842131e28bbd81a407b..1230f5f8f0d3401a37fafda50e3c84b4f5ad4afd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py index be56b984df305b9174426cf043a51c72a36dd6a2..61388e679c66d2d062761f9291355968cd2eedff 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py index 0e76372276e9aab4a2c308403c1696c5d67c8512..18b0094852a5232baa0ed97c37666a3cc53c9418 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py index 502239d3ea98eac2557f64bc432fd10577eb2aa7..f7bbf71b7ab909c5166f2c68b9307db656048b15 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index 4f2b509861ae4676ad459bf3d0f8c45f327be06a..bbda439f230d00bc93ad2e727ac4a68a9fee7e47 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 573491548f562faa99328926d4bc12112cb988cf..1b1a8ff4099c1707f2bdbe6fb31255dd94751378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 34a7b45cc1ea419d4ebdc88b4aea977a4810b942..e60c1ab541956b3d62ad4a4095f9eb375ab9f0e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index 930b912099950a1f57b444cfb98cadae531cc8d8..895c80e7ee5302134691eed0b56b8c66a1ca116d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 34a7b45cc1ea419d4ebdc88b4aea977a4810b942..e60c1ab541956b3d62ad4a4095f9eb375ab9f0e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py index f240be1ce2f34a9cd43818ae8b7ac760d4a16991..e77707b12a81cd743c40feddc151215adcbb8e11 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py index 4c70f00d2b4b449e762d99b86b1a5e6f0ed1df74..cf1f779850e63326464eb1d7172952a74af58b63 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index 56eb60da5846332a1583d255378a1b4c27238b43..ae2f19bcd23c3fcef87704875ef8505f13277c9f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py index 45551ddebf14106b2983092be05580c8a7e07256..7656d28fa5bc2335ee34b2e7c7c3a32bc474742a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py index 4c70f00d2b4b449e762d99b86b1a5e6f0ed1df74..cf1f779850e63326464eb1d7172952a74af58b63 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py index 6c791afde38fd0bdb53b3518addff3834fc0f95d..01a0c07678fb590bdc57ad5ce5e2694f3c2ed24f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py index c25dc023092d4a407989f068d8ddc96e883dd0ad..00197662db4270289f16e712a202b029450f2f1b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 61c36913f51193ec26b4136a06a1ddf0a40b5841..526af416a15930ab37043156494d35eb07b61923 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 2ec5da1f9f269488520fbc8b546dc67ac2894821..09b31e1ed6e066945f18d41c86034f6e4ab9cf28 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py index ae89b6b3c1c152159860a966088badc509baa86e..5debb6069f5970419d20412341d3ee79f45d1657 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py index 1ecbaea57fb9c3c8c5460b10537c0c0c548dc492..aab2d885927c15e7f688b6d4a83fa8743d11a080 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py index d9631fe4e489e99da52b0303f57c541195530d51..c80c73933eb21211344fd5ea06ba783e72fdb4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py index ed635c2bbcd9aa08db82c44fb82a07b71715a70f..1743b834b20e56afb59489ae6fd8873981380413 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py index 81e9184235996cdc735673a26cd6836164cc3ab0..b5db9f66b76c6c1229693c4c9dcba5799b6ef5df 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 573491548f562faa99328926d4bc12112cb988cf..1b1a8ff4099c1707f2bdbe6fb31255dd94751378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index e08c97bda84c433f29489fbd04c982f55625eff9..341b04370b2a33f342187cd68b8adfa635b50ed2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py index 0ea042535a7a9cecf2c747380f1bd46a827b6ea4..a7e62bd75a80d27795f2cb0184ca5ab5890a870e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index da3404be850f79069df9a65c0508cedc3c6e32c0..9d887933696e541802a491060e0cc8b703ab872a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py index 3f481cdb5adcd93e124ab370f5cea07a7368a08a..f34e300f7d52fd043d68f63981f7928343f07b67 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py index 94c595725b80725776d1dea823dce5076560cf72..dfb86b109a13b30b65f7c200f2579b35255dd01a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py index 546817dac1b92ecc98cc8d0fda9d2dbc0d36e228..e675b17b51c20659aa269176cdc9123cf26c12ec 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py index a91e05652fcdca54a271558e3283666ac15c484c..6e787bfbae8edb7945ca079b93620f5ab0dc4487 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py index b746643f51e5a9d16ec00bb9d24067fa9b55c521..4e518989faa6721f94cba0e055f0e748eaf4acfc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index f3f808715167961bfa3c5bdb1f1e36d0db26a98d..320c5a5fa71aa9ff2c9544807e88e6aff2c41573 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 63951853192e194fa96b0b7aa5709c77a4606858..29fec0613786e92de897a5a4786ddb2ddadfd7c2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 7603810c7318aadf6698f81ec71b375049998f83..251fa4d92b2d34e911c5090c0830fc2b364019b4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index 0989e8e060bcd176179c9c981fb2a81d5a69c1cd..24ebd3bcb4fde28cc10ecf51dd45ac78de12596b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 16d6614d27d4a9be4d3bedf263e0340a2697ff09..ddc51931df017bce91193ca29ac1a0fb30573522 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py index 0e6674d0ba32376abdd142cc6a71b95ac7c244a6..c33a628efb91c362c0e0912110ae4e9f44769e38 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index feb233a12838560886937f082666d91c3263bbd7..d22f78c46fd53d8e26ebd8ceb8cc77e38f39d364 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py index b38535a5cf0a6d23a93249bde0f87d1abee629e0..ddfbc52337c19f6c817c410b43e66725b2e691ba 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py index 1080dfb7faf4b66e35f5230510cdb978b326a259..629b4552d295e19c7eb79915df6c039518ea9432 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py index ffb5b8cbf56e542f898e5e5aa3859273a00014cd..e76be30dc33b2deb438a284fc3997078c912d200 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 73bd3f8b8f86e1e187346218246c61378e972613..64f6bd1c5951edfc5ba5db45e20a533ae9e31079 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py index 9e579ec9ab6f8612255ede56aa0a057e9dc45b61..3d83fc9f424dd0cbe0fc74c601d3f28b16bc8d4a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py index ed635c2bbcd9aa08db82c44fb82a07b71715a70f..1743b834b20e56afb59489ae6fd8873981380413 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py index c19acc9cf020fe194a2b8e2ad0ee9c221b897cc4..76b69fffa519cc77d01d43d183527620bef099c1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index e08c97bda84c433f29489fbd04c982f55625eff9..341b04370b2a33f342187cd68b8adfa635b50ed2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py index 5d24ec2ab137da5973010363ae7718d01e8829c2..021f87b6b2da517f854a7cb061e31e315aee6c24 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 61c36913f51193ec26b4136a06a1ddf0a40b5841..526af416a15930ab37043156494d35eb07b61923 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 5b53df5b3449137d91f7367eea60b81294e00d92..db2a8eeaf9d19e91726225408c7024698fd03427 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py index 3b5e2b21abf48ad098dffdf0ced49481e149907e..7d38afed20f1a5d207a6c3d15444c40c23adeb64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py index 42aaaf5da928847f7ffff584ef6f95dab602ca58..c127e751a74689cc38519f9b9d260fa621569666 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py index 7cfdd77bffc1ccb5983b51c0b80ce4ee7228ee82..e93a409b1b330cac3ea33d7c67baf185870f6977 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py index f7f920217b7c42cba381b7cd07dca1cca1eee208..3afc883356dbb141a037a30bdab4bc6d470fbf23 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py index 98a97272439700148abb9c1dd10f7ae5ba74813e..b85b7150492cf1d76e42d50896162b16855cabe0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py index acc5295a1ec45a760ddc723bc911db82e09f9970..96d4838b83898d6a414a2adb327591fd5c70dbc2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py index f7f920217b7c42cba381b7cd07dca1cca1eee208..3afc883356dbb141a037a30bdab4bc6d470fbf23 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py index 87f6a80d862a20f9df12eeccf247e99735a092a1..3be9e2f0852dd1eb3a033177969fc67a90fe8755 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py index c74c02877a206d5b21ef5eccd803730cba149e3b..8edde3f8421d30d357728a2316e1b15602bf1889 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py index f330888e380e44e64897b288d0dc69085e8f3414..f43f3b41476788850fdc5d6a08b6642ade197421 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py index 2662639b07176d4161d952d06a5df8f49505a174..1c694f8a9991489d7efb65a8fa2ad1df082373ef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py index 50d59c20a61b5b1803404aea119d0955cefcf6d5..b39494a774f2bafc50524910cf4c3fb849fe00b0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py index ad8de3fae24ee14097fc3b4c8e325694bceeca48..1c755feeebd0edee3807b43e3b9f86675cdcd48b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py index 6486624f9daaaad05b919842131e28bbd81a407b..1230f5f8f0d3401a37fafda50e3c84b4f5ad4afd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py index a72e4bffab12b545ac4d9eacb0eaf21864ce9eac..6818d48acb36d3ba53cd191d8ac0e34f78d98866 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py index a91e05652fcdca54a271558e3283666ac15c484c..6e787bfbae8edb7945ca079b93620f5ab0dc4487 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py index b746643f51e5a9d16ec00bb9d24067fa9b55c521..4e518989faa6721f94cba0e055f0e748eaf4acfc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index 552a94614f13a7607e01b4405ac00ced2c4b776a..e108aadf5e8264b4698795358edcd450e605bb0f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 61c36913f51193ec26b4136a06a1ddf0a40b5841..526af416a15930ab37043156494d35eb07b61923 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 666a4944c218e136894366e463bfdead4e815250..510cde3002973020066ea2a460cfd2cdf69c70c8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index 28bf34bb30c62c2657f0e12a4258feccebfa3220..83b6d4255f04e5c230f8df0b0c66407e25b9f2d4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 573491548f562faa99328926d4bc12112cb988cf..1b1a8ff4099c1707f2bdbe6fb31255dd94751378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 666a4944c218e136894366e463bfdead4e815250..510cde3002973020066ea2a460cfd2cdf69c70c8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py index e24bb820367bc6410b2a20dd53ad6d51920abd0a..77acb109e7e8ef0ffdc3306e1a076190eff6fd4d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index 56eb60da5846332a1583d255378a1b4c27238b43..ae2f19bcd23c3fcef87704875ef8505f13277c9f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py index c2e4f9b346e038e1a47e8f69a21443c76abfc32c..f3b65d27aba2710c5e129d40817ff8c8ffff3306 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py index 4c70f00d2b4b449e762d99b86b1a5e6f0ed1df74..cf1f779850e63326464eb1d7172952a74af58b63 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py index 6c791afde38fd0bdb53b3518addff3834fc0f95d..01a0c07678fb590bdc57ad5ce5e2694f3c2ed24f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py index b2619d382c9e65548e02e684a63b6a08b535d47b..2e49aead963daf6e165520365e1ad8db83cd1375 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 635a53cb52cc3c1fddff4a4aa7531456661d03a8..35f11fe0084cd8f1eeb4901d48da4edf2545b529 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py index ae89b6b3c1c152159860a966088badc509baa86e..5debb6069f5970419d20412341d3ee79f45d1657 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py index fc3958eb38e4f9366f6ebf1590c8e4f2ca576017..455080df75f16dea6be5b5a2c328273b7a2ed585 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py index 9e579ec9ab6f8612255ede56aa0a057e9dc45b61..3d83fc9f424dd0cbe0fc74c601d3f28b16bc8d4a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py index 6cbc3678b58078b0b8a268d515e2f498c5c94065..dc24b33cea8b7453267b73476f036e08011f38b9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py index 77baef445b63af7e459bf0924547faca0cd3abd9..dbd9e221c3b5157ace4af1e9b89fc0be7a4db91c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 0a737e2ab428952c2bd58d3a532d25e42d36b38a..397ea71655278c5db99901e37205555d6865980f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py index 47100076a4231ff37ecde6b30496244edeba3b24..3e3cfc40212a1d189e9cd1d4e04c9f6cd332e782 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 635a53cb52cc3c1fddff4a4aa7531456661d03a8..35f11fe0084cd8f1eeb4901d48da4edf2545b529 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py index 3b5e2b21abf48ad098dffdf0ced49481e149907e..7d38afed20f1a5d207a6c3d15444c40c23adeb64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py index 94c595725b80725776d1dea823dce5076560cf72..dfb86b109a13b30b65f7c200f2579b35255dd01a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py index 53b92404caf9b8033bffd3a7e3863927857841ba..b2fa4d37c7f5e6598761a03cccac198a9e8267ee 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py index a91e05652fcdca54a271558e3283666ac15c484c..6e787bfbae8edb7945ca079b93620f5ab0dc4487 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py index 0f37ddf83b4f66dbc8f5f250ff1fff2491dc520e..507410ec5d97c14a47f7a3719e13f7c95379818e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index 7435f6184d52a64580318932272c5bcd6164ddf5..5746ec9f8fa39d00f3a0b28deda2e55e14d7b499 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 4927f1f4b68adcaf6c7219ac66c993b22aaf9120..bbc032199884788e41fa37db59fe78ccce849442 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index 7042fd9f17c38668f7c2be37de07bb78d84a268e..b4f7e6f1d75fb9f88998b29cf62439ea1a9acc33 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 04310d99136c797b48c15ba47ea556c46d928127..8112c3ae6941c927803ff84f537a9f71420ec9ab 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py index db7709e55216c3747b7cf50403e7f37d54e37c9c..71e3a0e9cdf808e80e0a204cb970b8325f23cada 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index 56eb60da5846332a1583d255378a1b4c27238b43..ae2f19bcd23c3fcef87704875ef8505f13277c9f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py index b38535a5cf0a6d23a93249bde0f87d1abee629e0..ddfbc52337c19f6c817c410b43e66725b2e691ba 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py index 4c70f00d2b4b449e762d99b86b1a5e6f0ed1df74..cf1f779850e63326464eb1d7172952a74af58b63 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py index 1080dfb7faf4b66e35f5230510cdb978b326a259..629b4552d295e19c7eb79915df6c039518ea9432 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py index 28bf34bb30c62c2657f0e12a4258feccebfa3220..83b6d4255f04e5c230f8df0b0c66407e25b9f2d4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 7603810c7318aadf6698f81ec71b375049998f83..251fa4d92b2d34e911c5090c0830fc2b364019b4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py index 78ef423bba5d1b3fa3b53e1b352e472d8f63ad73..4f15ef163fca46a9ac284b9f72627927ecbdaefd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py index 6cbc3678b58078b0b8a268d515e2f498c5c94065..dc24b33cea8b7453267b73476f036e08011f38b9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py index a6d2377c188304201e1e29a23987d2f750435889..a504cbf66e7ef0b5b3183b4ba46c89542b5ad71f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 9231728edfff063dff2e8ed8488b6430ccec2483..96df7b970c8af304681414efc1b1aebbbb11bda3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py index 51db93b318b42c58ad7652fb57144394e6203a0b..9121ecf2f45e645c72c950c560533202de2e787d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 9b4644d74ea685590d8a9fafeabf60c7e0760208..4d92cd1ac307464cd965746436812240608ad5e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py index 3b5e2b21abf48ad098dffdf0ced49481e149907e..7d38afed20f1a5d207a6c3d15444c40c23adeb64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py index 42aaaf5da928847f7ffff584ef6f95dab602ca58..c127e751a74689cc38519f9b9d260fa621569666 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py index 98a97272439700148abb9c1dd10f7ae5ba74813e..b85b7150492cf1d76e42d50896162b16855cabe0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py index d84e212a1b74ce8626802ad0f6ee33a242e05bfa..82f4fdc4bfcb0ce7fb6ea4b6ef9fd7e45a50d483 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py index 29e367ba1172a6f868f8f48af3c7cea58ca41fe1..7b72b9b2ddedb288151273f00b41823a48ffe053 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py index a31c5e52972e7669a0b4e953ec2da1a404e97cdd..8daa2296cd56406b7e152099186c2ec21d743052 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py index 9f07c18a1ad9b6d1dd96849f72b24555cc998a51..6bf006d99fa3c613aa425dbad1df3df68fbb3043 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py index a9b4bf47b828a382a8aedd6c49e65ed3540247f2..4f3f119469aa8bc2906b6c36bc9a0f6aa203ba3f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py index 3c81a52cc41a8debfff6abacde3e7c7a1e166ab9..56da3079c9aa2d524b39d9e04c8a3c052e338dbf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py index cb26fb3ce4b145884c4cc25a4bb1c7328b64d15c..fa502cc4a0a6f5b25d019ee2e77437def582d061 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py index d119f79ae73c9e5663821b4370b8b869362e73da..11a7f595893f5c79e14c90c1c26f3b7d695d48d0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py index 0e76372276e9aab4a2c308403c1696c5d67c8512..18b0094852a5232baa0ed97c37666a3cc53c9418 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py index 0f37ddf83b4f66dbc8f5f250ff1fff2491dc520e..507410ec5d97c14a47f7a3719e13f7c95379818e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index 9e869ca3263903b212f1a3afa65185cef65e6394..603a52bfbbdfb5722b15455f1a3ac1a8368e1eef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 7603810c7318aadf6698f81ec71b375049998f83..251fa4d92b2d34e911c5090c0830fc2b364019b4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index 1577c82ea3fbd8b049673ef886ccd78b9cd7e01e..e8dbfadf5f2526a87adc03099d596d7fcdd1a9fe 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 61c36913f51193ec26b4136a06a1ddf0a40b5841..526af416a15930ab37043156494d35eb07b61923 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 7603810c7318aadf6698f81ec71b375049998f83..251fa4d92b2d34e911c5090c0830fc2b364019b4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py index 4701163f7f023c806d9dde440ccc17d8862587c9..20309806019b37f84d4b5a5ca77f21b19865cbdc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index feb233a12838560886937f082666d91c3263bbd7..d22f78c46fd53d8e26ebd8ceb8cc77e38f39d364 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py index 30d5aada10464228ddd4010bc1b2a3afd23d9cae..31aa3a506ede98021832c1fe05209b00b505f272 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py index 1080dfb7faf4b66e35f5230510cdb978b326a259..629b4552d295e19c7eb79915df6c039518ea9432 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py index f44836634ee58281027ecc53c136ee0d38433fe3..f3203a078bda79be37cfcd5ec6d6539f467930a7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 666a4944c218e136894366e463bfdead4e815250..510cde3002973020066ea2a460cfd2cdf69c70c8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py index 775d362110498321a919d71fbad8509cc1de7bc4..20d7cb24454156c1b7231afc1ec77e5907ceb256 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py index 6cbc3678b58078b0b8a268d515e2f498c5c94065..dc24b33cea8b7453267b73476f036e08011f38b9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py index 5d24ec2ab137da5973010363ae7718d01e8829c2..021f87b6b2da517f854a7cb061e31e315aee6c24 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 573491548f562faa99328926d4bc12112cb988cf..1b1a8ff4099c1707f2bdbe6fb31255dd94751378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 42a68ea3530f1991f2396b711e1f54f7929f21c0..92260a8b0f711f9dc2a70d3bdbff92ca7c61657f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py index df23385f8f41a7cddb61e6d09c86abc77ee74a13..f8df4df54409a88d875aada1c0ec9dbbbf9b7bb4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 3d011eb224962cde6d2abcfed75201f4b2b2dd8c..0e2f58c2a4126c5016c0529324bc3d2eef6b47fd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py index 3b5e2b21abf48ad098dffdf0ced49481e149907e..7d38afed20f1a5d207a6c3d15444c40c23adeb64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py index 42aaaf5da928847f7ffff584ef6f95dab602ca58..c127e751a74689cc38519f9b9d260fa621569666 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py index 1257f182084440ec2861c7ce483bf21d652a94d1..66ac8383c008a4ab15cf4c8e5e64e05938f8a090 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py index 0e76372276e9aab4a2c308403c1696c5d67c8512..18b0094852a5232baa0ed97c37666a3cc53c9418 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py index cb5f56c53dae00c6a87c0a59e371d697081ecefe..b8cdccb1fc2f6e765c8e9c1b292243a40df633f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py index 502239d3ea98eac2557f64bc432fd10577eb2aa7..f7bbf71b7ab909c5166f2c68b9307db656048b15 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py index 4391fe136a0f34d077ecf814491e3b8ad82d3205..5579074a61fa7c5a612078a3267cc6475454b4f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py index 8e61150797e91559da2a053b43f6de36521f05f0..410fd6ca5832e43e2b41667a0cc9da9b05795255 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py index f8aa811f38e9580c00607aade4dd80f0e81ed2ae..2118be76fad5c1f10a0c837307e405362f162261 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py index a9fc6d28634249cd36568b467c3507802cc7cd0a..8e929d0072351144f2dd0d7e029cfb3384ba7751 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py index b1b7d3820b941df345336a5748c3883a8962df86..9996968e1458cc311f24ba41747a2fb5d073f633 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 9b4644d74ea685590d8a9fafeabf60c7e0760208..4d92cd1ac307464cd965746436812240608ad5e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py index 51f74a1f81e2d11d4c4e05b5e729953274f028da..4d46a796951b65ad15bfd121f7d2c36bf4f17703 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py index 0e354783d167536f9e27bf84396e4710303e5999..1fdf39e11fa020154238f20c5d97bb6fa14fbacf 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py index c977b70e200806f1e56bf19a396784d683bc8832..1bc7e1c7a4734da04d86978b07f95605427603fd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 3739c508c82eb0d4727839aec748b1377669bf98..7dfc9d3b40e11356fb5ad6cdc5b7a44ceb19b6e3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py index 8857cb729926b1533c5e0b64d5bb7cbe73aa6bcb..d370c1b46d192bf5ecf23ce2f7c1db4ecb6bde4c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py index 737f59a0c9331975625796491cc12a33ad0b0084..4c99011d956c4cb9dfe97830856eb3f4af1984d6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py index 2a43b9e9d6e1746ad99e0fc96b5f9c2621175574..694a38092b614d620ce20ddd252b6f5380b8daca 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py index af56528baedd2b98c7f0c2513bab087ad9cc40cb..e8a698892c1feb5811fa53c2ade6198837fa13a2 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py index dd5de9ea12a9c1f298c87f922e1d337768e30390..cfefe2c5a3c4d01daf73ae807415aeb131315270 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py index 4c70f00d2b4b449e762d99b86b1a5e6f0ed1df74..cf1f779850e63326464eb1d7172952a74af58b63 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py index 3c37b21ef6ff73f0639da5503747fc6251df864d..87d3609dd254b1e1afa31df1472d0cebbfbeccef 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py index 56eb60da5846332a1583d255378a1b4c27238b43..ae2f19bcd23c3fcef87704875ef8505f13277c9f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py index 1f2491ba0fae8f7d281bb4433b6f009890bd3b2f..26794231b9dfab6f91dfea1be24ef9eb3df93618 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py index 834d54004adcb031a0aa22c0ab0876645ef5adc5..78b38bebdf7349833d22245c2879b1f9f2cd9414 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py index e7c0f7d0ad00f60c264db926fb11a9c7d62b362a..e8877f3f6aa22dbe475ab7df7340dd96759684b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py index e4c2f928e3fce6b000c351d4657e70e4ec9b868c..02b4d2f72cdb82dd50a2ceb193f5cd17e007da64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py index b4c89473a6e74b2b177960f04d1c00bac61bf132..78f648572823e5d96c7413cabe3c8a8a59580b2f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py index abbcd1fe709062e8e480966ade273c0804c4844f..0cefd34c386d8d85170e5650303bc9d463b3f46f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py index 6c791afde38fd0bdb53b3518addff3834fc0f95d..01a0c07678fb590bdc57ad5ce5e2694f3c2ed24f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py index 4368687ae2b141d4df60f3c4a5cf1eefbfca716c..1f43a712f292761feb078df81ccaf82dd60f76e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py index d7b77da59516bfd8a9b9a731138bd8805b3bee6e..da099f93b1e04dbd1d200276af0c461f9bf40346 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py index 45d5e33dadf589d825f78a9e14818a4871d9542a..c6fc0e24c1c79415f9ef8502e001afe5de7fd34c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py index b36a11e14f1390ca2f84a276886752dd19fa7bb4..05b0fe1e0c91349bdf9f1f9058405cf6f62a9130 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index da3404be850f79069df9a65c0508cedc3c6e32c0..9d887933696e541802a491060e0cc8b703ab872a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py index 43d3f73de0797a8c98cb86e80f50dde70243eb4d..6608c4efdc41912a74c1ee24b3014857d24de012 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py index e9d2655479fb23505f5b3bbcfb6b5c7c70472a04..31e9c19184144fceccb5cc4268671e0a92376c09 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py index 373798e80fd66cbd707eaff7c2376c42fcbbf2f6..609c69f207785e2fcc81423fd20c2e5fc91ebcd7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py index 7b65a97db822417ce80967fa5ad29f217d0818e1..66680c1f16489c5afcbad2e0dad5da48a9104a4b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py index 78ef423bba5d1b3fa3b53e1b352e472d8f63ad73..4f15ef163fca46a9ac284b9f72627927ecbdaefd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py index 6cbc3678b58078b0b8a268d515e2f498c5c94065..dc24b33cea8b7453267b73476f036e08011f38b9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py index c1f2efeb0931f3cf5eb391791c17e4c5db620998..500c3ffb92c5ba38e5aac78d260f751fb34de1b8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 575b87c2ca55f147595e9e46b3630008c9b3e82c..ee6794aa86391ac63e6fb125fe00217216b319e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 2ec5da1f9f269488520fbc8b546dc67ac2894821..09b31e1ed6e066945f18d41c86034f6e4ab9cf28 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py index 8caf79ea324c509eb0ca88c8dca47b8561d3b35c..50a264cd18949190df8bcf252d31e62ec8ab24cd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 573491548f562faa99328926d4bc12112cb988cf..1b1a8ff4099c1707f2bdbe6fb31255dd94751378 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 04310d99136c797b48c15ba47ea556c46d928127..8112c3ae6941c927803ff84f537a9f71420ec9ab 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py index 3b5e2b21abf48ad098dffdf0ced49481e149907e..7d38afed20f1a5d207a6c3d15444c40c23adeb64 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py index 94c595725b80725776d1dea823dce5076560cf72..dfb86b109a13b30b65f7c200f2579b35255dd01a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py index 0843b19e7eee06b4f34e593e213933e14b221c26..4aedf71133e8f2735733fe3cb5c9313ade115fbb 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py index 99bbc4a004bc41fb2380778864c8994fc5f500e1..7617ee27eeea7f98e8d31e6c99dbdb055d81224f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py index 704b1675e40fec76bb7522a59034982403ddeade..346a9b615369c4e134cd34ed808a38cf20e52e75 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py index e69cca10ba8baf8171618b3c9c8c4b8d6d12cf80..56f152b297e00a87a2c298f2bdb468f5f4a6229c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py index 5fb792f1e19b1048e4e5559df5f71e96b64d67b5..16c001897b5741094ef346ee0ce89074847bc4cc 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py index ab6b1ab350099c196a5d48c90c9648ae0c2b8845..8958971dab3a520e3bc8c68565bc9c03129df502 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py index cd1201a2fdbb10f3c5c82c52219a00e3a8157dd4..54d9d637be2dd59dd025f4be7f0aded102d4420c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py index 9f07c18a1ad9b6d1dd96849f72b24555cc998a51..6bf006d99fa3c613aa425dbad1df3df68fbb3043 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py index 44868147145744526f4f19a30327953562d1ddfc..02d3900e49f19d6c5599e9ca6af8964e19d51d5c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py index c01e6ec6a9bb1e56c0081e4166af677aa037260b..9eac5d44ffbd214cdac33774be1a76a2dbf928aa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py index c63b557fba163692647309ff8fa3a40e16c9cbe7..323796c5f76e120a767c3bcd87fca89af86b13e7 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/__init__.py index 3ac92f6456460fe80e517e6625fa94e520bc6a35..5cf429a1c2daec7e27b71fcb96b0be7b741f275b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py index aac7b3acf8634789427ab387046e673a61c3666c..0f5f8f9ef1653b63d662722bedafb64b1ac6077d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py index b1a2ffc2750d3fbc25c579c3f62e7c80751b7682..55fdcb89a7e61aff04d744a13a71e11505d4b368 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py index 64d1116166a665234678e54a27e22c14b586fbd0..6088cc315e4e00926e44a959a2de81e3731a8ad9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/__init__.py index d3dfb208ef11e13e0b19f22f5c0a43bb7476596e..2c88f905c764da56d13d9bb4cfc064e4a9beb716 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/__init__.py index ace0c17429c496e9cc392f65a9865fc38463c434..cfd0abd594d495f0fdd161eb8555704625c73366 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py index ee927abada0c668abff9587a17dd9aa1ba48b71a..be20a045dc6b86d95e562294f1ea886e14cdb757 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py index e25c257725a76c39746a4f1ca589885a6aeddef3..89fb24eb9fe6f0a1609fb35649cf8f5be0257eae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py index 14954b5130f690dae465cc4df68709f50544df84..fe910beace02b2d89f06039ca8aac35dd3af34e9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py index 44868147145744526f4f19a30327953562d1ddfc..02d3900e49f19d6c5599e9ca6af8964e19d51d5c 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py index c01e6ec6a9bb1e56c0081e4166af677aa037260b..9eac5d44ffbd214cdac33774be1a76a2dbf928aa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py index a7af90c987a8211e777258468be7eafd2edb16c3..95fa033e5d5131ebce1b6ca3fdad006f02382702 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py index 0fb55cd606c7e4d2ca4a1061dcf4c4cd8d3d8891..1bbdd347705aa2f5d8b6a5fee1876870558ba5f4 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py index 93b8edd584c855acdb31e357a7745f38dc606e30..461d66e40c691c75edd5e86803f1673e6817ca51 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py index 1ad793f388a08a6a26a42470299e9bd653d403a3..18919cd0df4b6fb055d378df3322555bb918d89b 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py index 57901c59123251588a65d3ee10009ded935bb1f8..06ffef4054af1ce49ec4d455c23a6628c80f6f30 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py index c92c7b9e1e3e7db8f65b4ee54b817da0c779bf08..919164eab26f63382dbabc4ae9435df0502dad6d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py index 968d401f366d3005a5d8cda261606b480e272da3..53a06becf8f78b9c747744b4ad6167866c6624f3 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py index 43b0c777f396ce9bb2c63e09b91942ce5f72c57a..df2ea88b9d55e8bf3aae7c9d2b6ccb8abb3aa907 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py index f9c1d141a1127dbb1f1e43d86c1ed2b347e6c86a..64eed911ea205bb2f9f4258d4c337c41a928b18d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py index 78ef423bba5d1b3fa3b53e1b352e472d8f63ad73..4f15ef163fca46a9ac284b9f72627927ecbdaefd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py index 6cbc3678b58078b0b8a268d515e2f498c5c94065..dc24b33cea8b7453267b73476f036e08011f38b9 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py index a6d2377c188304201e1e29a23987d2f750435889..a504cbf66e7ef0b5b3183b4ba46c89542b5ad71f 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py index e4493e09abb5de09b0e339755232b59a7443a1d5..c07a53a8a620c9b4be21562e178364614ad73acd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index feef9127c74765b06c4b607b005973df604edfc9..173ce30da67f7faf8a2b3a4505070b4bd56f2ef1 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 3d011eb224962cde6d2abcfed75201f4b2b2dd8c..0e2f58c2a4126c5016c0529324bc3d2eef6b47fd 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py index 10f04b0ab7b9835e2d61e24fbcb233e3412fb6b6..b0da4f2e8cc8738b8c69016826d37aff47c50c45 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py index 74d9c60e33c6546724dff8784a18e8d339021ae7..fc0da7cd3585f4230c02352d8c3be57647a4c2ae 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py index 82bfbf3490f09d9e42a7a53b5d43d4d0fb68c55d..3a6f29a3b22fff75bb106cb3b1dae7ce946e6439 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py index 0798edc8485bf20defd44df5fcc2d46496bce1a7..85d3597fe048f798bbd840abf78212ce5c0336c6 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py index ef725f1a920a3c2097d601ccbcd68d49e5f28aec..59638071b9ffc578f62d4d3519efd36d7d38bd1a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py index 08961924d9b651ff50f979d9b9b255432248bc3a..b2b189a32269e6914dbdeb6c88e044040ef46804 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py index ee838763987d96e9d2fb29b4b92b43b327ad997e..e9b63776548bd844cc6ce3257ed86885a03ac5fa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py index 39bd9752bdf0f6b88a29554fb360a80a477ead7f..fae14686dbd74f7d60ad617f24c4d3a47bb4f6a0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py index ac0b29b9c2c29227a8d992da1eefd507ff8f1f9f..d60d9d7edf0e76ea4f4a35b1e2c9cc381179a728 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py index 5e0c0aebdbe40cf83887665d56f35ceed1f45ceb..e9899935ba38a993f78f531fb0573f16c50057f5 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py index 1bf9ddb7e54f8adac59366f7264efb13e0b86ca3..8f8a0e0821707829aaedd422070f25c4ab0d2b05 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py index 398a2f86f81d59ff4bafdce5f81735cc0f2a564d..76a408f9ad076026c93f9bd1052faf903a5a521a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py index 6629bc5376df2acabae1307b203117c0090bcdd2..4bc29bc8132d870e28f0c40dce2be4456fc31284 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py index 9b4644d74ea685590d8a9fafeabf60c7e0760208..4d92cd1ac307464cd965746436812240608ad5e8 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py index 3f481cdb5adcd93e124ab370f5cea07a7368a08a..f34e300f7d52fd043d68f63981f7928343f07b67 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py index f362c1c8490c912a65a726bebf3172edc3a99107..ee463eb1b0e86509adf775915ed81a1c6da25711 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py index 94c595725b80725776d1dea823dce5076560cf72..dfb86b109a13b30b65f7c200f2579b35255dd01a 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py index 7aecfd9bad7b90745226b34cdc6bcd3354537c1b..daa35056c667e7b9b65ef20c106d32df325d9553 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py index a99bde6c2635120459c33e9f546690e43a5ac9de..c464e72a2a62b21d797773ebca89e86ba4970e39 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py index a59dd255fbc95fb177f810b325c78d55c3e563c7..677c62ad3848d386acb57027f650ee9b7232ff2d 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py index dbeeea278475848caafdf8c1af0f77643faf266f..cbf74c0d7ee64c839cb48f93c2e03e7a77f99caa 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py index 269a754015ede7bd2097dd815fadc3312e94d36b..d89886bfa9b9b5f1343d7bd504d705921ce0e35e 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py index e7a437de67312a23030dcadc4090e75bbed6f7fe..2ba9a631306694936589cd3de5b49a59b4726795 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py index 98a97272439700148abb9c1dd10f7ae5ba74813e..b85b7150492cf1d76e42d50896162b16855cabe0 100644 --- a/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py +++ b/src/nbi/service/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/src/nbi/service/tfs_api/Resources.py b/src/nbi/service/tfs_api/Resources.py index 8e41c60098266a8fd05ef1cfa5246917249c06bd..c0ce6cb401ae550c1506fcd6526088202fc098eb 100644 --- a/src/nbi/service/tfs_api/Resources.py +++ b/src/nbi/service/tfs_api/Resources.py @@ -19,6 +19,7 @@ from flask.json import jsonify from flask_restful import Resource, request from werkzeug.exceptions import BadRequest from common.proto.context_pb2 import Empty, LinkTypeEnum +from common.tools.descriptor.Tools import format_device_custom_config_rules, format_service_custom_config_rules from common.tools.grpc.Tools import grpc_message_to_json from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient @@ -215,7 +216,8 @@ class Service(_Resource): raise BadRequest('Mismatching context_uuid') if service_uuid != service['service_id']['service_uuid']['uuid']: raise BadRequest('Mismatching service_uuid') - return format_grpc_to_json(self.service_client.UpdateService(grpc_service(service))) + svc = format_service_custom_config_rules(service) + return format_grpc_to_json(self.service_client.UpdateService(grpc_service(svc))) def delete(self, context_uuid : str, service_uuid : str): return format_grpc_to_json(self.service_client.DeleteService(grpc_service_id(context_uuid, service_uuid))) @@ -267,9 +269,15 @@ class Devices(_Resource): json_requests = request.get_json() if 'devices' in json_requests: json_requests = json_requests['devices'] + + dev_list = [] + for device in json_requests: + dev = format_device_custom_config_rules(device) + dev_list.append(dev) + return jsonify([ grpc_message_to_json(self.device_client.AddDevice(grpc_device(device))) - for device in json_requests + for device in dev_list ]) class Device(_Resource): diff --git a/src/nbi/tests/DSCM_MockWebServer.py b/src/nbi/tests/DSCM_MockWebServer.py new file mode 100644 index 0000000000000000000000000000000000000000..604da6810e60ea1ef7f0e34fd60d8922795801ce --- /dev/null +++ b/src/nbi/tests/DSCM_MockWebServer.py @@ -0,0 +1,40 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging, threading +from nbi.service.NbiApplication import NbiApplication +from nbi.service.rest_server.nbi_plugins.dscm_oc import register_dscm_oc +from .Constants import LOCAL_HOST, NBI_SERVICE_PORT, NBI_SERVICE_PREFIX_URL + + +LOGGER = logging.getLogger(__name__) + +class MockWebServer(threading.Thread): + def __init__(self): + super().__init__(daemon=True) + + self.nbi_app = NbiApplication(base_url=NBI_SERVICE_PREFIX_URL) + register_dscm_oc(self.nbi_app) + self.nbi_app.dump_configuration() + + def run(self): + try: + self.nbi_app._sio.run( + self.nbi_app.get_flask_app(), + host=LOCAL_HOST, port=NBI_SERVICE_PORT, + debug=True, use_reloader=False + ) + except: # pylint: disable=bare-except + LOGGER.exception('[MockWebServer::run] Unhandled Exception') diff --git a/src/nbi/tests/messages/dscm_messages.py b/src/nbi/tests/messages/dscm_messages.py new file mode 100644 index 0000000000000000000000000000000000000000..03d4ebda45f975c3f2beae663885708fe4efc272 --- /dev/null +++ b/src/nbi/tests/messages/dscm_messages.py @@ -0,0 +1,60 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +def get_hub_payload(): + """Example HUB format payload.""" + return { + "name" : "channel-1", + "frequency" : "195000000", + "target_output_power": "-3.0", + "operational_mode" : "1", + "operation" : "merge", + "digital_subcarriers_groups": [ + { "group_id": 1, "digital-subcarrier-id": [{ "subcarrier-id": 1, "active": True}, ]}, + { "group_id": 2, "digital-subcarrier-id": [{ "subcarrier-id": 2, "active": True}, ]}, + { "group_id": 3, "digital-subcarrier-id": [{ "subcarrier-id": 3, "active": True}, ]}, + { "group_id": 4, "digital-subcarrier-id": [{ "subcarrier-id": 4, "active": True}, ]}, + ], + } + + +def get_leaf_payload(): + """Example LEAF format payload.""" + return { + "operation": "merge", + "channels": [ + { + "name" : "channel-1", + "frequency" : "195006250000000", + "target_output_power" : "-99.0", + "operational_mode" : "1", + "digital_subcarriers_groups": [{ "group_id": 1 }] + }, + { + "name" : "channel-3", + "frequency" : "195018750000000", + "target_output_power" : "-99.0", + "operational_mode" : "1", + "digital_subcarriers_groups": [{ "group_id": 2 }] + }, + { + "name" : "channel-5", + "frequency" : "195031250000000", + "target_output_power" : "-99.0", + "operational_mode" : "1", + "digital_subcarriers_groups": [{ "group_id": 3 }] + } + ] + } diff --git a/src/nbi/tests/test_dscm_restconf.py b/src/nbi/tests/test_dscm_restconf.py new file mode 100644 index 0000000000000000000000000000000000000000..6ee0a946b778fd65ba0130eca0a53c941137c1f4 --- /dev/null +++ b/src/nbi/tests/test_dscm_restconf.py @@ -0,0 +1,124 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Union +import logging +import os, pytest +import requests +from .DSCM_MockWebServer import nbi_service_rest +from .messages.dscm_messages import get_hub_payload, get_leaf_payload +from common.Constants import ServiceNameEnum +from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server +from common.Settings import ( + ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, + get_env_var_name, get_service_port_grpc) +from common.tests.MockServicerImpl_Context import MockServicerImpl_Context +from common.tools.service.GenericGrpcService import GenericGrpcService +from pluggables.client.PluggablesClient import PluggablesClient +from pluggables.service.PluggablesService import PluggablesService + + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +BASE_URL = "http://127.0.0.1:18080/restconf/data/" +HEADERS = { "Accept" : "application/yang-data+json", + "Content-Type": "application/yang-data+json" } + +########################### +# Tests Setup +########################### + +LOCAL_HOST = '127.0.0.1' + +DSCMPLUGGABLE_SERVICE_PORT = get_service_port_grpc(ServiceNameEnum.DSCMPLUGGABLE) +os.environ[get_env_var_name(ServiceNameEnum.DSCMPLUGGABLE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.DSCMPLUGGABLE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(DSCMPLUGGABLE_SERVICE_PORT) + +class MockContextService(GenericGrpcService): + def __init__(self, bind_port: Union[str, int]) -> None: + super().__init__(bind_port, LOCAL_HOST, enable_health_servicer=False, cls_name='MockService') + + def install_servicers(self): + self.context_servicer = MockServicerImpl_Context() + add_ContextServiceServicer_to_server(self.context_servicer, self.server) + + +@pytest.fixture(scope='session') +def pluggables_service(): + LOGGER.info('Initializing DscmPluggableService...') + _service = PluggablesService() + _service.start() + + LOGGER.info('Yielding DscmPluggableService...') + yield _service + + LOGGER.info('Terminating DscmPluggableService...') + _service.stop() + LOGGER.info('Terminated DscmPluggableService...') + +@pytest.fixture(scope='function') +def dscm_pluggable_client(pluggables_service : PluggablesService): + LOGGER.info('Creating PluggablesClient...') + _client = PluggablesClient() + + LOGGER.info('Yielding PluggablesClient...') + yield _client + + LOGGER.info('Closing PluggablesClient...') + _client.close() + LOGGER.info('Closed PluggablesClient...') + +@pytest.fixture(autouse=True) +def log_each(request): + LOGGER.info(f">>>>>> START {request.node.name} >>>>>>") + yield + LOGGER.info(f"<<<<<< END {request.node.name} <<<<<<") + +def test_post_hub_optical_channel_frequency(nbi_service_rest, dscm_pluggable_client: PluggablesClient): + """Test PATCH to update optical channel frequency.""" + device = "device=T1.1/" + encoded_path = f"{device}openconfig-platform:components/component=1/optical-channel/config" + + post_data = get_hub_payload() + response = requests.post(f"{BASE_URL}{encoded_path}", + json=post_data, + headers=HEADERS) + assert response.status_code == 201 + +def test_post_get_delete_leaf_optical_channel_frequency(nbi_service_rest, dscm_pluggable_client: PluggablesClient): + """Test POST, GET, DELETE to manage optical channel frequency for leaf device.""" + device = "device=T1.2/" + encoded_path = f"{device}openconfig-platform:components/component=1/optical-channel/config" + + # Step 1: POST to create a new device configuration + post_data = get_leaf_payload() + response = requests.post(f"{BASE_URL}{encoded_path}", + json=post_data, + headers=HEADERS) + assert response.status_code == 201 + + # Step 2: GET to retrieve the created device configuration + response = requests.get(f"{BASE_URL}{encoded_path}", headers={"Accept": "application/yang-data+json"}) + assert response.status_code == 200 + get_data = response.json() + assert get_data is not None + + # Step 3: DELETE to remove the created device configuration + response = requests.delete(f"{BASE_URL}{encoded_path}", headers={"Accept": "application/yang-data+json"}) + assert response.status_code == 204 + + # Step 4: GET again to verify the device configuration has been deleted + response = requests.get(f"{BASE_URL}{encoded_path}", headers={"Accept": "application/yang-data+json"}) + assert response.status_code == 400 # Assuming 400 is returned for non-existing resource diff --git a/src/opticalattackdetector/Dockerfile b/src/opticalattackdetector/Dockerfile index 6af8457d64a0c4a291bc96ac0b2aad6e92dc3567..dbd22ead21d8a4933aa015568396c3f971f57dec 100644 --- a/src/opticalattackdetector/Dockerfile +++ b/src/opticalattackdetector/Dockerfile @@ -42,9 +42,9 @@ RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/opticalattackmanager/Dockerfile b/src/opticalattackmanager/Dockerfile index a9de40c48bb58c707588d1f9722be2c3221864d9..7df1844885f294dff972a494fc8d4334378b129f 100644 --- a/src/opticalattackmanager/Dockerfile +++ b/src/opticalattackmanager/Dockerfile @@ -42,9 +42,9 @@ RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/opticalattackmitigator/Dockerfile b/src/opticalattackmitigator/Dockerfile index 0cb66dfb00d48779076ba36f5456867cdbfd16d9..997a363d56089fa0e03f8315e074e025a56de184 100644 --- a/src/opticalattackmitigator/Dockerfile +++ b/src/opticalattackmitigator/Dockerfile @@ -41,9 +41,9 @@ RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:${PATH}" # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/opticalcontroller/Dockerfile b/src/opticalcontroller/Dockerfile index 7d5d87aa661a671298ddad9f86fe79b66968ceba..3459a9d2d2b0fd6eca983deb5df480d5923277ed 100644 --- a/src/opticalcontroller/Dockerfile +++ b/src/opticalcontroller/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/osm_client/Dockerfile b/src/osm_client/Dockerfile index 28ffc70013dafa1653006ca72301b1d5d4c3e15d..9c8e7b6f4be06b0a54a3d84e29b4a91ee0ff06cb 100644 --- a/src/osm_client/Dockerfile +++ b/src/osm_client/Dockerfile @@ -31,9 +31,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/pathcomp/frontend/Dockerfile b/src/pathcomp/frontend/Dockerfile index 2f6d5a3bd803ee9d0f46a9c413c0d7db1ff2d54d..e7938768bd429f3dcada568fc38c9453a31fc41c 100644 --- a/src/pathcomp/frontend/Dockerfile +++ b/src/pathcomp/frontend/Dockerfile @@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ chmod +x /bin/grpc_health_probe # Get generic Python packages -RUN python3 -m pip install --upgrade pip -RUN python3 -m pip install --upgrade setuptools wheel -RUN python3 -m pip install --upgrade pip-tools +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Get common Python packages # Note: this step enables sharing the previous Docker build steps among all the Python components diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py index 75873af0c6c3bfa898170c92ad779589c10e9bfb..121f0842770b5e455ad683c35a4d588ded0b7387 100644 --- a/src/pathcomp/frontend/service/algorithms/_Algorithm.py +++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py @@ -28,9 +28,7 @@ from pathcomp.frontend.Config import BACKEND_URL from .tools.EroPathToHops import eropath_to_hops from .tools.ComposeConfigRules import ( compose_device_config_rules, compose_l2nm_config_rules, compose_l3nm_config_rules, compose_tapi_config_rules, - generate_neighbor_endpoint_config_rules, compose_ipowdm_config_rules - compose_device_config_rules, compose_l2nm_config_rules, compose_l3nm_config_rules, - compose_tapi_config_rules, generate_neighbor_endpoint_config_rules, + generate_neighbor_endpoint_config_rules, compose_ipowdm_config_rules, compose_tapi_lsp_config_rules, compose_iplink_config_rules ) from .tools.ComposeRequest import compose_device, compose_link, compose_service @@ -206,12 +204,16 @@ class _Algorithm: elif service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE and rules_nb == 0: compose_tapi_config_rules(config_rules, service.service_config.config_rules) self.logger.info("Installing default rules for TAPI service") - elif service_type == ServiceTypeEnum.SERVICETYPE_IPOWDM and rules_nb == 0: - compose_ipowdm_config_rules(config_rules, service.service_config.config_rules) - self.logger.info("Installing default rules for IPOWDM service") elif service_type == ServiceTypeEnum.SERVICETYPE_IP_LINK: compose_iplink_config_rules(config_rules, service.service_config.config_rules) self.logger.info("Installing default rules for IP-LINK service") + elif service_type == ServiceTypeEnum.SERVICETYPE_IPOWDM and rules_nb == 0: + compose_ipowdm_config_rules(config_rules, service.service_config.config_rules) + self.logger.info("Installing default rules for IPOWDM service") + elif service_type == ServiceTypeEnum.SERVICETYPE_TAPI_LSP: + compose_tapi_lsp_config_rules(config_rules, service.service_config.config_rules) + self.logger.info("Installing default rules for TAPI LSP service") + else: MSG = 'Unhandled generic Config Rules for service {:s} {:s}' self.logger.warning(MSG.format(str(service_uuid), str(ServiceTypeEnum.Name(service_type)))) diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py index 87353f451757c2a05d2fdb724be2fa810992d56b..7553341e8bf2a4feefadcaac1e5ae6788013f8db 100644 --- a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py +++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py @@ -240,6 +240,11 @@ def compose_ipowdm_config_rules(main_service_config_rules : List, subservice_con for rule_name, defaults in CONFIG_RULES: compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults) +def compose_tapi_lsp_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None: + CONFIG_RULES: List[Tuple[str, dict]] = [(SETTINGS_RULE_NAME, TAPI_SETTINGS_FIELD_DEFAULTS)] + for rule_name, defaults in CONFIG_RULES: + compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults) + def pairwise(iterable : Iterable) -> Tuple[Iterable, Iterable]: # TODO: To be replaced by itertools.pairwise() when we move to Python 3.10 # Python 3.10 introduced method itertools.pairwise() diff --git a/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py b/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py index 42121bdfd9f3e206ec3ced2467c545705313126b..53d7cc5a6b74af45b0bf5eea6c95c4af3b394354 100644 --- a/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py +++ b/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py @@ -27,7 +27,6 @@ PACKET_DEVICE_TYPES = { DeviceTypeEnum.PACKET_POP, DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER, DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH, - DeviceTypeEnum.IPOWDM_ROUTER } L2_DEVICE_TYPES = { @@ -44,18 +43,38 @@ OPTICAL_DEVICE_TYPES = { DeviceTypeEnum.OPTICAL_TRANSPONDER, DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER, } -SERVICE_TYPE_L2NM = {ServiceTypeEnum.SERVICETYPE_L2NM} -SERVICE_TYPE_L3NM = {ServiceTypeEnum.SERVICETYPE_L3NM} -SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM} -SERVICE_TYPE_TAPI = {ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE} -SERVICE_TYPE_IPOWDM = {ServiceTypeEnum.SERVICETYPE_IPOWDM} +SERVICE_TYPE_L2NM = {ServiceTypeEnum.SERVICETYPE_L2NM} +SERVICE_TYPE_L3NM = {ServiceTypeEnum.SERVICETYPE_L3NM} +SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM} +SERVICE_TYPE_TAPI = {ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE} +SERVICE_TYPE_IP_LINK = {ServiceTypeEnum.SERVICETYPE_IP_LINK} +SERVICE_TYPE_IPOWDM = {ServiceTypeEnum.SERVICETYPE_IPOWDM} +SERVICE_TYPE_TAPI_LSP = {ServiceTypeEnum.SERVICETYPE_TAPI_LSP} -def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum: - if device_type in PACKET_DEVICE_TYPES and prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type - if device_type in PACKET_DEVICE_TYPES and prv_service_type in SERVICE_TYPE_IPOWDM: return ServiceTypeEnum.SERVICETYPE_IPOWDM +def get_service_type( + device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum +) -> ServiceTypeEnum: + if device_type is DeviceTypeEnum.NCE: return ServiceTypeEnum.SERVICETYPE_L3NM + if device_type is DeviceTypeEnum.TERAFLOWSDN_CONTROLLER: return ServiceTypeEnum.SERVICETYPE_L3NM + if ( + device_type in PACKET_DEVICE_TYPES and + prv_service_type in SERVICE_TYPE_LXNM + ): return prv_service_type + if ( + device_type in PACKET_DEVICE_TYPES and + prv_service_type in SERVICE_TYPE_IP_LINK + ): return prv_service_type if device_type in L2_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_L2NM if device_type in OPTICAL_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE if device_type in NETWORK_DEVICE_TYPES: return prv_service_type + if ( + device_type in PACKET_DEVICE_TYPES and + prv_service_type in SERVICE_TYPE_IPOWDM + ): return ServiceTypeEnum.SERVICETYPE_IPOWDM + if ( + device_type in PACKET_DEVICE_TYPES and + prv_service_type in SERVICE_TYPE_TAPI_LSP + ): return prv_service_type str_fields = ', '.join([ 'device_type={:s}'.format(str(device_type)), diff --git a/src/pluggables/.gitlab-ci.yml b/src/pluggables/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..695348a0302a6d16e6ee83475fc480abd2380f3d --- /dev/null +++ b/src/pluggables/.gitlab-ci.yml @@ -0,0 +1,115 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Build, tag, and push the Docker image to the GitLab Docker registry +build pluggables: + variables: + IMAGE_NAME: 'pluggables' # name of the microservice + IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) + stage: build + before_script: + - docker image prune --force + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - docker buildx build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile . + - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" + - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" + after_script: + - docker image prune --force + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + - changes: + - src/common/**/*.py + - proto/*.proto + - src/$IMAGE_NAME/**/*.{py,in,yml} + - src/$IMAGE_NAME/Dockerfile + - src/$IMAGE_NAME/tests/*.py + - manifests/${IMAGE_NAME}service.yaml + - .gitlab-ci.yml + +# Apply unit test to the component +#unit_test pluggables: +# variables: +# IMAGE_NAME: 'pluggables' # name of the microservice +# IMAGE_TAG: 'latest' # tag of the container image (production, development, etc) +# stage: unit_test +# needs: +# - build pluggables +# before_script: +# - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY +# - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi +# - if docker container ls | grep crdb; then docker rm -f crdb; else echo "CockroachDB container is not in the system"; fi +# - if docker volume ls | grep crdb; then docker volume rm -f crdb; else echo "CockroachDB volume is not in the system"; fi +# - if docker container ls | grep context; then docker rm -f context; else echo "context container is not in the system"; fi +# - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME container is not in the system"; fi +# - docker container prune -f +# script: +# - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" +# - docker pull "$CI_REGISTRY_IMAGE/context:$IMAGE_TAG" +# - docker pull "cockroachdb/cockroach:latest-v22.2" +# - docker volume create crdb +# - > +# docker run --name crdb -d --network=teraflowbridge -p 26257:26257 -p 8080:8080 +# --env COCKROACH_DATABASE=tfs_test --env COCKROACH_USER=tfs --env COCKROACH_PASSWORD=tfs123 +# --volume "crdb:/cockroach/cockroach-data" +# cockroachdb/cockroach:latest-v22.2 start-single-node +# - echo "Waiting for initialization..." +# - while ! docker logs crdb 2>&1 | grep -q 'finished creating default user \"tfs\"'; do sleep 1; done +# - CRDB_ADDRESS=$(docker inspect crdb --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") +# - echo $CRDB_ADDRESS +# - > +# docker run --name context -d -p 1010:1010 +# --env "CRDB_URI=cockroachdb://tfs:tfs123@${CRDB_ADDRESS}:26257/tfs_test?sslmode=require" +# --network=teraflowbridge +# $CI_REGISTRY_IMAGE/context:$IMAGE_TAG +# - docker ps -a +# - CONTEXT_ADDRESS=$(docker inspect context --format "{{.NetworkSettings.Networks.teraflowbridge.IPAddress}}") +# - echo $CONTEXT_ADDRESS +# - > +# docker run --name $IMAGE_NAME -d -p 30040:30040 +# --env "CONTEXTSERVICE_SERVICE_HOST=${CONTEXT_ADDRESS}" +# --env "CONTEXTSERVICE_SERVICE_PORT_GRPC=1010" +# --volume "$PWD/src/$IMAGE_NAME/tests:/opt/results" +# --network=teraflowbridge +# $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG +# - docker ps -a +# - sleep 5 +# - docker logs $IMAGE_NAME +# - > +# docker exec -i $IMAGE_NAME bash -c +# "coverage run -m pytest --log-level=INFO --verbose --junitxml=/opt/results/${IMAGE_NAME}_report.xml $IMAGE_NAME/tests/test_*.py" +# - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing" +# coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' +# after_script: +# - docker rm -f $IMAGE_NAME context crdb +# - docker volume rm -f crdb +# - docker network rm teraflowbridge +# - docker volume prune --force +# - docker image prune --force +# rules: +# - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' +# - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' +# - changes: +# - src/common/**/*.py +# - proto/*.proto +# - src/$IMAGE_NAME/**/*.{py,in,yml} +# - src/$IMAGE_NAME/Dockerfile +# - src/$IMAGE_NAME/tests/*.py +# - manifests/${IMAGE_NAME}service.yaml +# - .gitlab-ci.yml +# artifacts: +# when: always +# reports: +# junit: src/$IMAGE_NAME/tests/${IMAGE_NAME}_report.xml diff --git a/src/pluggables/Dockerfile b/src/pluggables/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..de4d7aa62fea7bc23096467d8c495862afcca3c2 --- /dev/null +++ b/src/pluggables/Dockerfile @@ -0,0 +1,92 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM python:3.9-slim + +# Install dependencies +RUN apt-get --yes --quiet --quiet update && \ + apt-get --yes --quiet --quiet install wget g++ git build-essential cmake libpcre2-dev python3-dev python3-cffi && \ + rm -rf /var/lib/apt/lists/* + +# Download, build and install libyang. Note that APT package is outdated +# - Ref: https://github.com/CESNET/libyang +# - Ref: https://github.com/CESNET/libyang-python/ +RUN mkdir -p /var/libyang +RUN git clone https://github.com/CESNET/libyang.git /var/libyang +WORKDIR /var/libyang +RUN git fetch +RUN git checkout v2.1.148 +RUN mkdir -p /var/libyang/build +WORKDIR /var/libyang/build +RUN cmake -D CMAKE_BUILD_TYPE:String="Release" .. +RUN make +RUN make install +RUN ldconfig + +# Set Python to show logs as they occur +ENV PYTHONUNBUFFERED=0 + +# Download the gRPC health probe +RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ + wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ + chmod +x /bin/grpc_health_probe + +# Get generic Python packages +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' + +# Get common Python packages +# Note: this step enables sharing the previous Docker build steps among all the Python components +WORKDIR /var/teraflow +COPY common_requirements.in common_requirements.in +RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in +RUN python3 -m pip install -r common_requirements.txt + +# Add common files into working directory +WORKDIR /var/teraflow/common +COPY src/common/. ./ +RUN rm -rf proto + +# Create proto sub-folder, copy .proto files, and generate Python code +RUN mkdir -p /var/teraflow/common/proto +WORKDIR /var/teraflow/common/proto +RUN touch __init__.py +COPY proto/*.proto ./ +RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto +RUN rm *.proto +RUN find . -type f -exec sed -i -E 's/^(import\ .*)_pb2/from . \1_pb2/g' {} \; + +# Create component sub-folders, get specific Python packages +RUN mkdir -p /var/teraflow/pluggables +WORKDIR /var/teraflow/pluggables +COPY src/device/requirements.in requirements_device.in +COPY src/pluggables/requirements.in requirements_pluggables.in +RUN pip-compile --quiet --output-file=requirements.txt requirements_device.in requirements_pluggables.in +RUN python3 -m pip install -r requirements.txt + +# Add component files into working directory +WORKDIR /var/teraflow +COPY src/context/__init__.py context/__init__.py +COPY src/context/client/. context/client/ +COPY src/device/__init__.py device/__init__.py +COPY src/device/Config.py device/Config.py +COPY src/device/client/. device/client/ +COPY src/device/service/. device/service/ +COPY src/monitoring/__init__.py monitoring/__init__.py +COPY src/monitoring/client/. monitoring/client/ +COPY src/pluggables/. pluggables/ + +# Start the service +ENTRYPOINT ["python", "-m", "pluggables.service"] diff --git a/src/pluggables/README.md b/src/pluggables/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c679a8c7caee3cd41c7735e76acde19facc3f8fd --- /dev/null +++ b/src/pluggables/README.md @@ -0,0 +1,213 @@ +# Pluggables Service (Digital Subcarrier Multiplexed) + +## Overview + +The Pluggables service provides gRPC-based management for optical pluggables and their digital subcarrier groups. It enables configuration and monitoring of coherent optical transceivers with support for multi-carrier operation. + +## Key Concepts + +### Pluggable +An optical transceiver module installed in a device (router/switch) at a specific physical slot index. + +### Digital Subcarrier Group (DSC Group) +A logical grouping of digital subcarriers within a pluggable, representing a coherent optical channel with shared parameters: +- **group_size**: Expected number of subcarriers in the group +- **group_capacity_gbps**: Total capacity in Gbps (e.g., 400G) +- **subcarrier_spacing_mhz**: Frequency spacing between subcarriers (e.g., 75 MHz) + +### Digital Subcarrier +Individual frequency channels within a DSC group with configurable parameters: +- **active**: Enable/disable the subcarrier +- **target_output_power_dbm**: Transmit power in dBm +- **center_frequency_hz**: Carrier frequency in Hz (e.g., 193.1 THz) +- **symbol_rate_baud**: Symbol rate in Baud (e.g., 64 GBaud) + +## Service API + +### gRPC Methods + +| Method | Request | Response | Description | +|--------|---------|----------|-------------| +| `CreatePluggable` | `CreatePluggableRequest` | `Pluggable` | Create a new pluggable with optional initial configuration | +| `GetPluggable` | `GetPluggableRequest` | `Pluggable` | Retrieve a specific pluggable by ID | +| `ListPluggables` | `ListPluggablesRequest` | `ListPluggablesResponse` | List all pluggables for a device | +| `DeletePluggable` | `DeletePluggableRequest` | `Empty` | Remove a pluggable from management | +| `ConfigurePluggable` | `ConfigurePluggableRequest` | `Pluggable` | Apply full configuration to a pluggable | + +### View Levels + +Control the level of detail in responses: +- `VIEW_UNSPECIFIED (0)`: Default, returns full pluggable +- `VIEW_CONFIG (1)`: Returns only configuration data +- `VIEW_STATE (2)`: Returns only state/telemetry data +- `VIEW_FULL (3)`: Returns complete pluggable (config + state) + +## Usage Examples + +### 1. Creating a Pluggable Without Configuration + +```python +from pluggables.client.PluggablesClient import PluggablesClient +from pluggables.tests.testmessages import create_pluggable_request + +# Create client +client = PluggablesClient() + +# Create pluggable request (auto-assign index) +request = create_pluggable_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + preferred_pluggable_index=-1 # -1 for auto-assignment +) + +# Create pluggable +pluggable = client.CreatePluggable(request) +print(f"Created pluggable at index: {pluggable.id.pluggable_index}") + +# Close client +client.close() +``` + +### 2. Creating a Pluggable With Initial Configuration + +```python +from pluggables.tests.testmessages import create_pluggable_request + +# Create pluggable with optical channel configuration +request = create_pluggable_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + preferred_pluggable_index=0, # Physical slot 0 + with_initial_config=True # Include DSC group configuration +) + +pluggable = client.CreatePluggable(request) + +# Verify configuration +assert len(pluggable.config.dsc_groups) == 1 +dsc_group = pluggable.config.dsc_groups[0] +assert dsc_group.group_size == 4 +assert dsc_group.group_capacity_gbps == 400.0 +``` + +### 3. Listing Pluggables with View Filtering + +```python +from common.proto.pluggables_pb2 import View +from pluggables.tests.testmessages import create_list_pluggables_request + +# List only configuration (no state data) +request = create_list_pluggables_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + view_level=View.VIEW_CONFIG +) + +response = client.ListPluggables(request) +for pluggable in response.pluggables: + print(f"Pluggable {pluggable.id.pluggable_index}: {len(pluggable.config.dsc_groups)} DSC groups") +``` + +### 4. Getting a Specific Pluggable + +```python +from pluggables.tests.testmessages import create_get_pluggable_request + +# Get full pluggable details +request = create_get_pluggable_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + pluggable_index=0, + view_level=View.VIEW_FULL +) + +pluggable = client.GetPluggable(request) +print(f"Device: {pluggable.id.device.device_uuid.uuid}") +print(f"Index: {pluggable.id.pluggable_index}") +print(f"DSC Groups: {len(pluggable.config.dsc_groups)}") +``` + +### 5. Configuring a Pluggable + +```python +from pluggables.tests.testmessages import create_configure_pluggable_request + +# Apply full configuration (reconfigure optical channels) +request = create_configure_pluggable_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + pluggable_index=0, + view_level=View.VIEW_CONFIG, + apply_timeout_seconds=30 +) + +# Configuration includes: +# - 1 DSC group with 400G capacity, 75 MHz spacing +# - 2 digital subcarriers at 193.1 THz and 193.175 THz +# - Each subcarrier: -10 dBm power, 64 GBaud symbol rate + +pluggable = client.ConfigurePluggable(request) +print(f"Configured {len(pluggable.config.dsc_groups[0].subcarriers)} subcarriers") +``` + +### 6. Deleting a Pluggable + +```python +from pluggables.tests.testmessages import create_delete_pluggable_request + +# Delete pluggable from management +request = create_delete_pluggable_request( + device_uuid="550e8400-e29b-41d4-a716-446655440000", + pluggable_index=0 +) + +response = client.DeletePluggable(request) +print("Pluggable deleted successfully") +``` + +## Configuration Message Structure + +### Complete Configuration Example + +```python +from common.proto import pluggables_pb2 + +# Create configuration request +request = pluggables_pb2.ConfigurePluggableRequest() + +# Set pluggable ID +request.config.id.device.device_uuid.uuid = "550e8400-e29b-41d4-a716-446655440000" +request.config.id.pluggable_index = 0 + +# Add DSC group +dsc_group = request.config.dsc_groups.add() +dsc_group.id.pluggable.device.device_uuid.uuid = "550e8400-e29b-41d4-a716-446655440000" +dsc_group.id.pluggable.pluggable_index = 0 +dsc_group.id.group_index = 0 +dsc_group.group_size = 2 +dsc_group.group_capacity_gbps = 400.0 +dsc_group.subcarrier_spacing_mhz = 75.0 + +# Add subcarrier 1 +subcarrier = dsc_group.subcarriers.add() +subcarrier.id.group.pluggable.device.device_uuid.uuid = "550e8400-e29b-41d4-a716-446655440000" +subcarrier.id.group.pluggable.pluggable_index = 0 +subcarrier.id.group.group_index = 0 +subcarrier.id.subcarrier_index = 0 +subcarrier.active = True +subcarrier.target_output_power_dbm = -10.0 +subcarrier.center_frequency_hz = 193100000000000 # 193.1 THz +subcarrier.symbol_rate_baud = 64000000000 # 64 GBaud + +# Add subcarrier 2 +subcarrier2 = dsc_group.subcarriers.add() +# ... (similar configuration for second subcarrier) + +# Set view level and timeout +request.view_level = pluggables_pb2.VIEW_FULL +request.apply_timeout_seconds = 30 +``` + +## API Reference + +For complete API documentation, see: +- Protocol Buffer definitions: `proto/pluggables.proto` +- Client implementation: `src/pluggables/client/PluggablesClient.py` +- Service implementation: `src/pluggables/service/PluggablesServiceServicerImpl.py` +- Test examples: `src/pluggables/tests/test_Pluggables.py` +- Message helpers: `src/pluggables/tests/testmessages.py` diff --git a/src/pluggables/__init__.py b/src/pluggables/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/pluggables/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/pluggables/client/PluggablesClient.py b/src/pluggables/client/PluggablesClient.py new file mode 100644 index 0000000000000000000000000000000000000000..559619294d2f83aadc082a9be70ea4c6be000268 --- /dev/null +++ b/src/pluggables/client/PluggablesClient.py @@ -0,0 +1,87 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import grpc, logging +from common.Constants import ServiceNameEnum +from common.Settings import get_service_host, get_service_port_grpc + +from common.proto.context_pb2 import Empty +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.client.RetryDecorator import retry, delay_exponential + +from common.proto.pluggables_pb2_grpc import PluggablesServiceStub +from common.proto.pluggables_pb2 import ( + Pluggable, CreatePluggableRequest, ListPluggablesRequest, ListPluggablesResponse, + GetPluggableRequest, DeletePluggableRequest, ConfigurePluggableRequest) + +LOGGER = logging.getLogger(__name__) +MAX_RETRIES = 10 +DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0) +RETRY_DECORATOR = retry(max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION, prepare_method_name='connect') + +class PluggablesClient: + def __init__(self, host=None, port=None): + if not host: host = get_service_host(ServiceNameEnum.PLUGGABLES) + if not port: port = get_service_port_grpc(ServiceNameEnum.PLUGGABLES) + self.endpoint = '{:s}:{:s}'.format(str(host), str(port)) + LOGGER.debug('Creating channel to {:s}...'.format(str(self.endpoint))) + + self.channel = None + self.stub = None + self.connect() + LOGGER.debug('Channel created') + + def connect(self): + self.channel = grpc.insecure_channel(self.endpoint) + self.stub = PluggablesServiceStub(self.channel) + + def close(self): + if self.channel is not None: self.channel.close() + self.channel = None + self.stub = None + + @RETRY_DECORATOR + def CreatePluggable(self, request : CreatePluggableRequest) -> Pluggable: # pyright: ignore[reportInvalidTypeForm] + LOGGER.debug('CreatePluggable: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.CreatePluggable(request) + LOGGER.debug('CreatePluggable result: {:s}'.format(grpc_message_to_json_string(response))) + return response + + @RETRY_DECORATOR + def ListPluggables(self, request : ListPluggablesRequest) -> ListPluggablesResponse: # pyright: ignore[reportInvalidTypeForm] + LOGGER.debug('ListPluggables: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.ListPluggables(request) + LOGGER.debug('ListPluggables result: {:s}'.format(grpc_message_to_json_string(response))) + return response + + @RETRY_DECORATOR + def GetPluggable(self, request : GetPluggableRequest) -> Pluggable: # pyright: ignore[reportInvalidTypeForm] + LOGGER.debug('GetPluggable: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.GetPluggable(request) + LOGGER.debug('GetPluggable result: {:s}'.format(grpc_message_to_json_string(response))) + return response + + @RETRY_DECORATOR + def DeletePluggable(self, request : DeletePluggableRequest) -> Empty: # pyright: ignore[reportInvalidTypeForm] + LOGGER.debug('DeletePluggable: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.DeletePluggable(request) + LOGGER.debug('DeletePluggable result: {:s}'.format(grpc_message_to_json_string(response))) + return response + + @RETRY_DECORATOR + def ConfigurePluggable(self, request : ConfigurePluggableRequest) -> Pluggable: # pyright: ignore[reportInvalidTypeForm] + LOGGER.debug('ConfigurePluggable: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.ConfigurePluggable(request) + LOGGER.debug('ConfigurePluggable result: {:s}'.format(grpc_message_to_json_string(response))) + return response diff --git a/src/pluggables/client/__init__.py b/src/pluggables/client/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/pluggables/client/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/pluggables/requirements.in b/src/pluggables/requirements.in new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/pluggables/requirements.in @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/pluggables/service/PluggablesService.py b/src/pluggables/service/PluggablesService.py new file mode 100644 index 0000000000000000000000000000000000000000..65675ec3ce1423d48aa5a7ca0b88fe87206c3ac7 --- /dev/null +++ b/src/pluggables/service/PluggablesService.py @@ -0,0 +1,28 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from common.Constants import ServiceNameEnum +from common.Settings import get_service_port_grpc +from common.tools.service.GenericGrpcService import GenericGrpcService +from common.proto.pluggables_pb2_grpc import add_PluggablesServiceServicer_to_server +from pluggables.service.PluggablesServiceServicerImpl import PluggablesServiceServicerImpl + +class PluggablesService(GenericGrpcService): + def __init__(self, cls_name: str = __name__) -> None: + port = get_service_port_grpc(ServiceNameEnum.PLUGGABLES) + super().__init__(port, cls_name=cls_name) + self.dscmPluggableService_servicer = PluggablesServiceServicerImpl() + + def install_servicers(self): + add_PluggablesServiceServicer_to_server(self.dscmPluggableService_servicer, self.server) diff --git a/src/pluggables/service/PluggablesServiceServicerImpl.py b/src/pluggables/service/PluggablesServiceServicerImpl.py new file mode 100644 index 0000000000000000000000000000000000000000..c34b0999f2538ff828832ade64af2ea379020981 --- /dev/null +++ b/src/pluggables/service/PluggablesServiceServicerImpl.py @@ -0,0 +1,311 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json, logging, grpc +from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method +from common.proto.context_pb2 import Empty, Device, DeviceId +from common.proto.pluggables_pb2_grpc import PluggablesServiceServicer +from common.proto.pluggables_pb2 import ( + Pluggable, CreatePluggableRequest, ListPluggablesRequest, ListPluggablesResponse, + GetPluggableRequest, DeletePluggableRequest, ConfigurePluggableRequest) +from common.method_wrappers.ServiceExceptions import ( + NotFoundException, AlreadyExistsException, InvalidArgumentException, OperationFailedException) +from common.tools.object_factory.ConfigRule import json_config_rule_set +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from .config_translator import translate_pluggable_config_to_netconf, create_config_rule_from_dict + +LOGGER = logging.getLogger(__name__) +METRICS_POOL = MetricsPool('Pluggables', 'ServicegRPC') + +class PluggablesServiceServicerImpl(PluggablesServiceServicer): + def __init__(self): + LOGGER.info('Initiate PluggablesService') + self.pluggables = {} # In-memory store for pluggables + self.context_client = ContextClient() + self.device_client = DeviceClient() + + def _push_config_to_device(self, device_uuid: str, pluggable_index: int, pluggable_config): # type: ignore + """ + Push pluggable configuration to the actual device via DeviceClient. + Args: + device_uuid: UUID of the target device + pluggable_index: Index of the pluggable + pluggable_config: PluggableConfig protobuf message + """ + LOGGER.info(f"Configuring device {device_uuid}, pluggable index {pluggable_index}") + + # Step 1: Get the device from Context service (to extract IP address) + try: + device = self.context_client.GetDevice(DeviceId(device_uuid={'uuid': device_uuid})) # type: ignore + LOGGER.info(f"Retrieved device from Context: {device.name}") + except grpc.RpcError as e: + LOGGER.error(f"Failed to get device {device_uuid} from Context: {e}") + raise + + # Translate pluggable config to NETCONF format + component_name = f"channel-{pluggable_index}" + netconf_config = translate_pluggable_config_to_netconf(pluggable_config, component_name=component_name) + + LOGGER.info(f"Translated pluggable config to NETCONF format: {netconf_config}") + + # Step 2: Create configuration rule with generic pluggable template + # Use template index 1 for standard pluggable configuration + template_index = 1 + resource_key = f"/pluggable/{template_index}/config" + + # Create config rule dict and convert to protobuf + config_json = json.dumps(netconf_config) + config_rule_dict = json_config_rule_set(resource_key, config_json) + config_rule = create_config_rule_from_dict(config_rule_dict) + + # Step 3: Create a minimal Device object with only the DSCM config rule + config_device = Device() + config_device.device_id.device_uuid.uuid = device_uuid # type: ignore + config_device.device_config.config_rules.append(config_rule) # type: ignore + + LOGGER.info(f"Created minimal device with config rule: resource_key={resource_key}") + + # Step 4: Call ConfigureDevice to push the configuration + try: + device_id = self.device_client.ConfigureDevice(config_device) + LOGGER.info(f"Successfully configured device {device_id.device_uuid.uuid}") # type: ignore + except grpc.RpcError as e: + LOGGER.error(f"Failed to configure device {device_uuid}: {e}") + raise InvalidArgumentException( + 'Device configuration', f'{device_uuid}:{pluggable_index}', extra_details=str(e)) + + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) + def CreatePluggable( + self, request: CreatePluggableRequest, context: grpc.ServicerContext # type: ignore + ) -> Pluggable: # type: ignore + LOGGER.info("Received gRPC message object: {:}".format(request)) + + device_uuid = request.device.device_uuid.uuid + + if request.preferred_pluggable_index >= 0: + pluggable_index = request.preferred_pluggable_index + else: + pluggable_index = -1 + + pluggable_key = f"{device_uuid}:{pluggable_index}" + + if pluggable_key in self.pluggables: + LOGGER.warning(f"Pluggable already exists at device {device_uuid} index {pluggable_index}") + raise AlreadyExistsException('Pluggable', pluggable_key) + + pluggable = Pluggable() + + pluggable.id.device.device_uuid.uuid = device_uuid + pluggable.id.pluggable_index = pluggable_index + + if request.HasField('initial_config'): + pluggable.config.CopyFrom(request.initial_config) + # The below code ensures ID consistency across all levels are maintained + # User might send incorrect/inconsistent IDs in nested structures + pluggable.config.id.device.device_uuid.uuid = device_uuid + pluggable.config.id.pluggable_index = pluggable_index + + for dsc_group in pluggable.config.dsc_groups: + dsc_group.id.pluggable.device.device_uuid.uuid = device_uuid + dsc_group.id.pluggable.pluggable_index = pluggable_index + + for subcarrier in dsc_group.subcarriers: + subcarrier.id.group.pluggable.device.device_uuid.uuid = device_uuid + subcarrier.id.group.pluggable.pluggable_index = pluggable_index + + pluggable.state.id.device.device_uuid.uuid = device_uuid + pluggable.state.id.pluggable_index = pluggable_index + + # Verify device exists in Context service + try: + device = self.context_client.GetDevice(DeviceId(device_uuid={'uuid': device_uuid})) # type: ignore + LOGGER.info(f"Device {device_uuid} found in Context service: {device.name}") + except grpc.RpcError as e: + LOGGER.error(f"Device {device_uuid} not found in Context service: {e}") + raise NotFoundException( + 'Device', device_uuid, extra_details='Device must exist before creating pluggable') + + # If initial_config is provided, push configuration to device + if request.HasField('initial_config') and len(pluggable.config.dsc_groups) > 0: + LOGGER.info(f"Pushing initial configuration to device {device_uuid}") + try: + self._push_config_to_device(device_uuid, pluggable_index, pluggable.config) + except Exception as e: + LOGGER.error(f"Failed to push initial config to device: {e}") + raise OperationFailedException( + 'Push initial pluggable configuration', extra_details=str(e)) + + self.pluggables[pluggable_key] = pluggable + + LOGGER.info(f"Created pluggable: device={device_uuid}, index={pluggable_index}") + return pluggable + + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) + def GetPluggable( + self, request: GetPluggableRequest, context: grpc.ServicerContext # type: ignore + ) -> Pluggable: # type: ignore + LOGGER.info("Received gRPC message object: {:}".format(request)) + + device_uuid = request.id.device.device_uuid.uuid + pluggable_index = request.id.pluggable_index + pluggable_key = f"{device_uuid}:{pluggable_index}" + + if pluggable_key not in self.pluggables: + LOGGER.warning(f'No matching pluggable found: device={device_uuid}, index={pluggable_index}') + raise NotFoundException('Pluggable', pluggable_key) + + pluggable = self.pluggables[pluggable_key] + + if request.view_level == 1: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.config.CopyFrom(pluggable.config) + return filtered + elif request.view_level == 2: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.state.CopyFrom(pluggable.state) + return filtered + else: + return pluggable + + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) + def DeletePluggable( + self, request: DeletePluggableRequest, context: grpc.ServicerContext # type: ignore + ) -> Empty: # type: ignore + LOGGER.info("Received gRPC message object: {:}".format(request)) + + device_uuid = request.id.device.device_uuid.uuid + pluggable_index = request.id.pluggable_index + pluggable_key = f"{device_uuid}:{pluggable_index}" + + if pluggable_key not in self.pluggables: + LOGGER.info(f'No matching pluggable found: device={device_uuid}, index={pluggable_index}') + raise NotFoundException('Pluggable', pluggable_key) + + # Remove pluggable config from device + # TODO: Verify deletion works with actual hub and leaf devices + # + try: + pluggable = self.pluggables[pluggable_key] + # Create empty config to trigger deletion + from common.proto.pluggables_pb2 import PluggableConfig + empty_config = PluggableConfig() + empty_config.id.device.device_uuid.uuid = device_uuid + empty_config.id.pluggable_index = pluggable_index + + LOGGER.info(f"Removing configuration from device {device_uuid}") + self._push_config_to_device(device_uuid, pluggable_index, empty_config) + except Exception as e: + LOGGER.error(f"Failed to remove config from device: {e}") + # Continue with deletion from memory even if device config removal fails + + del self.pluggables[pluggable_key] + LOGGER.info(f"Deleted pluggable: device={device_uuid}, index={pluggable_index}") + + return Empty() + + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) + def ListPluggables( + self, request: ListPluggablesRequest, context: grpc.ServicerContext # type: ignore + ) -> ListPluggablesResponse: # type: ignore + LOGGER.info("Received gRPC message object: {:}".format(request)) + + response = ListPluggablesResponse() + device_uuid = request.device.device_uuid.uuid if request.HasField('device') else None + + for pluggable in self.pluggables.values(): + if device_uuid and pluggable.id.device.device_uuid.uuid != device_uuid: + continue + + if request.view_level == 1: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.config.CopyFrom(pluggable.config) + response.pluggables.append(filtered) + elif request.view_level == 2: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.state.CopyFrom(pluggable.state) + response.pluggables.append(filtered) + else: + response.pluggables.append(pluggable) + + LOGGER.info(f"Returning {len(response.pluggables)} pluggable(s)") + return response + + @safe_and_metered_rpc_method(METRICS_POOL, LOGGER) + def ConfigurePluggable( + self, request: ConfigurePluggableRequest, context: grpc.ServicerContext # type: ignore + ) -> Pluggable: # type: ignore + LOGGER.info("Received gRPC message object: {:}".format(request)) + + device_uuid = request.config.id.device.device_uuid.uuid + pluggable_index = request.config.id.pluggable_index + pluggable_key = f"{device_uuid}:{pluggable_index}" + + if pluggable_key not in self.pluggables: + LOGGER.info(f'No matching pluggable found: device={device_uuid}, index={pluggable_index}') + raise NotFoundException('Pluggable', pluggable_key) + + pluggable = self.pluggables[pluggable_key] + + LOGGER.info(f"Applying full configuration to pluggable: device={device_uuid}, index={pluggable_index}") + pluggable.config.CopyFrom(request.config) + + # To ensure ID consistency across all levels are maintained + # User might send incorrect/inconsistent IDs in nested structures + pluggable.config.id.device.device_uuid.uuid = device_uuid + pluggable.config.id.pluggable_index = pluggable_index + for dsc_group in pluggable.config.dsc_groups: + dsc_group.id.pluggable.device.device_uuid.uuid = device_uuid + dsc_group.id.pluggable.pluggable_index = pluggable_index + for subcarrier in dsc_group.subcarriers: + subcarrier.id.group.pluggable.device.device_uuid.uuid = device_uuid + subcarrier.id.group.pluggable.pluggable_index = pluggable_index + + has_config = len(pluggable.config.dsc_groups) > 0 + + # Push pluggable config to device via DSCM driver + if has_config: + LOGGER.info(f"Pushing configuration to device {device_uuid}") + try: + self._push_config_to_device(device_uuid, pluggable_index, pluggable.config) + except Exception as e: + LOGGER.error(f"Failed to push config to device: {e}") + # Continue even if device configuration fails + # In production, you might want to raise the exception + else: + LOGGER.info(f"Empty configuration - removing config from device {device_uuid}") + try: + self._push_config_to_device(device_uuid, pluggable_index, pluggable.config) + except Exception as e: + LOGGER.error(f"Failed to remove config from device: {e}") + + state_msg = "configured" if has_config else "deconfigured (empty config)" + LOGGER.info(f"Successfully {state_msg} pluggable: device={device_uuid}, index={pluggable_index}") + + if request.view_level == 1: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.config.CopyFrom(pluggable.config) + return filtered + elif request.view_level == 2: + filtered = Pluggable() + filtered.id.CopyFrom(pluggable.id) + filtered.state.CopyFrom(pluggable.state) + return filtered + else: + return pluggable diff --git a/src/pluggables/service/__init__.py b/src/pluggables/service/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/pluggables/service/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/pluggables/service/__main__.py b/src/pluggables/service/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..fc99a41cb7759e0b337874427ef638b3de416e9d --- /dev/null +++ b/src/pluggables/service/__main__.py @@ -0,0 +1,51 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging, signal, sys, threading +from common.Settings import get_log_level +from .PluggablesService import PluggablesService + +terminate = threading.Event() +LOGGER = None + +def signal_handler(signal, frame): + LOGGER.warning('Terminate signal received') + terminate.set() + +def main(): + global LOGGER # pylint: disable=global-statement + + log_level = get_log_level() + logging.basicConfig(level=log_level) + LOGGER = logging.getLogger(__name__) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + + LOGGER.debug('Starting...') + + grpc_service = PluggablesService() + grpc_service.start() + + # Wait for Ctrl+C or termination signal + while not terminate.wait(timeout=1.0): pass + + LOGGER.debug('Terminating...') + grpc_service.stop() + + LOGGER.debug('Bye') + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/src/pluggables/service/config_translator.py b/src/pluggables/service/config_translator.py new file mode 100644 index 0000000000000000000000000000000000000000..4c0e8c765de40cebf70cd5209c97a78be93f182f --- /dev/null +++ b/src/pluggables/service/config_translator.py @@ -0,0 +1,107 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from typing import Dict, Any +from common.proto.pluggables_pb2 import PluggableConfig +from common.proto.context_pb2 import ConfigRule + +LOGGER = logging.getLogger(__name__) + + +def create_config_rule_from_dict(config_rule_dict: Dict[str, Any]) -> ConfigRule: # type: ignore + config_rule = ConfigRule() + config_rule.action = config_rule_dict['action'] + config_rule.custom.resource_key = config_rule_dict['custom']['resource_key'] + config_rule.custom.resource_value = config_rule_dict['custom']['resource_value'] + return config_rule + + +def translate_pluggable_config_to_netconf( + pluggable_config: PluggableConfig, # type: ignore + component_name: str = "channel-1" # Fallback if channel_name not provided (channel-1 for HUB and channel-1/3/5 for LEAF) +) -> Dict[str, Any]: + """ + Translate PluggableConfig protobuf message to the format expected by NetConfDriver. + Args: + pluggable_config: PluggableConfig message containing DSC groups and subcarriers + component_name: Fallback name if channel_name is not specified in config (default: "channel-1") + Returns: + Dictionary in the format expected by NetConfDriver templates: + """ + + if not pluggable_config or not pluggable_config.dsc_groups: + LOGGER.warning("Empty pluggable config provided") + return { + "name": channel_name, + "operation": "delete" + } + if hasattr(pluggable_config, 'channel_name') and pluggable_config.channel_name: + channel_name = pluggable_config.channel_name + LOGGER.debug(f"Using channel_name from PluggableConfig: {channel_name}") + else: + channel_name = component_name + LOGGER.debug(f"Using fallback component_name: {channel_name}") + + if not hasattr(pluggable_config, 'center_frequency_mhz') or pluggable_config.center_frequency_mhz <= 0: + raise ValueError("center_frequency_mhz is required and must be greater than 0 in PluggableConfig") + center_frequency_mhz = int(pluggable_config.center_frequency_mhz) + + if not hasattr(pluggable_config, 'operational_mode') or pluggable_config.operational_mode <= 0: + raise ValueError("operational_mode is required and must be greater than 0 in PluggableConfig") + operational_mode = pluggable_config.operational_mode + + if not hasattr(pluggable_config, 'target_output_power_dbm'): + raise ValueError("target_output_power_dbm is required in PluggableConfig") + target_output_power = pluggable_config.target_output_power_dbm + + if not hasattr(pluggable_config, 'line_port'): + raise ValueError("line_port is required in PluggableConfig") + line_port = pluggable_config.line_port + + LOGGER.debug(f"Extracted config values: freq={center_frequency_mhz} MHz, " + f"op_mode={operational_mode}, power={target_output_power} dBm, line_port={line_port}") + + # Build digital subcarriers groups + digital_sub_carriers_groups = [] + + for group_dsc in pluggable_config.dsc_groups: + group_dsc_data = { + "digital_sub_carriers_group_id": group_dsc.id.group_index, + "digital_sub_carrier_id": [] + } + + for subcarrier in group_dsc.subcarriers: + # Only subcarrier_index and active status are needed for Jinja2 template + subcarrier_data = { + "sub_carrier_id": subcarrier.id.subcarrier_index, + "active": "true" if subcarrier.active else "false" + } + group_dsc_data["digital_sub_carrier_id"].append(subcarrier_data) + + digital_sub_carriers_groups.append(group_dsc_data) + + # Build the final configuration dictionary + config = { + "name": channel_name, + "frequency": center_frequency_mhz, + "operational_mode": operational_mode, + "target_output_power": target_output_power, + "digital_sub_carriers_group": digital_sub_carriers_groups + } + + LOGGER.info(f"Translated pluggable config to NETCONF format: component={channel_name}, " + f"frequency={center_frequency_mhz} MHz, groups={len(digital_sub_carriers_groups)}") + + return config diff --git a/src/pluggables/tests/CommonObjects.py b/src/pluggables/tests/CommonObjects.py new file mode 100644 index 0000000000000000000000000000000000000000..4ddb5710409e175aba2b92aad0a6616df2d0e443 --- /dev/null +++ b/src/pluggables/tests/CommonObjects.py @@ -0,0 +1,176 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import copy, logging +from typing import Dict, Any, Optional +from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME +from common.tools.object_factory.Context import json_context, json_context_id +from common.tools.object_factory.Topology import json_topology, json_topology_id +from common.proto.context_pb2 import Device +from common.tools.object_factory.Device import ( + json_device_connect_rules, json_device_id, json_device_packetrouter_disabled +) + +LOGGER = logging.getLogger(__name__) + + +# ----- Context -------------------------------------------------------------------------------------------------------- +CONTEXT_ID = json_context_id(DEFAULT_CONTEXT_NAME) +CONTEXT = json_context(DEFAULT_CONTEXT_NAME) + + +# ----- Topology ------------------------------------------------------------------------------------------------------- +TOPOLOGY_ID = json_topology_id(DEFAULT_TOPOLOGY_NAME, context_id=CONTEXT_ID) +TOPOLOGY = json_topology(DEFAULT_TOPOLOGY_NAME, context_id=CONTEXT_ID) + + +# ----- Hub Device Configuration --------------------------------------------- + +DEVICE_HUB_UUID = 'hub-device-uuid-001' +DEVICE_HUB_ADDRESS = '10.30.7.7' +DEVICE_HUB_PORT = 2023 +DEVICE_HUB_USERNAME = 'admin' +DEVICE_HUB_PASSWORD = 'admin' +DEVICE_HUB_TIMEOUT = 15 + +DEVICE_HUB_ID = json_device_id(DEVICE_HUB_UUID) +DEVICE_HUB = json_device_packetrouter_disabled(DEVICE_HUB_UUID, name='Hub-Router') + +DEVICE_HUB_CONNECT_RULES = json_device_connect_rules(DEVICE_HUB_ADDRESS, DEVICE_HUB_PORT, { + 'username': DEVICE_HUB_USERNAME, + 'password': DEVICE_HUB_PASSWORD, + 'force_running': False, + 'hostkey_verify': False, + 'look_for_keys': False, + 'allow_agent': False, + 'commit_per_rule': False, + 'device_params': {'name': 'default'}, + 'manager_params': {'timeout': DEVICE_HUB_TIMEOUT}, +}) + +# ----- Leaf Device Configuration -------------------------------------------- + +DEVICE_LEAF_UUID = 'leaf-device-uuid-001' +DEVICE_LEAF_ADDRESS = '10.30.7.8' +DEVICE_LEAF_PORT = 2023 +DEVICE_LEAF_USERNAME = 'admin' +DEVICE_LEAF_PASSWORD = 'admin' +DEVICE_LEAF_TIMEOUT = 15 + +DEVICE_LEAF_ID = json_device_id(DEVICE_LEAF_UUID) +DEVICE_LEAF = json_device_packetrouter_disabled(DEVICE_LEAF_UUID, name='Leaf-Router') + +DEVICE_LEAF_CONNECT_RULES = json_device_connect_rules(DEVICE_LEAF_ADDRESS, DEVICE_LEAF_PORT, { + 'username': DEVICE_LEAF_USERNAME, + 'password': DEVICE_LEAF_PASSWORD, + 'force_running': False, + 'hostkey_verify': False, + 'look_for_keys': False, + 'allow_agent': False, + 'commit_per_rule': False, + 'device_params': {'name': 'default'}, + 'manager_params': {'timeout': DEVICE_LEAF_TIMEOUT}, +}) + +# ----- Complete Device Objects with Connect Rules -------------------------- + +def get_device_hub_with_connect_rules() -> Device: + """ + Create a complete Hub device with connection rules. + + Returns: + Device protobuf object ready to be added to Context + """ + device_dict = copy.deepcopy(DEVICE_HUB) + device_dict['device_config']['config_rules'].extend(DEVICE_HUB_CONNECT_RULES) + return Device(**device_dict) + + +def get_device_leaf_with_connect_rules() -> Device: + """ + Create a complete Leaf device with connection rules. + + Returns: + Device protobuf object ready to be added to Context + """ + device_dict = copy.deepcopy(DEVICE_LEAF) + device_dict['device_config']['config_rules'].extend(DEVICE_LEAF_CONNECT_RULES) + return Device(**device_dict) + +# ----- Device Connection Mapping -------------------------------------------- + +DEVICES_CONNECTION_INFO = { + 'hub': { + 'uuid': DEVICE_HUB_UUID, + 'address': DEVICE_HUB_ADDRESS, + 'port': DEVICE_HUB_PORT, + 'settings': {}, + 'username': DEVICE_HUB_USERNAME, + 'password': DEVICE_HUB_PASSWORD + }, + 'leaf': { + 'uuid': DEVICE_LEAF_UUID, + 'address': DEVICE_LEAF_ADDRESS, + 'port': DEVICE_LEAF_PORT, + 'settings': {}, + 'username': DEVICE_LEAF_USERNAME, + 'password': DEVICE_LEAF_PASSWORD + }, +} + + +def get_device_connection_info(device_uuid: str) -> Optional[Dict[str, Any]]: + """ + Get device connection information for NETCONF driver. + + Args: + device_uuid: UUID of the device + + Returns: + Dictionary with connection info or None if not found + """ + # Map device UUIDs to device types + device_mapping = { + DEVICE_HUB_UUID: 'hub', + DEVICE_LEAF_UUID: 'leaf', + } + + device_type = device_mapping.get(device_uuid) + + if device_type and device_type in DEVICES_CONNECTION_INFO: + return DEVICES_CONNECTION_INFO[device_type] + + return None + + +def determine_node_identifier(device_uuid: str, pluggable_index: int) -> str: + """ + Determine the node identifier (e.g., 'T2.1', 'T1.1', etc.) for the device. + + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + + Returns: + Node identifier string + """ + conn_info = get_device_connection_info(device_uuid) + + if conn_info and conn_info['address'] == DEVICE_HUB_ADDRESS: + return 'T2.1' # Hub node + elif conn_info and conn_info['address'] == DEVICE_LEAF_ADDRESS: + # For multiple leaf nodes, use pluggable_index to differentiate + return f'T1.{pluggable_index + 1}' + else: + return 'T1.1' # Default diff --git a/src/pluggables/tests/PreparePluggablesTestScenario.py b/src/pluggables/tests/PreparePluggablesTestScenario.py new file mode 100644 index 0000000000000000000000000000000000000000..e70b2975afc401c0770115f7df73def00811c0d7 --- /dev/null +++ b/src/pluggables/tests/PreparePluggablesTestScenario.py @@ -0,0 +1,169 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging, os, pytest +from typing import Union +from common.Constants import ServiceNameEnum +from common.Settings import ( + ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, + get_env_var_name, get_service_port_grpc +) +from common.proto.context_pb2 import DeviceId, Topology, Context +from common.tools.service.GenericGrpcService import GenericGrpcService +from common.tests.MockServicerImpl_Context import MockServicerImpl_Context +from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from device.service.DeviceService import DeviceService +from device.service.driver_api.DriverFactory import DriverFactory +from device.service.driver_api.DriverInstanceCache import DriverInstanceCache +from device.service.drivers import DRIVERS +from pluggables.client.PluggablesClient import PluggablesClient +from pluggables.service.PluggablesService import PluggablesService +from pluggables.tests.CommonObjects import ( + DEVICE_HUB, DEVICE_HUB_ID, DEVICE_HUB_UUID, DEVICE_HUB_CONNECT_RULES, + DEVICE_LEAF, DEVICE_LEAF_ID, DEVICE_LEAF_UUID, DEVICE_LEAF_CONNECT_RULES, + CONTEXT_ID, CONTEXT, TOPOLOGY_ID, TOPOLOGY, + get_device_hub_with_connect_rules, get_device_leaf_with_connect_rules +) + + +LOGGER = logging.getLogger(__name__) + +LOCAL_HOST = '127.0.0.1' +MOCKSERVICE_PORT = 10000 + +# Configure service endpoints +CONTEXT_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.CONTEXT) +DEVICE_SERVICE_PORT = MOCKSERVICE_PORT + get_service_port_grpc(ServiceNameEnum.DEVICE) +PLUGGABLE_SERVICE_PORT = get_service_port_grpc(ServiceNameEnum.PLUGGABLES) + +os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST)] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(CONTEXT_SERVICE_PORT) +os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_HOST)] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(DEVICE_SERVICE_PORT) +os.environ[get_env_var_name(ServiceNameEnum.PLUGGABLES, ENVVAR_SUFIX_SERVICE_HOST)] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.PLUGGABLES, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(PLUGGABLE_SERVICE_PORT) + + +class MockContextService(GenericGrpcService): + """Mock Context Service for testing""" + + def __init__(self, bind_port: Union[str, int]) -> None: + super().__init__(bind_port, LOCAL_HOST, enable_health_servicer=False, cls_name='MockContextService') + + def install_servicers(self): + self.context_servicer = MockServicerImpl_Context() + add_ContextServiceServicer_to_server(self.context_servicer, self.server) + +@pytest.fixture(scope='session') +def mock_context_service(): + """Start mock Context service for the test session""" + LOGGER.info('Initializing MockContextService...') + _service = MockContextService(CONTEXT_SERVICE_PORT) + _service.start() + yield _service + LOGGER.info('Terminating MockContextService...') + _service.stop() + + +@pytest.fixture(scope='session') +def context_client(mock_context_service): # pylint: disable=redefined-outer-name + """Create Context client for the test session""" + LOGGER.info('Creating ContextClient...') + _client = ContextClient() + yield _client + LOGGER.info('Closing ContextClient...') + _client.close() + +@pytest.fixture(scope='session') +def device_service(context_client : ContextClient): # pylint: disable=redefined-outer-name + """Start Device service for the test session""" + LOGGER.info('Initializing DeviceService...') + _driver_factory = DriverFactory(DRIVERS) + _driver_instance_cache = DriverInstanceCache(_driver_factory) + _service = DeviceService(_driver_instance_cache) + _service.start() + yield _service + LOGGER.info('Terminating DeviceService...') + _service.stop() + +@pytest.fixture(scope='session') +def device_client(device_service: DeviceService): # pylint: disable=redefined-outer-name + """Create Device client for the test session""" + LOGGER.info('Creating DeviceClient...') + _client = DeviceClient() + yield _client + LOGGER.info('Closing DeviceClient...') + _client.close() + + +@pytest.fixture(scope='session') +def pluggables_service(context_client: ContextClient): + """Start Pluggables service for the test session""" + LOGGER.info('Initializing PluggablesService...') + _service = PluggablesService() + _service.start() + yield _service + LOGGER.info('Terminating PluggablesService...') + _service.stop() + + +@pytest.fixture(scope='session') +def pluggables_client(pluggables_service: PluggablesService, + context_client: ContextClient, + device_client: DeviceClient + ): + """Create Pluggables client for the test session""" + LOGGER.info('Creating PluggablesClient...') + _client = PluggablesClient() + yield _client + LOGGER.info('Closing PluggablesClient...') + _client.close() + + +def test_prepare_environment( + context_client: ContextClient, # pylint: disable=redefined-outer-name + device_client: DeviceClient, # pylint: disable=redefined-outer-name + pluggables_client: PluggablesClient, + device_service: DeviceService ): # pylint: disable=redefined-outer-name + """Prepare test environment by adding devices to Context""" + + LOGGER.info('Preparing test environment...') + + + context_client.SetContext(Context(**CONTEXT)) + context_client.SetTopology(Topology(**TOPOLOGY)) + LOGGER.info('Created admin Context and Topology') + + # Add Hub device with connect rules + hub_device = get_device_hub_with_connect_rules() + context_client.SetDevice(hub_device) + LOGGER.info(f'Added Hub device: {DEVICE_HUB_UUID}') + + # Add Leaf device with connect rules + leaf_device = get_device_leaf_with_connect_rules() + context_client.SetDevice(leaf_device) + LOGGER.info(f'Added Leaf device: {DEVICE_LEAF_UUID}') + + # Verify devices were added + hub_device_retrieved = context_client.GetDevice(DeviceId(**DEVICE_HUB_ID)) + assert hub_device_retrieved is not None + assert hub_device_retrieved.device_id.device_uuid.uuid == DEVICE_HUB_UUID + LOGGER.info(f'Verified Hub device: {hub_device_retrieved.name}') + + leaf_device_retrieved = context_client.GetDevice(DeviceId(**DEVICE_LEAF_ID)) + assert leaf_device_retrieved is not None + assert leaf_device_retrieved.device_id.device_uuid.uuid == DEVICE_LEAF_UUID + LOGGER.info(f'Verified Leaf device: {leaf_device_retrieved.name}') diff --git a/src/pluggables/tests/__init__.py b/src/pluggables/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460 --- /dev/null +++ b/src/pluggables/tests/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/src/pluggables/tests/test_pluggables.py b/src/pluggables/tests/test_pluggables.py new file mode 100644 index 0000000000000000000000000000000000000000..9bce8c92c53c3e4140272b16c091d02fa6614791 --- /dev/null +++ b/src/pluggables/tests/test_pluggables.py @@ -0,0 +1,237 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import grpc +import os, pytest +import logging +from typing import Union + +from common.proto.context_pb2 import Empty +from common.Constants import ServiceNameEnum +from common.Settings import ( + ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, + get_env_var_name, get_service_port_grpc) +from common.tests.MockServicerImpl_Context import MockServicerImpl_Context +from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server +from common.proto.pluggables_pb2 import ( + PluggableId, Pluggable, ListPluggablesResponse, View +) +from common.tools.service.GenericGrpcService import GenericGrpcService +from pluggables.client.PluggablesClient import PluggablesClient +from pluggables.service.PluggablesService import PluggablesService +from pluggables.tests.testmessages import ( + create_pluggable_request, create_list_pluggables_request, + create_get_pluggable_request, create_delete_pluggable_request, + create_configure_pluggable_request, +) + + +########################### +# Tests Setup +########################### + +LOCAL_HOST = '127.0.0.1' + +DSCMPLUGGABLE_SERVICE_PORT = get_service_port_grpc(ServiceNameEnum.PLUGGABLES) # type: ignore +os.environ[get_env_var_name(ServiceNameEnum.PLUGGABLES, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.PLUGGABLES, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(DSCMPLUGGABLE_SERVICE_PORT) + +LOGGER = logging.getLogger(__name__) + +class MockContextService(GenericGrpcService): + # Mock Service implementing Context to simplify unitary tests of DSCM pluggables + + def __init__(self, bind_port: Union[str, int]) -> None: + super().__init__(bind_port, LOCAL_HOST, enable_health_servicer=False, cls_name='MockService') + + # pylint: disable=attribute-defined-outside-init + def install_servicers(self): + self.context_servicer = MockServicerImpl_Context() + add_ContextServiceServicer_to_server(self.context_servicer, self.server) + +# This fixture will be requested by test cases and last during testing session +@pytest.fixture(scope='session') +def pluggables_service(): + LOGGER.info('Initializing PluggableService...') + _service = PluggablesService() + _service.start() + + # yield the server, when test finishes, execution will resume to stop it + LOGGER.info('Yielding PluggableService...') + yield _service + + LOGGER.info('Terminating PluggableService...') + _service.stop() + + LOGGER.info('Terminated PluggableService...') + +@pytest.fixture(scope='function') +def pluggable_client(pluggables_service : PluggablesService): + LOGGER.info('Creating PluggablesClient...') + _client = PluggablesClient() + + LOGGER.info('Yielding PluggablesClient...') + yield _client + + LOGGER.info('Closing PluggablesClient...') + _client.close() + + LOGGER.info('Closed PluggablesClient...') + +@pytest.fixture(autouse=True) +def log_all_methods(request): + ''' + This fixture logs messages before and after each test function runs, indicating the start and end of the test. + The autouse=True parameter ensures that this logging happens automatically for all tests in the module. + ''' + LOGGER.info(f" >>>>> Starting test: {request.node.name} ") + yield + LOGGER.info(f" <<<<< Finished test: {request.node.name} ") + +########################### +# Test Cases +########################### + +# CreatePluggable Test without configuration +def test_CreatePluggable(pluggable_client : PluggablesClient): + LOGGER.info('Creating Pluggable for test...') + _pluggable_request = create_pluggable_request(preferred_pluggable_index=-1) + _pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable for test: %s', _pluggable) + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.pluggable_index == _pluggable_request.preferred_pluggable_index + assert _pluggable.id.device.device_uuid.uuid == _pluggable_request.device.device_uuid.uuid + + +# CreatePluggable Test with configuration +def test_CreatePluggable_with_config(pluggable_client : PluggablesClient): + LOGGER.info('Creating Pluggable with initial configuration for test...') + _pluggable_request = create_pluggable_request( + device_uuid = "9bbf1937-db9e-45bc-b2c6-3214a9d42157", + preferred_pluggable_index = -1, + with_initial_config = True) + _pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable with initial configuration for test: %s', _pluggable) + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.pluggable_index == _pluggable_request.preferred_pluggable_index + assert _pluggable.id.device.device_uuid.uuid == _pluggable_request.device.device_uuid.uuid + assert _pluggable.config is not None + assert len(_pluggable.config.dsc_groups) == 1 + dsc_group = _pluggable.config.dsc_groups[0] + assert dsc_group.group_size == 4 + assert len(dsc_group.subcarriers) == 2 + +# create pluggable request with pluggable key already exists error +def test_CreatePluggable_already_exists(pluggable_client : PluggablesClient): + LOGGER.info('Creating Pluggable for test...') + _pluggable_request = create_pluggable_request(preferred_pluggable_index=5) + _pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable for test: %s', _pluggable) + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.pluggable_index == _pluggable_request.preferred_pluggable_index + assert _pluggable.id.device.device_uuid.uuid == _pluggable_request.device.device_uuid.uuid + # Try to create the same pluggable again, should raise ALREADY_EXISTS + with pytest.raises(grpc.RpcError) as e: + pluggable_client.CreatePluggable(_pluggable_request) + assert e.value.code() == grpc.StatusCode.ALREADY_EXISTS + +# ListPluggables Test +def test_ListPluggables(pluggable_client : PluggablesClient): + LOGGER.info('Listing Pluggables for test...') + _list_request = create_list_pluggables_request( + view_level = View.VIEW_CONFIG # View.VIEW_STATE + ) + _pluggables = pluggable_client.ListPluggables(_list_request) + LOGGER.info('Listed Pluggables for test: %s', _pluggables) + assert isinstance(_pluggables, ListPluggablesResponse) + if len(_pluggables.pluggables) != 0: + assert len(_pluggables.pluggables) >= 1 + for p in _pluggables.pluggables: + assert isinstance(p, Pluggable) + assert isinstance(p.id, PluggableId) + else: + assert len(_pluggables.pluggables) == 0 + +# GetPluggable Test +def test_GetPluggable(pluggable_client : PluggablesClient): + LOGGER.info('Starting GetPluggable test...') + LOGGER.info('Getting Pluggable for test...') + # First create a pluggable to get it later + _pluggable_request = create_pluggable_request(preferred_pluggable_index=1) + _created_pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable for GetPluggable test: %s', _created_pluggable) + + _get_request = create_get_pluggable_request( + device_uuid = _created_pluggable.id.device.device_uuid.uuid, + pluggable_index = _created_pluggable.id.pluggable_index, + view_level = View.VIEW_FULL + ) + _pluggable = pluggable_client.GetPluggable(_get_request) + LOGGER.info('Got Pluggable for test: %s', _pluggable) + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.pluggable_index == _created_pluggable.id.pluggable_index + assert _pluggable.id.device.device_uuid.uuid == _created_pluggable.id.device.device_uuid.uuid + + +# DeletePluggable Test +def test_DeletePluggable(pluggable_client : PluggablesClient): + LOGGER.info('Starting DeletePluggable test...') + LOGGER.info('Creating Pluggable to delete for test...') + + # First create a pluggable to delete it later + _pluggable_request = create_pluggable_request(preferred_pluggable_index=2) + _created_pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable to delete for test: %s', _created_pluggable) + + _delete_request = create_delete_pluggable_request( + device_uuid = _created_pluggable.id.device.device_uuid.uuid, + pluggable_index = _created_pluggable.id.pluggable_index + ) + _response = pluggable_client.DeletePluggable(_delete_request) + LOGGER.info('Deleted Pluggable for test, response: %s', _response) + assert isinstance(_response, Empty) + + # Try to get the deleted pluggable, should raise NOT_FOUND + with pytest.raises(grpc.RpcError) as e: + pluggable_client.GetPluggable( + create_get_pluggable_request( + device_uuid = _created_pluggable.id.device.device_uuid.uuid, + pluggable_index = _created_pluggable.id.pluggable_index + ) + ) + assert e.value.code() == grpc.StatusCode.NOT_FOUND + +# ConfigurePluggable Test +def test_ConfigurePluggable(pluggable_client : PluggablesClient): + LOGGER.info('Starting ConfigurePluggable test...') + LOGGER.info('Creating Pluggable to configure for test...') + + # First create a pluggable to configure it later + _pluggable_request = create_pluggable_request(preferred_pluggable_index=3) + _created_pluggable = pluggable_client.CreatePluggable(_pluggable_request) + LOGGER.info('Created Pluggable to configure for test: %s', _created_pluggable) + + _configure_request = create_configure_pluggable_request( + device_uuid = _created_pluggable.id.device.device_uuid.uuid, + pluggable_index = _created_pluggable.id.pluggable_index, + ) + _pluggable = pluggable_client.ConfigurePluggable(_configure_request) + LOGGER.info('Configured Pluggable for test: %s', _pluggable) + assert isinstance(_pluggable, Pluggable) + assert _pluggable.config is not None + assert len(_pluggable.config.dsc_groups) == 1 + dsc_group = _pluggable.config.dsc_groups[0] + assert dsc_group.group_size == 2 + assert len(dsc_group.subcarriers) == 2 diff --git a/src/pluggables/tests/test_pluggables_with_SBI.py b/src/pluggables/tests/test_pluggables_with_SBI.py new file mode 100644 index 0000000000000000000000000000000000000000..d9314294234fc715e51f27916e674a6b8a452c30 --- /dev/null +++ b/src/pluggables/tests/test_pluggables_with_SBI.py @@ -0,0 +1,295 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import grpc, logging, pytest +from common.proto.context_pb2 import Empty +from common.proto.pluggables_pb2 import Pluggable, View +from context.client.ContextClient import ContextClient +from pluggables.client.PluggablesClient import PluggablesClient +from pluggables.tests.testmessages import ( + create_pluggable_request, create_list_pluggables_request, + create_get_pluggable_request, create_delete_pluggable_request, + create_configure_pluggable_request +) +from pluggables.tests.CommonObjects import ( + DEVICE_HUB_UUID, DEVICE_LEAF_UUID +) +from pluggables.tests.PreparePluggablesTestScenario import ( # pylint: disable=unused-import + # be careful, order of symbols is important here! + mock_context_service, context_client, device_service, device_client, + pluggables_service, pluggables_client, test_prepare_environment +) + +logging.basicConfig(level=logging.DEBUG) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +@pytest.fixture(autouse=True) +def log_all_methods(request): + ''' + This fixture logs messages before and after each test function runs, indicating the start and end of the test. + The autouse=True parameter ensures that this logging happens automatically for all tests in the module. + ''' + LOGGER.info(f" >>>>> Starting test: {request.node.name} ") + yield + LOGGER.info(f" <<<<< Finished test: {request.node.name} ") + +# ----- Pluggable Tests with NETCONF ----------------------------------------- + +# Number 1. +def test_create_pluggable_hub_without_config(pluggables_client: PluggablesClient): + """Test creating a pluggable on Hub device without initial configuration""" + LOGGER.info('Creating Pluggable on Hub device without config...') + + _request = create_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + preferred_pluggable_index=1, # set 1 for HUB and leaf-1, 2 for leaf-2 and 3 for leaf-3 + with_initial_config=False + ) + + _pluggable = pluggables_client.CreatePluggable(_request) + + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.device.device_uuid.uuid == DEVICE_HUB_UUID + assert _pluggable.id.pluggable_index == 1 + LOGGER.info(f'Created Pluggable on Hub: {_pluggable.id}') + +# Number 2. +@pytest.mark.integration +def test_create_pluggable_hub_with_config(pluggables_client: PluggablesClient): + """Test creating a pluggable on Hub device with initial configuration + + Requires: Real NETCONF device at 10.30.7.7:2023 + """ + LOGGER.info('Creating Pluggable on Hub device with config...') + + _request = create_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + preferred_pluggable_index=2, # Use index 2 to avoid conflict with test #1 + with_initial_config=True + ) + + _pluggable = pluggables_client.CreatePluggable(_request) + + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.device.device_uuid.uuid == DEVICE_HUB_UUID + assert _pluggable.id.pluggable_index == 2 + assert len(_pluggable.config.dsc_groups) == 1 # Should be 1, not 2 (check testmessages.py) + + # Verify DSC group configuration + dsc_group = _pluggable.config.dsc_groups[0] + assert dsc_group.group_size == 4 # From testmessages.py + assert len(dsc_group.subcarriers) == 2 + + LOGGER.info(f'Created Pluggable on Hub with {len(dsc_group.subcarriers)} subcarriers') + +# Number 3. +@pytest.mark.integration +def test_create_pluggable_leaf_with_config(pluggables_client: PluggablesClient): + """Test creating a pluggable on Leaf device with initial configuration + + Requires: Real NETCONF device at 10.30.7.8:2023 + """ + LOGGER.info('Creating Pluggable on Leaf device with config...') + + _request = create_pluggable_request( + device_uuid=DEVICE_LEAF_UUID, + preferred_pluggable_index=1, + with_initial_config=True + ) + + _pluggable = pluggables_client.CreatePluggable(_request) + + assert isinstance(_pluggable, Pluggable) + assert _pluggable.id.device.device_uuid.uuid == DEVICE_LEAF_UUID + assert _pluggable.id.pluggable_index == 1 # Should be 1, not 0 + assert len(_pluggable.config.dsc_groups) == 1 + + LOGGER.info(f'Created Pluggable on Leaf: {_pluggable.id}') + +# Number 4. +@pytest.mark.integration +def test_configure_pluggable_hub(pluggables_client: PluggablesClient): + """Test configuring an existing pluggable on Hub device""" + LOGGER.info('Configuring existing Pluggable on Hub device...') + + # First, create a pluggable without config + _create_request = create_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + preferred_pluggable_index=3, # Use index 3 to avoid conflicts + with_initial_config=False + ) + _created = pluggables_client.CreatePluggable(_create_request) + assert _created.id.pluggable_index == 3 + + # Now configure it + _config_request = create_configure_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + pluggable_index=3, # Match the created index + view_level=View.VIEW_FULL + ) + + _configured = pluggables_client.ConfigurePluggable(_config_request) + + assert isinstance(_configured, Pluggable) + assert _configured.id.device.device_uuid.uuid == DEVICE_HUB_UUID + assert _configured.id.pluggable_index == 3 + assert len(_configured.config.dsc_groups) == 1 + + # Verify configuration was applied + dsc_group = _configured.config.dsc_groups[0] + assert dsc_group.group_size == 2 + assert len(dsc_group.subcarriers) == 2 + + LOGGER.info(f'Configured Pluggable on Hub with {len(dsc_group.subcarriers)} subcarriers') + +# Number 5. +@pytest.mark.integration +def test_get_pluggable(pluggables_client: PluggablesClient): + """Test retrieving an existing pluggable + + Requires: Real NETCONF device at 10.30.7.7:2023 + """ + LOGGER.info('Getting existing Pluggable...') + + # Create a pluggable first + _create_request = create_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + preferred_pluggable_index=4, # Use index 4 to avoid conflicts + with_initial_config=True + ) + _created = pluggables_client.CreatePluggable(_create_request) + + # Now get it + _get_request = create_get_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + pluggable_index=4, # Match the created index + view_level=View.VIEW_FULL + ) + + _retrieved = pluggables_client.GetPluggable(_get_request) + + assert isinstance(_retrieved, Pluggable) + assert _retrieved.id.device.device_uuid.uuid == DEVICE_HUB_UUID + assert _retrieved.id.pluggable_index == 4 + assert len(_retrieved.config.dsc_groups) == len(_created.config.dsc_groups) + + LOGGER.info(f'Retrieved Pluggable: {_retrieved.id}') + +# Number 6. +def test_list_pluggables(pluggables_client: PluggablesClient): + """Test listing all pluggables for a device""" + LOGGER.info('Listing Pluggables for Hub device...') + + _list_request = create_list_pluggables_request( + device_uuid=DEVICE_HUB_UUID, + view_level=View.VIEW_CONFIG + ) + + _response = pluggables_client.ListPluggables(_list_request) + + assert _response is not None + assert len(_response.pluggables) >= 1 # At least one from previous tests + + for pluggable in _response.pluggables: + assert pluggable.id.device.device_uuid.uuid == DEVICE_HUB_UUID + LOGGER.info(f'Found Pluggable: index={pluggable.id.pluggable_index}') + +# Number 7. +@pytest.mark.integration +def test_delete_pluggable(pluggables_client: PluggablesClient): + """Test deleting a pluggable + + Requires: Real NETCONF device at 10.30.7.8:2023 + """ + LOGGER.info('Deleting Pluggable...') + + # Create a pluggable to delete + _create_request = create_pluggable_request( + device_uuid=DEVICE_LEAF_UUID, + preferred_pluggable_index=2, # Use index 2 to avoid conflict with test #3 + with_initial_config=True + ) + _created = pluggables_client.CreatePluggable(_create_request) + assert _created.id.pluggable_index == 2 + + # Delete it + _delete_request = create_delete_pluggable_request( + device_uuid=DEVICE_LEAF_UUID, + pluggable_index=2 + ) + + _response = pluggables_client.DeletePluggable(_delete_request) + assert isinstance(_response, Empty) + + # Verify it's deleted + with pytest.raises(grpc.RpcError) as e: + _get_request = create_get_pluggable_request( + device_uuid=DEVICE_LEAF_UUID, + pluggable_index=2 + ) + pluggables_client.GetPluggable(_get_request) + + assert e.value.code() == grpc.StatusCode.NOT_FOUND + LOGGER.info('Successfully deleted Pluggable and verified removal') + +# Number 8. +def test_pluggable_already_exists_error(pluggables_client: PluggablesClient): + """Test that creating a pluggable with same key raises ALREADY_EXISTS""" + LOGGER.info('Testing ALREADY_EXISTS error...') + + _request = create_pluggable_request( + device_uuid=DEVICE_LEAF_UUID, + preferred_pluggable_index=3, # Use index 3 + with_initial_config=False + ) + + # Create first time - should succeed + _pluggable = pluggables_client.CreatePluggable(_request) + assert _pluggable.id.pluggable_index == 3 # Should be 3, not 5 + + # Try to create again - should fail + with pytest.raises(grpc.RpcError) as e: + pluggables_client.CreatePluggable(_request) + + assert e.value.code() == grpc.StatusCode.ALREADY_EXISTS + LOGGER.info('Successfully caught ALREADY_EXISTS error') + +# Number 9. +def test_pluggable_not_found_error(pluggables_client: PluggablesClient): + """Test that getting non-existent pluggable raises NOT_FOUND""" + LOGGER.info('Testing NOT_FOUND error...') + + _request = create_get_pluggable_request( + device_uuid=DEVICE_HUB_UUID, + pluggable_index=999, # Non-existent index + view_level=View.VIEW_FULL + ) + + with pytest.raises(grpc.RpcError) as e: + pluggables_client.GetPluggable(_request) + + assert e.value.code() == grpc.StatusCode.NOT_FOUND + LOGGER.info('Successfully caught NOT_FOUND error') + + +# ----- Cleanup Tests -------------------------------------------------------- + +def test_cleanup_environment( + context_client: ContextClient, # pylint: disable=redefined-outer-name + pluggables_client: PluggablesClient): # pylint: disable=redefined-outer-name + """Cleanup test environment by removing test devices""" + + + LOGGER.info('Test environment cleanup completed') diff --git a/src/pluggables/tests/testmessages.py b/src/pluggables/tests/testmessages.py new file mode 100644 index 0000000000000000000000000000000000000000..c18924babb9e30dbcf393420d3373da13f641e74 --- /dev/null +++ b/src/pluggables/tests/testmessages.py @@ -0,0 +1,246 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import uuid +from typing import Optional, List, Dict, Any +from common.proto import pluggables_pb2 + +########################### +# CreatePluggableRequest +########################### + +def create_pluggable_request( + device_uuid: Optional[str] = None, + preferred_pluggable_index: Optional[int] = None, + with_initial_config: bool = False +) -> pluggables_pb2.CreatePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a CreatePluggableRequest message. + + Args: + device_uuid: UUID of the device. If None, generates a random UUID. + preferred_pluggable_index: Preferred index for the pluggable. If None, not set. + with_initial_config: If True, includes initial configuration. + + Returns: + CreatePluggableRequest message + """ + _request = pluggables_pb2.CreatePluggableRequest() + + # Set device ID + if device_uuid is None: + device_uuid = str(uuid.uuid4()) + _request.device.device_uuid.uuid = device_uuid + + # Set preferred pluggable index if provided + if preferred_pluggable_index is not None: + _request.preferred_pluggable_index = preferred_pluggable_index + + # Add initial configuration if requested + if with_initial_config: + _request.initial_config.id.device.device_uuid.uuid = device_uuid + _request.initial_config.id.pluggable_index = preferred_pluggable_index or 0 + + # Set top-level PluggableConfig fields + _request.initial_config.center_frequency_mhz = 193100000 # 193.1 THz in MHz + _request.initial_config.operational_mode = 1 # Operational mode + _request.initial_config.target_output_power_dbm = -10.0 # Target output power + _request.initial_config.line_port = 1 # Line port number + _request.initial_config.channel_name = "channel-1" # Channel name for component + + # Add sample DSC group configuration + dsc_group = _request.initial_config.dsc_groups.add() + dsc_group.id.pluggable.device.device_uuid.uuid = device_uuid + dsc_group.id.pluggable.pluggable_index = preferred_pluggable_index or 0 + dsc_group.id.group_index = 0 + dsc_group.group_size = 4 + dsc_group.group_capacity_gbps = 400.0 + dsc_group.subcarrier_spacing_mhz = 75.0 + + # Add sample subcarrier configurations + for i in range(2): + subcarrier = dsc_group.subcarriers.add() + subcarrier.id.group.pluggable.device.device_uuid.uuid = device_uuid + subcarrier.id.group.pluggable.pluggable_index = preferred_pluggable_index or 0 + subcarrier.id.group.group_index = 0 + subcarrier.id.subcarrier_index = i + subcarrier.active = True + subcarrier.target_output_power_dbm = -10.0 + subcarrier.center_frequency_hz = 193100000000000 + (i * 75000000) # 193.1 THz + spacing + subcarrier.symbol_rate_baud = 64000000000 # 64 GBaud + + return _request + + +########################### +# ListPluggablesRequest +########################### + +def create_list_pluggables_request( + device_uuid: Optional[str] = None, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL # pyright: ignore[reportInvalidTypeForm] +) -> pluggables_pb2.ListPluggablesRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a ListPluggablesRequest message. + + Args: + device_uuid: UUID of the device to filter by. If None, generates a random UUID. + view_level: View level (VIEW_CONFIG, VIEW_STATE, VIEW_FULL, VIEW_UNSPECIFIED) + + Returns: + ListPluggablesRequest message + """ + _request = pluggables_pb2.ListPluggablesRequest() + + if device_uuid is None: + device_uuid = "9bbf1937-db9e-45bc-b2c6-3214a9d42157" + # device_uuid = str(uuid.uuid4()) + _request.device.device_uuid.uuid = device_uuid + _request.view_level = view_level + + return _request + + +########################### +# GetPluggableRequest +########################### + +def create_get_pluggable_request( + device_uuid: str, + pluggable_index: int, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL # pyright: ignore[reportInvalidTypeForm] +) -> pluggables_pb2.GetPluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a GetPluggableRequest message. + + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + view_level: View level (VIEW_CONFIG, VIEW_STATE, VIEW_FULL, VIEW_UNSPECIFIED) + + Returns: + GetPluggableRequest message + """ + _request = pluggables_pb2.GetPluggableRequest() + _request.id.device.device_uuid.uuid = device_uuid + _request.id.pluggable_index = pluggable_index + _request.view_level = view_level + return _request + + +########################### +# DeletePluggableRequest +########################### + +# TODO: Both leaf and hub have a same jinja template for deleting pluggable config. +# The difference lies in the component name (channel-1 for hub, channel-1/3/5 for leaf). + +def create_delete_pluggable_request( + device_uuid: str, + pluggable_index: int +) -> pluggables_pb2.DeletePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a DeletePluggableRequest message. + + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + + Returns: + DeletePluggableRequest message + """ + _request = pluggables_pb2.DeletePluggableRequest() + _request.id.device.device_uuid.uuid = device_uuid + _request.id.pluggable_index = pluggable_index + + return _request + + +########################### +# ConfigurePluggableRequest +########################### + +def create_configure_pluggable_request( + device_uuid: str, + pluggable_index: int, + update_mask_paths: Optional[list] = None, + view_level: pluggables_pb2.View = pluggables_pb2.VIEW_FULL, # pyright: ignore[reportInvalidTypeForm] + apply_timeout_seconds: int = 30, + parameters: Optional[List[Dict[str, Any]]] = [], +) -> pluggables_pb2.ConfigurePluggableRequest: # pyright: ignore[reportInvalidTypeForm] + """ + Create a ConfigurePluggableRequest message. + + Args: + device_uuid: UUID of the device + pluggable_index: Index of the pluggable + update_mask_paths: List of field paths to update. If None, updates all fields. + view_level: View level for response + apply_timeout_seconds: Timeout in seconds for applying configuration + + Returns: + ConfigurePluggableRequest message + """ + _request = pluggables_pb2.ConfigurePluggableRequest() + + # Set pluggable configuration + _request.config.id.device.device_uuid.uuid = device_uuid + _request.config.id.pluggable_index = pluggable_index + + # Set top-level PluggableConfig fields + _request.config.center_frequency_mhz = 193100000 # 193.1 THz in MHz + _request.config.operational_mode = 1 # Operational mode + _request.config.target_output_power_dbm = -10.0 # Target output power + _request.config.line_port = 1 # Line port number + _request.config.channel_name = "channel-1" # Channel name for component + + # Add DSC group configuration + group_1 = _request.config.dsc_groups.add() + group_1.id.pluggable.device.device_uuid.uuid = device_uuid + group_1.id.pluggable.pluggable_index = pluggable_index + group_1.id.group_index = 0 + group_1.group_size = 2 + group_1.group_capacity_gbps = 400.0 + group_1.subcarrier_spacing_mhz = 75.0 + + # Add digital-subcarrier configuration (to group group_1) + subcarrier_1 = group_1.subcarriers.add() + subcarrier_1.id.group.pluggable.device.device_uuid.uuid = device_uuid + subcarrier_1.id.group.pluggable.pluggable_index = pluggable_index + subcarrier_1.id.group.group_index = 0 + subcarrier_1.id.subcarrier_index = 0 + subcarrier_1.active = True + subcarrier_1.target_output_power_dbm = -10.0 + subcarrier_1.center_frequency_hz = 193100000000000 # 193.1 THz + subcarrier_1.symbol_rate_baud = 64000000000 # 64 GBaud + + # Add another digital-subcarrier configuration (to group group_1) + subcarrier_2 = group_1.subcarriers.add() + subcarrier_2.id.group.pluggable.device.device_uuid.uuid = device_uuid + subcarrier_2.id.group.pluggable.pluggable_index = pluggable_index + subcarrier_2.id.group.group_index = 0 + subcarrier_2.id.subcarrier_index = 1 + subcarrier_2.active = True + subcarrier_2.target_output_power_dbm = -10.0 + subcarrier_2.center_frequency_hz = 193100075000000 # 193.175 THz + subcarrier_2.symbol_rate_baud = 64000000000 # 64 GBaud + + # Set update mask if provided + if update_mask_paths: + _request.update_mask.paths.extend(update_mask_paths) + + _request.view_level = view_level + _request.apply_timeout_seconds = apply_timeout_seconds + + return _request diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java b/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java index 634e2014cdbad8fef3ffd6c994cf85dc84f2abe2..f4e265f47ace8bc0d4fdbd032e4d90373f061329 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/Serializer.java @@ -2315,8 +2315,28 @@ public class Serializer { return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPTICAL_TFS; case IETF_ACTN: return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_ACTN; + case OC: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OC; + case QKD: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_QKD; + case IETF_L3VPN: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L3VPN; + case IETF_SLICE: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_SLICE; + case NCE: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_NCE; case SMARTNIC: return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_SMARTNIC; + case MORPHEUS: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_MORPHEUS; + case RYU: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_RYU; + case GNMI_NOKIA_SRLINUX: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX; + case OPENROADM: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENROADM; + case RESTCONF_OPENCONFIG: + return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_RESTCONF_OPENCONFIG; case UNDEFINED: default: return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED; @@ -2346,8 +2366,28 @@ public class Serializer { return DeviceDriverEnum.OPTICAL_TFS; case DEVICEDRIVER_IETF_ACTN: return DeviceDriverEnum.IETF_ACTN; + case DEVICEDRIVER_OC: + return DeviceDriverEnum.OC; + case DEVICEDRIVER_QKD: + return DeviceDriverEnum.QKD; + case DEVICEDRIVER_IETF_L3VPN: + return DeviceDriverEnum.IETF_L3VPN; + case DEVICEDRIVER_IETF_SLICE: + return DeviceDriverEnum.IETF_SLICE; + case DEVICEDRIVER_NCE: + return DeviceDriverEnum.NCE; case DEVICEDRIVER_SMARTNIC: return DeviceDriverEnum.SMARTNIC; + case DEVICEDRIVER_MORPHEUS: + return DeviceDriverEnum.MORPHEUS; + case DEVICEDRIVER_RYU: + return DeviceDriverEnum.RYU; + case DEVICEDRIVER_GNMI_NOKIA_SRLINUX: + return DeviceDriverEnum.GNMI_NOKIA_SRLINUX; + case DEVICEDRIVER_OPENROADM: + return DeviceDriverEnum.OPENROADM; + case DEVICEDRIVER_RESTCONF_OPENCONFIG: + return DeviceDriverEnum.RESTCONF_OPENCONFIG; case DEVICEDRIVER_UNDEFINED: case UNRECOGNIZED: default: diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintExclusions.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintExclusions.java index 383e14feeb17af4186803585b5fd377a7e15be8a..efcf40777833656d70daef88e3378868211c9777 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintExclusions.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintExclusions.java @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintTypeExclusions.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintTypeExclusions.java index 4436b2b624976c4da8e41c882040bfc0522463a0..b1980c2e223f5d07cbf69ad64418aa0bb596a75d 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintTypeExclusions.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ConstraintTypeExclusions.java @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceDriverEnum.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceDriverEnum.java index 1349229e8febbc361e2938e71de22cd8acdbae27..d7db46f47dfea4bf9441ad53bc4dbdeb7e80f964 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceDriverEnum.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceDriverEnum.java @@ -28,5 +28,15 @@ public enum DeviceDriverEnum { GNMI_OPENCONFIG, OPTICAL_TFS, IETF_ACTN, - SMARTNIC + OC, + QKD, + IETF_L3VPN, + IETF_SLICE, + NCE, + SMARTNIC, + MORPHEUS, + RYU, + GNMI_NOKIA_SRLINUX, + OPENROADM, + RESTCONF_OPENCONFIG } diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceId.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceId.java index fd1352819087dcd40a308c6a87342248f0183e26..facb4c4bf15f906e5539a13fdb3355da2b6bea16 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceId.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/DeviceId.java @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/LinkId.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/LinkId.java index fe7fcff2a227edf4af54ad9e39c361b55b709fa6..c7b0c83ce2f0a623dc7d490863f396901161b7d9 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/LinkId.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/LinkId.java @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ServiceTypeEnum.java b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ServiceTypeEnum.java index bed0c47af36456fba61c0d101c79ab9f46067449..476dedee17abd339b9a4a2059d47d34777e8445f 100644 --- a/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ServiceTypeEnum.java +++ b/src/policy/src/main/java/org/etsi/tfs/policy/context/model/ServiceTypeEnum.java @@ -28,5 +28,7 @@ public enum ServiceTypeEnum { L1NM, INT, ACL, - IP_LINK + IP_LINK, + TAPI_LSP, + IPOWDM } diff --git a/src/policy/src/main/proto/ipowdm.proto b/src/policy/src/main/proto/ipowdm.proto new file mode 120000 index 0000000000000000000000000000000000000000..80f42cbd0c7bd06392f3d0e01209818dff6fe283 --- /dev/null +++ b/src/policy/src/main/proto/ipowdm.proto @@ -0,0 +1 @@ +../../../../../proto/ipowdm.proto \ No newline at end of file diff --git a/src/policy/src/main/proto/tapi_lsp.proto b/src/policy/src/main/proto/tapi_lsp.proto new file mode 120000 index 0000000000000000000000000000000000000000..ff9990db2d8019a366a449eb99137afa263f27c2 --- /dev/null +++ b/src/policy/src/main/proto/tapi_lsp.proto @@ -0,0 +1 @@ +../../../../../proto/tapi_lsp.proto \ No newline at end of file diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java index ceec864c653d88511a8729dd871abdbfb3391dc6..27cde66fb4d01c41c0ae39bba4f4da897b2cd0c5 100644 --- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java +++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java @@ -231,6 +231,10 @@ public final class ContextOuterClass { * DEVICEDRIVER_OPENROADM = 20; */ DEVICEDRIVER_OPENROADM(20), + /** + * DEVICEDRIVER_RESTCONF_OPENCONFIG = 21; + */ + DEVICEDRIVER_RESTCONF_OPENCONFIG(21), UNRECOGNIZED(-1); /** @@ -342,6 +346,11 @@ public final class ContextOuterClass { */ public static final int DEVICEDRIVER_OPENROADM_VALUE = 20; + /** + * DEVICEDRIVER_RESTCONF_OPENCONFIG = 21; + */ + public static final int DEVICEDRIVER_RESTCONF_OPENCONFIG_VALUE = 21; + public final int getNumber() { if (this == UNRECOGNIZED) { throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value."); @@ -407,6 +416,8 @@ public final class ContextOuterClass { return DEVICEDRIVER_GNMI_NOKIA_SRLINUX; case 20: return DEVICEDRIVER_OPENROADM; + case 21: + return DEVICEDRIVER_RESTCONF_OPENCONFIG; default: return null; } @@ -788,6 +799,14 @@ public final class ContextOuterClass { * SERVICETYPE_IP_LINK = 11; */ SERVICETYPE_IP_LINK(11), + /** + * SERVICETYPE_TAPI_LSP = 12; + */ + SERVICETYPE_TAPI_LSP(12), + /** + * SERVICETYPE_IPOWDM = 13; + */ + SERVICETYPE_IPOWDM(13), UNRECOGNIZED(-1); /** @@ -850,6 +869,16 @@ public final class ContextOuterClass { */ public static final int SERVICETYPE_IP_LINK_VALUE = 11; + /** + * SERVICETYPE_TAPI_LSP = 12; + */ + public static final int SERVICETYPE_TAPI_LSP_VALUE = 12; + + /** + * SERVICETYPE_IPOWDM = 13; + */ + public static final int SERVICETYPE_IPOWDM_VALUE = 13; + public final int getNumber() { if (this == UNRECOGNIZED) { throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value."); @@ -897,6 +926,10 @@ public final class ContextOuterClass { return SERVICETYPE_ACL; case 11: return SERVICETYPE_IP_LINK; + case 12: + return SERVICETYPE_TAPI_LSP; + case 13: + return SERVICETYPE_IPOWDM; default: return null; } @@ -1356,6 +1389,119 @@ public final class ContextOuterClass { } } + /** + * Protobuf enum {@code context.AclDirectionEnum} + */ + public enum AclDirectionEnum implements com.google.protobuf.ProtocolMessageEnum { + + /** + * ACLDIRECTION_BOTH = 0; + */ + ACLDIRECTION_BOTH(0), + /** + * ACLDIRECTION_INGRESS = 1; + */ + ACLDIRECTION_INGRESS(1), + /** + * ACLDIRECTION_EGRESS = 2; + */ + ACLDIRECTION_EGRESS(2), + UNRECOGNIZED(-1); + + /** + * ACLDIRECTION_BOTH = 0; + */ + public static final int ACLDIRECTION_BOTH_VALUE = 0; + + /** + * ACLDIRECTION_INGRESS = 1; + */ + public static final int ACLDIRECTION_INGRESS_VALUE = 1; + + /** + * ACLDIRECTION_EGRESS = 2; + */ + public static final int ACLDIRECTION_EGRESS_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static AclDirectionEnum valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static AclDirectionEnum forNumber(int value) { + switch(value) { + case 0: + return ACLDIRECTION_BOTH; + case 1: + return ACLDIRECTION_INGRESS; + case 2: + return ACLDIRECTION_EGRESS; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = new com.google.protobuf.Internal.EnumLiteMap() { + + public AclDirectionEnum findValueByNumber(int number) { + return AclDirectionEnum.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException("Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8); + } + + private static final AclDirectionEnum[] VALUES = values(); + + public static AclDirectionEnum valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private AclDirectionEnum(int value) { + this.value = value; + } + } + /** *
      * ----- Constraint ----------------------------------------------------------------------------------------------------
@@ -1451,7 +1597,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(8);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(9);
         }
 
         private static final ConstraintActionEnum[] VALUES = values();
@@ -1630,7 +1776,7 @@ public final class ContextOuterClass {
         }
 
         public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() {
-            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(9);
+            return context.ContextOuterClass.getDescriptor().getEnumTypes().get(10);
         }
 
         private static final IsolationLevelEnum[] VALUES = values();
@@ -59756,19 +59902,31 @@ public final class ContextOuterClass {
         context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .context.AclDirectionEnum direction = 2;
+         * @return The enum numeric value on the wire for direction.
+         */
+        int getDirectionValue();
+
+        /**
+         * .context.AclDirectionEnum direction = 2;
+         * @return The direction.
+         */
+        context.ContextOuterClass.AclDirectionEnum getDirection();
+
+        /**
+         * .acl.AclRuleSet rule_set = 3;
          * @return Whether the ruleSet field is set.
          */
         boolean hasRuleSet();
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .acl.AclRuleSet rule_set = 3;
          * @return The ruleSet.
          */
         acl.Acl.AclRuleSet getRuleSet();
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .acl.AclRuleSet rule_set = 3;
          */
         acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
     }
@@ -59787,6 +59945,7 @@ public final class ContextOuterClass {
         }
 
         private ConfigRule_ACL() {
+            direction_ = 0;
         }
 
         @java.lang.Override
@@ -59834,12 +59993,35 @@ public final class ContextOuterClass {
             return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
 
-        public static final int RULE_SET_FIELD_NUMBER = 2;
+        public static final int DIRECTION_FIELD_NUMBER = 2;
+
+        private int direction_ = 0;
+
+        /**
+         * .context.AclDirectionEnum direction = 2;
+         * @return The enum numeric value on the wire for direction.
+         */
+        @java.lang.Override
+        public int getDirectionValue() {
+            return direction_;
+        }
+
+        /**
+         * .context.AclDirectionEnum direction = 2;
+         * @return The direction.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.AclDirectionEnum getDirection() {
+            context.ContextOuterClass.AclDirectionEnum result = context.ContextOuterClass.AclDirectionEnum.forNumber(direction_);
+            return result == null ? context.ContextOuterClass.AclDirectionEnum.UNRECOGNIZED : result;
+        }
+
+        public static final int RULE_SET_FIELD_NUMBER = 3;
 
         private acl.Acl.AclRuleSet ruleSet_;
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .acl.AclRuleSet rule_set = 3;
          * @return Whether the ruleSet field is set.
          */
         @java.lang.Override
@@ -59848,7 +60030,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .acl.AclRuleSet rule_set = 3;
          * @return The ruleSet.
          */
         @java.lang.Override
@@ -59857,7 +60039,7 @@ public final class ContextOuterClass {
         }
 
         /**
-         * .acl.AclRuleSet rule_set = 2;
+         * .acl.AclRuleSet rule_set = 3;
          */
         @java.lang.Override
         public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
@@ -59882,8 +60064,11 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 output.writeMessage(1, getEndpointId());
             }
+            if (direction_ != context.ContextOuterClass.AclDirectionEnum.ACLDIRECTION_BOTH.getNumber()) {
+                output.writeEnum(2, direction_);
+            }
             if (ruleSet_ != null) {
-                output.writeMessage(2, getRuleSet());
+                output.writeMessage(3, getRuleSet());
             }
             getUnknownFields().writeTo(output);
         }
@@ -59897,8 +60082,11 @@ public final class ContextOuterClass {
             if (endpointId_ != null) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEndpointId());
             }
+            if (direction_ != context.ContextOuterClass.AclDirectionEnum.ACLDIRECTION_BOTH.getNumber()) {
+                size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, direction_);
+            }
             if (ruleSet_ != null) {
-                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getRuleSet());
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getRuleSet());
             }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
@@ -59920,6 +60108,8 @@ public final class ContextOuterClass {
                 if (!getEndpointId().equals(other.getEndpointId()))
                     return false;
             }
+            if (direction_ != other.direction_)
+                return false;
             if (hasRuleSet() != other.hasRuleSet())
                 return false;
             if (hasRuleSet()) {
@@ -59942,6 +60132,8 @@ public final class ContextOuterClass {
                 hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getEndpointId().hashCode();
             }
+            hash = (37 * hash) + DIRECTION_FIELD_NUMBER;
+            hash = (53 * hash) + direction_;
             if (hasRuleSet()) {
                 hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
                 hash = (53 * hash) + getRuleSet().hashCode();
@@ -60055,6 +60247,7 @@ public final class ContextOuterClass {
                     endpointIdBuilder_.dispose();
                     endpointIdBuilder_ = null;
                 }
+                direction_ = 0;
                 ruleSet_ = null;
                 if (ruleSetBuilder_ != null) {
                     ruleSetBuilder_.dispose();
@@ -60098,6 +60291,9 @@ public final class ContextOuterClass {
                     result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
                 }
                 if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.direction_ = direction_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
                     result.ruleSet_ = ruleSetBuilder_ == null ? ruleSet_ : ruleSetBuilder_.build();
                 }
             }
@@ -60118,6 +60314,9 @@ public final class ContextOuterClass {
                 if (other.hasEndpointId()) {
                     mergeEndpointId(other.getEndpointId());
                 }
+                if (other.direction_ != 0) {
+                    setDirectionValue(other.getDirectionValue());
+                }
                 if (other.hasRuleSet()) {
                     mergeRuleSet(other.getRuleSet());
                 }
@@ -60151,13 +60350,20 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 10
-                            case 18:
+                            case 16:
                                 {
-                                    input.readMessage(getRuleSetFieldBuilder().getBuilder(), extensionRegistry);
+                                    direction_ = input.readEnum();
                                     bitField0_ |= 0x00000002;
                                     break;
                                 }
-                            // case 18
+                            // case 16
+                            case 26:
+                                {
+                                    input.readMessage(getRuleSetFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -60299,20 +60505,79 @@ public final class ContextOuterClass {
                 return endpointIdBuilder_;
             }
 
+            private int direction_ = 0;
+
+            /**
+             * .context.AclDirectionEnum direction = 2;
+             * @return The enum numeric value on the wire for direction.
+             */
+            @java.lang.Override
+            public int getDirectionValue() {
+                return direction_;
+            }
+
+            /**
+             * .context.AclDirectionEnum direction = 2;
+             * @param value The enum numeric value on the wire for direction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDirectionValue(int value) {
+                direction_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.AclDirectionEnum direction = 2;
+             * @return The direction.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.AclDirectionEnum getDirection() {
+                context.ContextOuterClass.AclDirectionEnum result = context.ContextOuterClass.AclDirectionEnum.forNumber(direction_);
+                return result == null ? context.ContextOuterClass.AclDirectionEnum.UNRECOGNIZED : result;
+            }
+
+            /**
+             * .context.AclDirectionEnum direction = 2;
+             * @param value The direction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDirection(context.ContextOuterClass.AclDirectionEnum value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                bitField0_ |= 0x00000002;
+                direction_ = value.getNumber();
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.AclDirectionEnum direction = 2;
+             * @return This builder for chaining.
+             */
+            public Builder clearDirection() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                direction_ = 0;
+                onChanged();
+                return this;
+            }
+
             private acl.Acl.AclRuleSet ruleSet_;
 
             private com.google.protobuf.SingleFieldBuilderV3 ruleSetBuilder_;
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              * @return Whether the ruleSet field is set.
              */
             public boolean hasRuleSet() {
-                return ((bitField0_ & 0x00000002) != 0);
+                return ((bitField0_ & 0x00000004) != 0);
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              * @return The ruleSet.
              */
             public acl.Acl.AclRuleSet getRuleSet() {
@@ -60324,7 +60589,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public Builder setRuleSet(acl.Acl.AclRuleSet value) {
                 if (ruleSetBuilder_ == null) {
@@ -60335,13 +60600,13 @@ public final class ContextOuterClass {
                 } else {
                     ruleSetBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public Builder setRuleSet(acl.Acl.AclRuleSet.Builder builderForValue) {
                 if (ruleSetBuilder_ == null) {
@@ -60349,17 +60614,17 @@ public final class ContextOuterClass {
                 } else {
                     ruleSetBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
                 if (ruleSetBuilder_ == null) {
-                    if (((bitField0_ & 0x00000002) != 0) && ruleSet_ != null && ruleSet_ != acl.Acl.AclRuleSet.getDefaultInstance()) {
+                    if (((bitField0_ & 0x00000004) != 0) && ruleSet_ != null && ruleSet_ != acl.Acl.AclRuleSet.getDefaultInstance()) {
                         getRuleSetBuilder().mergeFrom(value);
                     } else {
                         ruleSet_ = value;
@@ -60367,16 +60632,16 @@ public final class ContextOuterClass {
                 } else {
                     ruleSetBuilder_.mergeFrom(value);
                 }
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return this;
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public Builder clearRuleSet() {
-                bitField0_ = (bitField0_ & ~0x00000002);
+                bitField0_ = (bitField0_ & ~0x00000004);
                 ruleSet_ = null;
                 if (ruleSetBuilder_ != null) {
                     ruleSetBuilder_.dispose();
@@ -60387,16 +60652,16 @@ public final class ContextOuterClass {
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000004;
                 onChanged();
                 return getRuleSetFieldBuilder().getBuilder();
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
                 if (ruleSetBuilder_ != null) {
@@ -60407,7 +60672,7 @@ public final class ContextOuterClass {
             }
 
             /**
-             * .acl.AclRuleSet rule_set = 2;
+             * .acl.AclRuleSet rule_set = 3;
              */
             private com.google.protobuf.SingleFieldBuilderV3 getRuleSetFieldBuilder() {
                 if (ruleSetBuilder_ == null) {
@@ -60473,6 +60738,1659 @@ public final class ContextOuterClass {
         }
     }
 
+    public interface ConfigRule_IPOWDMOrBuilder extends // @@protoc_insertion_point(interface_extends:context.ConfigRule_IPOWDM)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return Whether the endpointId field is set.
+         */
+        boolean hasEndpointId();
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return The endpointId.
+         */
+        context.ContextOuterClass.EndPointId getEndpointId();
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         */
+        context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         * @return Whether the ruleSet field is set.
+         */
+        boolean hasRuleSet();
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         * @return The ruleSet.
+         */
+        ipowdm.Ipowdm.IpowdmRuleSet getRuleSet();
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         */
+        ipowdm.Ipowdm.IpowdmRuleSetOrBuilder getRuleSetOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code context.ConfigRule_IPOWDM}
+     */
+    public static final class ConfigRule_IPOWDM extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.ConfigRule_IPOWDM)
+    ConfigRule_IPOWDMOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use ConfigRule_IPOWDM.newBuilder() to construct.
+        private ConfigRule_IPOWDM(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private ConfigRule_IPOWDM() {
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new ConfigRule_IPOWDM();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_ConfigRule_IPOWDM_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_ConfigRule_IPOWDM_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ConfigRule_IPOWDM.class, context.ContextOuterClass.ConfigRule_IPOWDM.Builder.class);
+        }
+
+        public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.EndPointId endpointId_;
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return Whether the endpointId field is set.
+         */
+        @java.lang.Override
+        public boolean hasEndpointId() {
+            return endpointId_ != null;
+        }
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return The endpointId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.EndPointId getEndpointId() {
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+
+        public static final int RULE_SET_FIELD_NUMBER = 2;
+
+        private ipowdm.Ipowdm.IpowdmRuleSet ruleSet_;
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         * @return Whether the ruleSet field is set.
+         */
+        @java.lang.Override
+        public boolean hasRuleSet() {
+            return ruleSet_ != null;
+        }
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         * @return The ruleSet.
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.IpowdmRuleSet getRuleSet() {
+            return ruleSet_ == null ? ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance() : ruleSet_;
+        }
+
+        /**
+         * .ipowdm.IpowdmRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.IpowdmRuleSetOrBuilder getRuleSetOrBuilder() {
+            return ruleSet_ == null ? ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance() : ruleSet_;
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (endpointId_ != null) {
+                output.writeMessage(1, getEndpointId());
+            }
+            if (ruleSet_ != null) {
+                output.writeMessage(2, getRuleSet());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (endpointId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEndpointId());
+            }
+            if (ruleSet_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getRuleSet());
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof context.ContextOuterClass.ConfigRule_IPOWDM)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.ConfigRule_IPOWDM other = (context.ContextOuterClass.ConfigRule_IPOWDM) obj;
+            if (hasEndpointId() != other.hasEndpointId())
+                return false;
+            if (hasEndpointId()) {
+                if (!getEndpointId().equals(other.getEndpointId()))
+                    return false;
+            }
+            if (hasRuleSet() != other.hasRuleSet())
+                return false;
+            if (hasRuleSet()) {
+                if (!getRuleSet().equals(other.getRuleSet()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasEndpointId()) {
+                hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getEndpointId().hashCode();
+            }
+            if (hasRuleSet()) {
+                hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+                hash = (53 * hash) + getRuleSet().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(context.ContextOuterClass.ConfigRule_IPOWDM prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code context.ConfigRule_IPOWDM}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:context.ConfigRule_IPOWDM)
+        context.ContextOuterClass.ConfigRule_IPOWDMOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_IPOWDM_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_IPOWDM_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ConfigRule_IPOWDM.class, context.ContextOuterClass.ConfigRule_IPOWDM.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.ConfigRule_IPOWDM.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
+                    endpointIdBuilder_ = null;
+                }
+                ruleSet_ = null;
+                if (ruleSetBuilder_ != null) {
+                    ruleSetBuilder_.dispose();
+                    ruleSetBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_IPOWDM_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_IPOWDM getDefaultInstanceForType() {
+                return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_IPOWDM build() {
+                context.ContextOuterClass.ConfigRule_IPOWDM result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_IPOWDM buildPartial() {
+                context.ContextOuterClass.ConfigRule_IPOWDM result = new context.ContextOuterClass.ConfigRule_IPOWDM(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(context.ContextOuterClass.ConfigRule_IPOWDM result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.ruleSet_ = ruleSetBuilder_ == null ? ruleSet_ : ruleSetBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.ConfigRule_IPOWDM) {
+                    return mergeFrom((context.ContextOuterClass.ConfigRule_IPOWDM) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.ConfigRule_IPOWDM other) {
+                if (other == context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance())
+                    return this;
+                if (other.hasEndpointId()) {
+                    mergeEndpointId(other.getEndpointId());
+                }
+                if (other.hasRuleSet()) {
+                    mergeRuleSet(other.getRuleSet());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    input.readMessage(getRuleSetFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.EndPointId endpointId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3 endpointIdBuilder_;
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             * @return Whether the endpointId field is set.
+             */
+            public boolean hasEndpointId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             * @return The endpointId.
+             */
+            public context.ContextOuterClass.EndPointId getEndpointId() {
+                if (endpointIdBuilder_ == null) {
+                    return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+                } else {
+                    return endpointIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+                if (endpointIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    endpointId_ = value;
+                } else {
+                    endpointIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (endpointIdBuilder_ == null) {
+                    endpointId_ = builderForValue.build();
+                } else {
+                    endpointIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+                if (endpointIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
+                    } else {
+                        endpointId_ = value;
+                    }
+                } else {
+                    endpointIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder clearEndpointId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
+                    endpointIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getEndpointIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+                if (endpointIdBuilder_ != null) {
+                    return endpointIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+                }
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getEndpointIdFieldBuilder() {
+                if (endpointIdBuilder_ == null) {
+                    endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3(getEndpointId(), getParentForChildren(), isClean());
+                    endpointId_ = null;
+                }
+                return endpointIdBuilder_;
+            }
+
+            private ipowdm.Ipowdm.IpowdmRuleSet ruleSet_;
+
+            private com.google.protobuf.SingleFieldBuilderV3 ruleSetBuilder_;
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             * @return Whether the ruleSet field is set.
+             */
+            public boolean hasRuleSet() {
+                return ((bitField0_ & 0x00000002) != 0);
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             * @return The ruleSet.
+             */
+            public ipowdm.Ipowdm.IpowdmRuleSet getRuleSet() {
+                if (ruleSetBuilder_ == null) {
+                    return ruleSet_ == null ? ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance() : ruleSet_;
+                } else {
+                    return ruleSetBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public Builder setRuleSet(ipowdm.Ipowdm.IpowdmRuleSet value) {
+                if (ruleSetBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ruleSet_ = value;
+                } else {
+                    ruleSetBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public Builder setRuleSet(ipowdm.Ipowdm.IpowdmRuleSet.Builder builderForValue) {
+                if (ruleSetBuilder_ == null) {
+                    ruleSet_ = builderForValue.build();
+                } else {
+                    ruleSetBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public Builder mergeRuleSet(ipowdm.Ipowdm.IpowdmRuleSet value) {
+                if (ruleSetBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0) && ruleSet_ != null && ruleSet_ != ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance()) {
+                        getRuleSetBuilder().mergeFrom(value);
+                    } else {
+                        ruleSet_ = value;
+                    }
+                } else {
+                    ruleSetBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public Builder clearRuleSet() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                ruleSet_ = null;
+                if (ruleSetBuilder_ != null) {
+                    ruleSetBuilder_.dispose();
+                    ruleSetBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public ipowdm.Ipowdm.IpowdmRuleSet.Builder getRuleSetBuilder() {
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return getRuleSetFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            public ipowdm.Ipowdm.IpowdmRuleSetOrBuilder getRuleSetOrBuilder() {
+                if (ruleSetBuilder_ != null) {
+                    return ruleSetBuilder_.getMessageOrBuilder();
+                } else {
+                    return ruleSet_ == null ? ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance() : ruleSet_;
+                }
+            }
+
+            /**
+             * .ipowdm.IpowdmRuleSet rule_set = 2;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getRuleSetFieldBuilder() {
+                if (ruleSetBuilder_ == null) {
+                    ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3(getRuleSet(), getParentForChildren(), isClean());
+                    ruleSet_ = null;
+                }
+                return ruleSetBuilder_;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:context.ConfigRule_IPOWDM)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.ConfigRule_IPOWDM)
+        private static final context.ContextOuterClass.ConfigRule_IPOWDM DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_IPOWDM();
+        }
+
+        public static context.ContextOuterClass.ConfigRule_IPOWDM getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public ConfigRule_IPOWDM parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_IPOWDM getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface ConfigRule_TAPI_LSPOrBuilder extends // @@protoc_insertion_point(interface_extends:context.ConfigRule_TAPI_LSP)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return Whether the endpointId field is set.
+         */
+        boolean hasEndpointId();
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return The endpointId.
+         */
+        context.ContextOuterClass.EndPointId getEndpointId();
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         */
+        context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        java.util.List getRuleSetList();
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        tapi_lsp.TapiLsp.TapiLspRuleSet getRuleSet(int index);
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        int getRuleSetCount();
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        java.util.List getRuleSetOrBuilderList();
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        tapi_lsp.TapiLsp.TapiLspRuleSetOrBuilder getRuleSetOrBuilder(int index);
+    }
+
+    /**
+     * Protobuf type {@code context.ConfigRule_TAPI_LSP}
+     */
+    public static final class ConfigRule_TAPI_LSP extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:context.ConfigRule_TAPI_LSP)
+    ConfigRule_TAPI_LSPOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use ConfigRule_TAPI_LSP.newBuilder() to construct.
+        private ConfigRule_TAPI_LSP(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private ConfigRule_TAPI_LSP() {
+            ruleSet_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new ConfigRule_TAPI_LSP();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return context.ContextOuterClass.internal_static_context_ConfigRule_TAPI_LSP_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return context.ContextOuterClass.internal_static_context_ConfigRule_TAPI_LSP_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ConfigRule_TAPI_LSP.class, context.ContextOuterClass.ConfigRule_TAPI_LSP.Builder.class);
+        }
+
+        public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+
+        private context.ContextOuterClass.EndPointId endpointId_;
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return Whether the endpointId field is set.
+         */
+        @java.lang.Override
+        public boolean hasEndpointId() {
+            return endpointId_ != null;
+        }
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         * @return The endpointId.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.EndPointId getEndpointId() {
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+
+        /**
+         * .context.EndPointId endpoint_id = 1;
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+            return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+
+        public static final int RULE_SET_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private java.util.List ruleSet_;
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public java.util.List getRuleSetList() {
+            return ruleSet_;
+        }
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public java.util.List getRuleSetOrBuilderList() {
+            return ruleSet_;
+        }
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public int getRuleSetCount() {
+            return ruleSet_.size();
+        }
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public tapi_lsp.TapiLsp.TapiLspRuleSet getRuleSet(int index) {
+            return ruleSet_.get(index);
+        }
+
+        /**
+         * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+         */
+        @java.lang.Override
+        public tapi_lsp.TapiLsp.TapiLspRuleSetOrBuilder getRuleSetOrBuilder(int index) {
+            return ruleSet_.get(index);
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (endpointId_ != null) {
+                output.writeMessage(1, getEndpointId());
+            }
+            for (int i = 0; i < ruleSet_.size(); i++) {
+                output.writeMessage(2, ruleSet_.get(i));
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (endpointId_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getEndpointId());
+            }
+            for (int i = 0; i < ruleSet_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, ruleSet_.get(i));
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof context.ContextOuterClass.ConfigRule_TAPI_LSP)) {
+                return super.equals(obj);
+            }
+            context.ContextOuterClass.ConfigRule_TAPI_LSP other = (context.ContextOuterClass.ConfigRule_TAPI_LSP) obj;
+            if (hasEndpointId() != other.hasEndpointId())
+                return false;
+            if (hasEndpointId()) {
+                if (!getEndpointId().equals(other.getEndpointId()))
+                    return false;
+            }
+            if (!getRuleSetList().equals(other.getRuleSetList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (hasEndpointId()) {
+                hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getEndpointId().hashCode();
+            }
+            if (getRuleSetCount() > 0) {
+                hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+                hash = (53 * hash) + getRuleSetList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(context.ContextOuterClass.ConfigRule_TAPI_LSP prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code context.ConfigRule_TAPI_LSP}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:context.ConfigRule_TAPI_LSP)
+        context.ContextOuterClass.ConfigRule_TAPI_LSPOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_TAPI_LSP_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_TAPI_LSP_fieldAccessorTable.ensureFieldAccessorsInitialized(context.ContextOuterClass.ConfigRule_TAPI_LSP.class, context.ContextOuterClass.ConfigRule_TAPI_LSP.Builder.class);
+            }
+
+            // Construct using context.ContextOuterClass.ConfigRule_TAPI_LSP.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
+                    endpointIdBuilder_ = null;
+                }
+                if (ruleSetBuilder_ == null) {
+                    ruleSet_ = java.util.Collections.emptyList();
+                } else {
+                    ruleSet_ = null;
+                    ruleSetBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000002);
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return context.ContextOuterClass.internal_static_context_ConfigRule_TAPI_LSP_descriptor;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_TAPI_LSP getDefaultInstanceForType() {
+                return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_TAPI_LSP build() {
+                context.ContextOuterClass.ConfigRule_TAPI_LSP result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_TAPI_LSP buildPartial() {
+                context.ContextOuterClass.ConfigRule_TAPI_LSP result = new context.ContextOuterClass.ConfigRule_TAPI_LSP(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(context.ContextOuterClass.ConfigRule_TAPI_LSP result) {
+                if (ruleSetBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0)) {
+                        ruleSet_ = java.util.Collections.unmodifiableList(ruleSet_);
+                        bitField0_ = (bitField0_ & ~0x00000002);
+                    }
+                    result.ruleSet_ = ruleSet_;
+                } else {
+                    result.ruleSet_ = ruleSetBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(context.ContextOuterClass.ConfigRule_TAPI_LSP result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.endpointId_ = endpointIdBuilder_ == null ? endpointId_ : endpointIdBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof context.ContextOuterClass.ConfigRule_TAPI_LSP) {
+                    return mergeFrom((context.ContextOuterClass.ConfigRule_TAPI_LSP) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(context.ContextOuterClass.ConfigRule_TAPI_LSP other) {
+                if (other == context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance())
+                    return this;
+                if (other.hasEndpointId()) {
+                    mergeEndpointId(other.getEndpointId());
+                }
+                if (ruleSetBuilder_ == null) {
+                    if (!other.ruleSet_.isEmpty()) {
+                        if (ruleSet_.isEmpty()) {
+                            ruleSet_ = other.ruleSet_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                        } else {
+                            ensureRuleSetIsMutable();
+                            ruleSet_.addAll(other.ruleSet_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.ruleSet_.isEmpty()) {
+                        if (ruleSetBuilder_.isEmpty()) {
+                            ruleSetBuilder_.dispose();
+                            ruleSetBuilder_ = null;
+                            ruleSet_ = other.ruleSet_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                            ruleSetBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getRuleSetFieldBuilder() : null;
+                        } else {
+                            ruleSetBuilder_.addAllMessages(other.ruleSet_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    input.readMessage(getEndpointIdFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    tapi_lsp.TapiLsp.TapiLspRuleSet m = input.readMessage(tapi_lsp.TapiLsp.TapiLspRuleSet.parser(), extensionRegistry);
+                                    if (ruleSetBuilder_ == null) {
+                                        ensureRuleSetIsMutable();
+                                        ruleSet_.add(m);
+                                    } else {
+                                        ruleSetBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private context.ContextOuterClass.EndPointId endpointId_;
+
+            private com.google.protobuf.SingleFieldBuilderV3 endpointIdBuilder_;
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             * @return Whether the endpointId field is set.
+             */
+            public boolean hasEndpointId() {
+                return ((bitField0_ & 0x00000001) != 0);
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             * @return The endpointId.
+             */
+            public context.ContextOuterClass.EndPointId getEndpointId() {
+                if (endpointIdBuilder_ == null) {
+                    return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+                } else {
+                    return endpointIdBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+                if (endpointIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    endpointId_ = value;
+                } else {
+                    endpointIdBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder setEndpointId(context.ContextOuterClass.EndPointId.Builder builderForValue) {
+                if (endpointIdBuilder_ == null) {
+                    endpointId_ = builderForValue.build();
+                } else {
+                    endpointIdBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+                if (endpointIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0) && endpointId_ != null && endpointId_ != context.ContextOuterClass.EndPointId.getDefaultInstance()) {
+                        getEndpointIdBuilder().mergeFrom(value);
+                    } else {
+                        endpointId_ = value;
+                    }
+                } else {
+                    endpointIdBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public Builder clearEndpointId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                endpointId_ = null;
+                if (endpointIdBuilder_ != null) {
+                    endpointIdBuilder_.dispose();
+                    endpointIdBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return getEndpointIdFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+                if (endpointIdBuilder_ != null) {
+                    return endpointIdBuilder_.getMessageOrBuilder();
+                } else {
+                    return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+                }
+            }
+
+            /**
+             * .context.EndPointId endpoint_id = 1;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getEndpointIdFieldBuilder() {
+                if (endpointIdBuilder_ == null) {
+                    endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3(getEndpointId(), getParentForChildren(), isClean());
+                    endpointId_ = null;
+                }
+                return endpointIdBuilder_;
+            }
+
+            private java.util.List ruleSet_ = java.util.Collections.emptyList();
+
+            private void ensureRuleSetIsMutable() {
+                if (!((bitField0_ & 0x00000002) != 0)) {
+                    ruleSet_ = new java.util.ArrayList(ruleSet_);
+                    bitField0_ |= 0x00000002;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 ruleSetBuilder_;
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public java.util.List getRuleSetList() {
+                if (ruleSetBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(ruleSet_);
+                } else {
+                    return ruleSetBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public int getRuleSetCount() {
+                if (ruleSetBuilder_ == null) {
+                    return ruleSet_.size();
+                } else {
+                    return ruleSetBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public tapi_lsp.TapiLsp.TapiLspRuleSet getRuleSet(int index) {
+                if (ruleSetBuilder_ == null) {
+                    return ruleSet_.get(index);
+                } else {
+                    return ruleSetBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder setRuleSet(int index, tapi_lsp.TapiLsp.TapiLspRuleSet value) {
+                if (ruleSetBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureRuleSetIsMutable();
+                    ruleSet_.set(index, value);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder setRuleSet(int index, tapi_lsp.TapiLsp.TapiLspRuleSet.Builder builderForValue) {
+                if (ruleSetBuilder_ == null) {
+                    ensureRuleSetIsMutable();
+                    ruleSet_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder addRuleSet(tapi_lsp.TapiLsp.TapiLspRuleSet value) {
+                if (ruleSetBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureRuleSetIsMutable();
+                    ruleSet_.add(value);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder addRuleSet(int index, tapi_lsp.TapiLsp.TapiLspRuleSet value) {
+                if (ruleSetBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureRuleSetIsMutable();
+                    ruleSet_.add(index, value);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder addRuleSet(tapi_lsp.TapiLsp.TapiLspRuleSet.Builder builderForValue) {
+                if (ruleSetBuilder_ == null) {
+                    ensureRuleSetIsMutable();
+                    ruleSet_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder addRuleSet(int index, tapi_lsp.TapiLsp.TapiLspRuleSet.Builder builderForValue) {
+                if (ruleSetBuilder_ == null) {
+                    ensureRuleSetIsMutable();
+                    ruleSet_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder addAllRuleSet(java.lang.Iterable values) {
+                if (ruleSetBuilder_ == null) {
+                    ensureRuleSetIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, ruleSet_);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder clearRuleSet() {
+                if (ruleSetBuilder_ == null) {
+                    ruleSet_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000002);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public Builder removeRuleSet(int index) {
+                if (ruleSetBuilder_ == null) {
+                    ensureRuleSetIsMutable();
+                    ruleSet_.remove(index);
+                    onChanged();
+                } else {
+                    ruleSetBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public tapi_lsp.TapiLsp.TapiLspRuleSet.Builder getRuleSetBuilder(int index) {
+                return getRuleSetFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public tapi_lsp.TapiLsp.TapiLspRuleSetOrBuilder getRuleSetOrBuilder(int index) {
+                if (ruleSetBuilder_ == null) {
+                    return ruleSet_.get(index);
+                } else {
+                    return ruleSetBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public java.util.List getRuleSetOrBuilderList() {
+                if (ruleSetBuilder_ != null) {
+                    return ruleSetBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(ruleSet_);
+                }
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public tapi_lsp.TapiLsp.TapiLspRuleSet.Builder addRuleSetBuilder() {
+                return getRuleSetFieldBuilder().addBuilder(tapi_lsp.TapiLsp.TapiLspRuleSet.getDefaultInstance());
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public tapi_lsp.TapiLsp.TapiLspRuleSet.Builder addRuleSetBuilder(int index) {
+                return getRuleSetFieldBuilder().addBuilder(index, tapi_lsp.TapiLsp.TapiLspRuleSet.getDefaultInstance());
+            }
+
+            /**
+             * repeated .tapi_lsp.TapiLspRuleSet rule_set = 2;
+             */
+            public java.util.List getRuleSetBuilderList() {
+                return getRuleSetFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getRuleSetFieldBuilder() {
+                if (ruleSetBuilder_ == null) {
+                    ruleSetBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(ruleSet_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    ruleSet_ = null;
+                }
+                return ruleSetBuilder_;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:context.ConfigRule_TAPI_LSP)
+        }
+
+        // @@protoc_insertion_point(class_scope:context.ConfigRule_TAPI_LSP)
+        private static final context.ContextOuterClass.ConfigRule_TAPI_LSP DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_TAPI_LSP();
+        }
+
+        public static context.ContextOuterClass.ConfigRule_TAPI_LSP getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public ConfigRule_TAPI_LSP parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_TAPI_LSP getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
     public interface ConfigRule_IP_LINKOrBuilder extends // @@protoc_insertion_point(interface_extends:context.ConfigRule_IP_LINK)
     com.google.protobuf.MessageOrBuilder {
 
@@ -61277,6 +63195,40 @@ public final class ContextOuterClass {
          */
         context.ContextOuterClass.ConfigRule_IP_LINKOrBuilder getIpLinkOrBuilder();
 
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         * @return Whether the tapiLsp field is set.
+         */
+        boolean hasTapiLsp();
+
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         * @return The tapiLsp.
+         */
+        context.ContextOuterClass.ConfigRule_TAPI_LSP getTapiLsp();
+
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         */
+        context.ContextOuterClass.ConfigRule_TAPI_LSPOrBuilder getTapiLspOrBuilder();
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         * @return Whether the ipowdm field is set.
+         */
+        boolean hasIpowdm();
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         * @return The ipowdm.
+         */
+        context.ContextOuterClass.ConfigRule_IPOWDM getIpowdm();
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         */
+        context.ContextOuterClass.ConfigRule_IPOWDMOrBuilder getIpowdmOrBuilder();
+
         context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
     }
 
@@ -61319,7 +63271,12 @@ public final class ContextOuterClass {
 
         public enum ConfigRuleCase implements com.google.protobuf.Internal.EnumLite, com.google.protobuf.AbstractMessage.InternalOneOfEnum {
 
-            CUSTOM(2), ACL(3), IP_LINK(4), CONFIGRULE_NOT_SET(0);
+            CUSTOM(2),
+            ACL(3),
+            IP_LINK(4),
+            TAPI_LSP(5),
+            IPOWDM(6),
+            CONFIGRULE_NOT_SET(0);
 
             private final int value;
 
@@ -61345,6 +63302,10 @@ public final class ContextOuterClass {
                         return ACL;
                     case 4:
                         return IP_LINK;
+                    case 5:
+                        return TAPI_LSP;
+                    case 6:
+                        return IPOWDM;
                     case 0:
                         return CONFIGRULE_NOT_SET;
                     default:
@@ -61486,6 +63447,74 @@ public final class ContextOuterClass {
             return context.ContextOuterClass.ConfigRule_IP_LINK.getDefaultInstance();
         }
 
+        public static final int TAPI_LSP_FIELD_NUMBER = 5;
+
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         * @return Whether the tapiLsp field is set.
+         */
+        @java.lang.Override
+        public boolean hasTapiLsp() {
+            return configRuleCase_ == 5;
+        }
+
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         * @return The tapiLsp.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_TAPI_LSP getTapiLsp() {
+            if (configRuleCase_ == 5) {
+                return (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_;
+            }
+            return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+        }
+
+        /**
+         * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_TAPI_LSPOrBuilder getTapiLspOrBuilder() {
+            if (configRuleCase_ == 5) {
+                return (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_;
+            }
+            return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+        }
+
+        public static final int IPOWDM_FIELD_NUMBER = 6;
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         * @return Whether the ipowdm field is set.
+         */
+        @java.lang.Override
+        public boolean hasIpowdm() {
+            return configRuleCase_ == 6;
+        }
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         * @return The ipowdm.
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_IPOWDM getIpowdm() {
+            if (configRuleCase_ == 6) {
+                return (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_;
+            }
+            return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+        }
+
+        /**
+         * .context.ConfigRule_IPOWDM ipowdm = 6;
+         */
+        @java.lang.Override
+        public context.ContextOuterClass.ConfigRule_IPOWDMOrBuilder getIpowdmOrBuilder() {
+            if (configRuleCase_ == 6) {
+                return (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_;
+            }
+            return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -61513,6 +63542,12 @@ public final class ContextOuterClass {
             if (configRuleCase_ == 4) {
                 output.writeMessage(4, (context.ContextOuterClass.ConfigRule_IP_LINK) configRule_);
             }
+            if (configRuleCase_ == 5) {
+                output.writeMessage(5, (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_);
+            }
+            if (configRuleCase_ == 6) {
+                output.writeMessage(6, (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_);
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -61534,6 +63569,12 @@ public final class ContextOuterClass {
             if (configRuleCase_ == 4) {
                 size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, (context.ContextOuterClass.ConfigRule_IP_LINK) configRule_);
             }
+            if (configRuleCase_ == 5) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_);
+            }
+            if (configRuleCase_ == 6) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_);
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -61565,6 +63606,14 @@ public final class ContextOuterClass {
                     if (!getIpLink().equals(other.getIpLink()))
                         return false;
                     break;
+                case 5:
+                    if (!getTapiLsp().equals(other.getTapiLsp()))
+                        return false;
+                    break;
+                case 6:
+                    if (!getIpowdm().equals(other.getIpowdm()))
+                        return false;
+                    break;
                 case 0:
                 default:
             }
@@ -61595,6 +63644,14 @@ public final class ContextOuterClass {
                     hash = (37 * hash) + IP_LINK_FIELD_NUMBER;
                     hash = (53 * hash) + getIpLink().hashCode();
                     break;
+                case 5:
+                    hash = (37 * hash) + TAPI_LSP_FIELD_NUMBER;
+                    hash = (53 * hash) + getTapiLsp().hashCode();
+                    break;
+                case 6:
+                    hash = (37 * hash) + IPOWDM_FIELD_NUMBER;
+                    hash = (53 * hash) + getIpowdm().hashCode();
+                    break;
                 case 0:
                 default:
             }
@@ -61712,6 +63769,12 @@ public final class ContextOuterClass {
                 if (ipLinkBuilder_ != null) {
                     ipLinkBuilder_.clear();
                 }
+                if (tapiLspBuilder_ != null) {
+                    tapiLspBuilder_.clear();
+                }
+                if (ipowdmBuilder_ != null) {
+                    ipowdmBuilder_.clear();
+                }
                 configRuleCase_ = 0;
                 configRule_ = null;
                 return this;
@@ -61766,6 +63829,12 @@ public final class ContextOuterClass {
                 if (configRuleCase_ == 4 && ipLinkBuilder_ != null) {
                     result.configRule_ = ipLinkBuilder_.build();
                 }
+                if (configRuleCase_ == 5 && tapiLspBuilder_ != null) {
+                    result.configRule_ = tapiLspBuilder_.build();
+                }
+                if (configRuleCase_ == 6 && ipowdmBuilder_ != null) {
+                    result.configRule_ = ipowdmBuilder_.build();
+                }
             }
 
             @java.lang.Override
@@ -61800,6 +63869,16 @@ public final class ContextOuterClass {
                             mergeIpLink(other.getIpLink());
                             break;
                         }
+                    case TAPI_LSP:
+                        {
+                            mergeTapiLsp(other.getTapiLsp());
+                            break;
+                        }
+                    case IPOWDM:
+                        {
+                            mergeIpowdm(other.getIpowdm());
+                            break;
+                        }
                     case CONFIGRULE_NOT_SET:
                         {
                             break;
@@ -61856,6 +63935,20 @@ public final class ContextOuterClass {
                                     break;
                                 }
                             // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getTapiLspFieldBuilder().getBuilder(), extensionRegistry);
+                                    configRuleCase_ = 5;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    input.readMessage(getIpowdmFieldBuilder().getBuilder(), extensionRegistry);
+                                    configRuleCase_ = 6;
+                                    break;
+                                }
+                            // case 50
                             default:
                                 {
                                     if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -62376,6 +64469,288 @@ public final class ContextOuterClass {
                 return ipLinkBuilder_;
             }
 
+            private com.google.protobuf.SingleFieldBuilderV3 tapiLspBuilder_;
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             * @return Whether the tapiLsp field is set.
+             */
+            @java.lang.Override
+            public boolean hasTapiLsp() {
+                return configRuleCase_ == 5;
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             * @return The tapiLsp.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_TAPI_LSP getTapiLsp() {
+                if (tapiLspBuilder_ == null) {
+                    if (configRuleCase_ == 5) {
+                        return (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_;
+                    }
+                    return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+                } else {
+                    if (configRuleCase_ == 5) {
+                        return tapiLspBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+                }
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            public Builder setTapiLsp(context.ContextOuterClass.ConfigRule_TAPI_LSP value) {
+                if (tapiLspBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    configRule_ = value;
+                    onChanged();
+                } else {
+                    tapiLspBuilder_.setMessage(value);
+                }
+                configRuleCase_ = 5;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            public Builder setTapiLsp(context.ContextOuterClass.ConfigRule_TAPI_LSP.Builder builderForValue) {
+                if (tapiLspBuilder_ == null) {
+                    configRule_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    tapiLspBuilder_.setMessage(builderForValue.build());
+                }
+                configRuleCase_ = 5;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            public Builder mergeTapiLsp(context.ContextOuterClass.ConfigRule_TAPI_LSP value) {
+                if (tapiLspBuilder_ == null) {
+                    if (configRuleCase_ == 5 && configRule_ != context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance()) {
+                        configRule_ = context.ContextOuterClass.ConfigRule_TAPI_LSP.newBuilder((context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_).mergeFrom(value).buildPartial();
+                    } else {
+                        configRule_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (configRuleCase_ == 5) {
+                        tapiLspBuilder_.mergeFrom(value);
+                    } else {
+                        tapiLspBuilder_.setMessage(value);
+                    }
+                }
+                configRuleCase_ = 5;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            public Builder clearTapiLsp() {
+                if (tapiLspBuilder_ == null) {
+                    if (configRuleCase_ == 5) {
+                        configRuleCase_ = 0;
+                        configRule_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (configRuleCase_ == 5) {
+                        configRuleCase_ = 0;
+                        configRule_ = null;
+                    }
+                    tapiLspBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            public context.ContextOuterClass.ConfigRule_TAPI_LSP.Builder getTapiLspBuilder() {
+                return getTapiLspFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_TAPI_LSPOrBuilder getTapiLspOrBuilder() {
+                if ((configRuleCase_ == 5) && (tapiLspBuilder_ != null)) {
+                    return tapiLspBuilder_.getMessageOrBuilder();
+                } else {
+                    if (configRuleCase_ == 5) {
+                        return (context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_;
+                    }
+                    return context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+                }
+            }
+
+            /**
+             * .context.ConfigRule_TAPI_LSP tapi_lsp = 5;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getTapiLspFieldBuilder() {
+                if (tapiLspBuilder_ == null) {
+                    if (!(configRuleCase_ == 5)) {
+                        configRule_ = context.ContextOuterClass.ConfigRule_TAPI_LSP.getDefaultInstance();
+                    }
+                    tapiLspBuilder_ = new com.google.protobuf.SingleFieldBuilderV3((context.ContextOuterClass.ConfigRule_TAPI_LSP) configRule_, getParentForChildren(), isClean());
+                    configRule_ = null;
+                }
+                configRuleCase_ = 5;
+                onChanged();
+                return tapiLspBuilder_;
+            }
+
+            private com.google.protobuf.SingleFieldBuilderV3 ipowdmBuilder_;
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             * @return Whether the ipowdm field is set.
+             */
+            @java.lang.Override
+            public boolean hasIpowdm() {
+                return configRuleCase_ == 6;
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             * @return The ipowdm.
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_IPOWDM getIpowdm() {
+                if (ipowdmBuilder_ == null) {
+                    if (configRuleCase_ == 6) {
+                        return (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_;
+                    }
+                    return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+                } else {
+                    if (configRuleCase_ == 6) {
+                        return ipowdmBuilder_.getMessage();
+                    }
+                    return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+                }
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            public Builder setIpowdm(context.ContextOuterClass.ConfigRule_IPOWDM value) {
+                if (ipowdmBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    configRule_ = value;
+                    onChanged();
+                } else {
+                    ipowdmBuilder_.setMessage(value);
+                }
+                configRuleCase_ = 6;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            public Builder setIpowdm(context.ContextOuterClass.ConfigRule_IPOWDM.Builder builderForValue) {
+                if (ipowdmBuilder_ == null) {
+                    configRule_ = builderForValue.build();
+                    onChanged();
+                } else {
+                    ipowdmBuilder_.setMessage(builderForValue.build());
+                }
+                configRuleCase_ = 6;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            public Builder mergeIpowdm(context.ContextOuterClass.ConfigRule_IPOWDM value) {
+                if (ipowdmBuilder_ == null) {
+                    if (configRuleCase_ == 6 && configRule_ != context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance()) {
+                        configRule_ = context.ContextOuterClass.ConfigRule_IPOWDM.newBuilder((context.ContextOuterClass.ConfigRule_IPOWDM) configRule_).mergeFrom(value).buildPartial();
+                    } else {
+                        configRule_ = value;
+                    }
+                    onChanged();
+                } else {
+                    if (configRuleCase_ == 6) {
+                        ipowdmBuilder_.mergeFrom(value);
+                    } else {
+                        ipowdmBuilder_.setMessage(value);
+                    }
+                }
+                configRuleCase_ = 6;
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            public Builder clearIpowdm() {
+                if (ipowdmBuilder_ == null) {
+                    if (configRuleCase_ == 6) {
+                        configRuleCase_ = 0;
+                        configRule_ = null;
+                        onChanged();
+                    }
+                } else {
+                    if (configRuleCase_ == 6) {
+                        configRuleCase_ = 0;
+                        configRule_ = null;
+                    }
+                    ipowdmBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            public context.ContextOuterClass.ConfigRule_IPOWDM.Builder getIpowdmBuilder() {
+                return getIpowdmFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            @java.lang.Override
+            public context.ContextOuterClass.ConfigRule_IPOWDMOrBuilder getIpowdmOrBuilder() {
+                if ((configRuleCase_ == 6) && (ipowdmBuilder_ != null)) {
+                    return ipowdmBuilder_.getMessageOrBuilder();
+                } else {
+                    if (configRuleCase_ == 6) {
+                        return (context.ContextOuterClass.ConfigRule_IPOWDM) configRule_;
+                    }
+                    return context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+                }
+            }
+
+            /**
+             * .context.ConfigRule_IPOWDM ipowdm = 6;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getIpowdmFieldBuilder() {
+                if (ipowdmBuilder_ == null) {
+                    if (!(configRuleCase_ == 6)) {
+                        configRule_ = context.ContextOuterClass.ConfigRule_IPOWDM.getDefaultInstance();
+                    }
+                    ipowdmBuilder_ = new com.google.protobuf.SingleFieldBuilderV3((context.ContextOuterClass.ConfigRule_IPOWDM) configRule_, getParentForChildren(), isClean());
+                    configRule_ = null;
+                }
+                configRuleCase_ = 6;
+                onChanged();
+                return ipowdmBuilder_;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
                 return super.setUnknownFields(unknownFields);
@@ -87855,6 +90230,14 @@ public final class ContextOuterClass {
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConfigRule_ACL_fieldAccessorTable;
 
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConfigRule_IPOWDM_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConfigRule_IPOWDM_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConfigRule_TAPI_LSP_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConfigRule_TAPI_LSP_fieldAccessorTable;
+
     private static final com.google.protobuf.Descriptors.Descriptor internal_static_context_ConfigRule_IP_LINK_descriptor;
 
     private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_context_ConfigRule_IP_LINK_fieldAccessorTable;
@@ -87998,8 +90381,8 @@ public final class ContextOuterClass {
     private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
 
     static {
-        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\031google/protobu" + "f/any.proto\032\tacl.proto\032\rip_link.proto\032\026k" + "pi_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014" + "\n\004uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001" + " \001(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.conte" + "xt.Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.conte" + "xt.EventTypeEnum\"\265\002\n\010AnyEvent\022(\n\007context" + "\030\001 \001(\0132\025.context.ContextEventH\000\022*\n\010topol" + "ogy\030\002 \001(\0132\026.context.TopologyEventH\000\022&\n\006d" + "evice\030\003 \001(\0132\024.context.DeviceEventH\000\022\"\n\004l" + "ink\030\004 \001(\0132\022.context.LinkEventH\000\022(\n\007servi" + "ce\030\005 \001(\0132\025.context.ServiceEventH\000\022$\n\005sli" + "ce\030\006 \001(\0132\023.context.SliceEventH\000\022.\n\nconne" + "ction\030\007 \001(\0132\030.context.ConnectionEventH\000B" + "\007\n\005event\"0\n\tContextId\022#\n\014context_uuid\030\001 " + "\001(\0132\r.context.Uuid\"\351\001\n\007Context\022&\n\ncontex" + "t_id\030\001 \001(\0132\022.context.ContextId\022\014\n\004name\030\002" + " \001(\t\022)\n\014topology_ids\030\003 \003(\0132\023.context.Top" + "ologyId\022\'\n\013service_ids\030\004 \003(\0132\022.context.S" + "erviceId\022#\n\tslice_ids\030\005 \003(\0132\020.context.Sl" + "iceId\022/\n\ncontroller\030\006 \001(\0132\033.context.Tera" + "FlowController\"8\n\rContextIdList\022\'\n\013conte" + "xt_ids\030\001 \003(\0132\022.context.ContextId\"1\n\013Cont" + "extList\022\"\n\010contexts\030\001 \003(\0132\020.context.Cont" + "ext\"U\n\014ContextEvent\022\035\n\005event\030\001 \001(\0132\016.con" + "text.Event\022&\n\ncontext_id\030\002 \001(\0132\022.context" + ".ContextId\"Z\n\nTopologyId\022&\n\ncontext_id\030\001" + " \001(\0132\022.context.ContextId\022$\n\rtopology_uui" + "d\030\002 \001(\0132\r.context.Uuid\"\267\001\n\010Topology\022(\n\013t" + "opology_id\030\001 \001(\0132\023.context.TopologyId\022\014\n" + "\004name\030\002 \001(\t\022%\n\ndevice_ids\030\003 \003(\0132\021.contex" + "t.DeviceId\022!\n\010link_ids\030\004 \003(\0132\017.context.L" + "inkId\022)\n\020optical_link_ids\030\005 \003(\0132\017.contex" + "t.LinkId\"\266\001\n\017TopologyDetails\022(\n\013topology" + "_id\030\001 \001(\0132\023.context.TopologyId\022\014\n\004name\030\002" + " \001(\t\022 \n\007devices\030\003 \003(\0132\017.context.Device\022\034" + "\n\005links\030\004 \003(\0132\r.context.Link\022+\n\roptical_" + "links\030\005 \003(\0132\024.context.OpticalLink\";\n\016Top" + "ologyIdList\022)\n\014topology_ids\030\001 \003(\0132\023.cont" + "ext.TopologyId\"5\n\014TopologyList\022%\n\ntopolo" + "gies\030\001 \003(\0132\021.context.Topology\"X\n\rTopolog" + "yEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022(\n" + "\013topology_id\030\002 \001(\0132\023.context.TopologyId\"" + ".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(\0132\r.conte" + "xt.Uuid\"\372\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021." + "context.DeviceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device" + "_type\030\003 \001(\t\022,\n\rdevice_config\030\004 \001(\0132\025.con" + "text.DeviceConfig\022G\n\031device_operational_" + "status\030\005 \001(\0162$.context.DeviceOperational" + "StatusEnum\0221\n\016device_drivers\030\006 \003(\0162\031.con" + "text.DeviceDriverEnum\022+\n\020device_endpoint" + "s\030\007 \003(\0132\021.context.EndPoint\022&\n\ncomponents" + "\030\010 \003(\0132\022.context.Component\022(\n\rcontroller" + "_id\030\t \001(\0132\021.context.DeviceId\"\311\001\n\tCompone" + "nt\022%\n\016component_uuid\030\001 \001(\0132\r.context.Uui" + "d\022\014\n\004name\030\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattribu" + "tes\030\004 \003(\0132\".context.Component.Attributes" + "Entry\022\016\n\006parent\030\005 \001(\t\0321\n\017AttributesEntry" + "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014Devi" + "ceConfig\022)\n\014config_rules\030\001 \003(\0132\023.context" + ".ConfigRule\"5\n\014DeviceIdList\022%\n\ndevice_id" + "s\030\001 \003(\0132\021.context.DeviceId\".\n\nDeviceList" + "\022 \n\007devices\030\001 \003(\0132\017.context.Device\"\216\001\n\014D" + "eviceFilter\022)\n\ndevice_ids\030\001 \001(\0132\025.contex" + "t.DeviceIdList\022\031\n\021include_endpoints\030\002 \001(" + "\010\022\034\n\024include_config_rules\030\003 \001(\010\022\032\n\022inclu" + "de_components\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005e" + "vent\030\001 \001(\0132\016.context.Event\022$\n\tdevice_id\030" + "\002 \001(\0132\021.context.DeviceId\022,\n\rdevice_confi" + "g\030\003 \001(\0132\025.context.DeviceConfig\"*\n\006LinkId" + "\022 \n\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"c\n\016Li" + "nkAttributes\022\030\n\020is_bidirectional\030\001 \001(\010\022\033" + "\n\023total_capacity_gbps\030\002 \001(\002\022\032\n\022used_capa" + "city_gbps\030\003 \001(\002\"\275\001\n\004Link\022 \n\007link_id\030\001 \001(" + "\0132\017.context.LinkId\022\014\n\004name\030\002 \001(\t\022(\n\tlink" + "_type\030\003 \001(\0162\025.context.LinkTypeEnum\022.\n\021li" + "nk_endpoint_ids\030\004 \003(\0132\023.context.EndPoint" + "Id\022+\n\nattributes\030\005 \001(\0132\027.context.LinkAtt" + "ributes\"/\n\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132" + "\017.context.LinkId\"(\n\010LinkList\022\034\n\005links\030\001 " + "\003(\0132\r.context.Link\"L\n\tLinkEvent\022\035\n\005event" + "\030\001 \001(\0132\016.context.Event\022 \n\007link_id\030\002 \001(\0132" + "\017.context.LinkId\"X\n\tServiceId\022&\n\ncontext" + "_id\030\001 \001(\0132\022.context.ContextId\022#\n\014service" + "_uuid\030\002 \001(\0132\r.context.Uuid\"\333\002\n\007Service\022&" + "\n\nservice_id\030\001 \001(\0132\022.context.ServiceId\022\014" + "\n\004name\030\002 \001(\t\022.\n\014service_type\030\003 \001(\0162\030.con" + "text.ServiceTypeEnum\0221\n\024service_endpoint" + "_ids\030\004 \003(\0132\023.context.EndPointId\0220\n\023servi" + "ce_constraints\030\005 \003(\0132\023.context.Constrain" + "t\022.\n\016service_status\030\006 \001(\0132\026.context.Serv" + "iceStatus\022.\n\016service_config\030\007 \001(\0132\026.cont" + "ext.ServiceConfig\022%\n\ttimestamp\030\010 \001(\0132\022.c" + "ontext.Timestamp\"C\n\rServiceStatus\0222\n\016ser" + "vice_status\030\001 \001(\0162\032.context.ServiceStatu" + "sEnum\":\n\rServiceConfig\022)\n\014config_rules\030\001" + " \003(\0132\023.context.ConfigRule\"8\n\rServiceIdLi" + "st\022\'\n\013service_ids\030\001 \003(\0132\022.context.Servic" + "eId\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132\020.c" + "ontext.Service\"\225\001\n\rServiceFilter\022+\n\013serv" + "ice_ids\030\001 \001(\0132\026.context.ServiceIdList\022\034\n" + "\024include_endpoint_ids\030\002 \001(\010\022\033\n\023include_c" + "onstraints\030\003 \001(\010\022\034\n\024include_config_rules" + "\030\004 \001(\010\"U\n\014ServiceEvent\022\035\n\005event\030\001 \001(\0132\016." + "context.Event\022&\n\nservice_id\030\002 \001(\0132\022.cont" + "ext.ServiceId\"T\n\007SliceId\022&\n\ncontext_id\030\001" + " \001(\0132\022.context.ContextId\022!\n\nslice_uuid\030\002" + " \001(\0132\r.context.Uuid\"\240\003\n\005Slice\022\"\n\010slice_i" + "d\030\001 \001(\0132\020.context.SliceId\022\014\n\004name\030\002 \001(\t\022" + "/\n\022slice_endpoint_ids\030\003 \003(\0132\023.context.En" + "dPointId\022.\n\021slice_constraints\030\004 \003(\0132\023.co" + "ntext.Constraint\022-\n\021slice_service_ids\030\005 " + "\003(\0132\022.context.ServiceId\022,\n\022slice_subslic" + "e_ids\030\006 \003(\0132\020.context.SliceId\022*\n\014slice_s" + "tatus\030\007 \001(\0132\024.context.SliceStatus\022*\n\014sli" + "ce_config\030\010 \001(\0132\024.context.SliceConfig\022(\n" + "\013slice_owner\030\t \001(\0132\023.context.SliceOwner\022" + "%\n\ttimestamp\030\n \001(\0132\022.context.Timestamp\"E" + "\n\nSliceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.conte" + "xt.Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceSt" + "atus\022.\n\014slice_status\030\001 \001(\0162\030.context.Sli" + "ceStatusEnum\"8\n\013SliceConfig\022)\n\014config_ru" + "les\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceI" + "dList\022#\n\tslice_ids\030\001 \003(\0132\020.context.Slice" + "Id\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.contex" + "t.Slice\"\312\001\n\013SliceFilter\022\'\n\tslice_ids\030\001 \001" + "(\0132\024.context.SliceIdList\022\034\n\024include_endp" + "oint_ids\030\002 \001(\010\022\033\n\023include_constraints\030\003 " + "\001(\010\022\033\n\023include_service_ids\030\004 \001(\010\022\034\n\024incl" + "ude_subslice_ids\030\005 \001(\010\022\034\n\024include_config" + "_rules\030\006 \001(\010\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(" + "\0132\016.context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.co" + "ntext.SliceId\"6\n\014ConnectionId\022&\n\017connect" + "ion_uuid\030\001 \001(\0132\r.context.Uuid\"2\n\025Connect" + "ionSettings_L0\022\031\n\021lsp_symbolic_name\030\001 \001(" + "\t\"\236\001\n\025ConnectionSettings_L2\022\027\n\017src_mac_a" + "ddress\030\001 \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n" + "\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmp" + "ls_label\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001" + "(\r\"t\n\025ConnectionSettings_L3\022\026\n\016src_ip_ad" + "dress\030\001 \001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004d" + "scp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r" + "\"[\n\025ConnectionSettings_L4\022\020\n\010src_port\030\001 " + "\001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r" + "\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002" + "l0\030\001 \001(\0132\036.context.ConnectionSettings_L0" + "\022*\n\002l2\030\002 \001(\0132\036.context.ConnectionSetting" + "s_L2\022*\n\002l3\030\003 \001(\0132\036.context.ConnectionSet" + "tings_L3\022*\n\002l4\030\004 \001(\0132\036.context.Connectio" + "nSettings_L4\"\363\001\n\nConnection\022,\n\rconnectio" + "n_id\030\001 \001(\0132\025.context.ConnectionId\022&\n\nser" + "vice_id\030\002 \001(\0132\022.context.ServiceId\0223\n\026pat" + "h_hops_endpoint_ids\030\003 \003(\0132\023.context.EndP" + "ointId\022+\n\017sub_service_ids\030\004 \003(\0132\022.contex" + "t.ServiceId\022-\n\010settings\030\005 \001(\0132\033.context." + "ConnectionSettings\"A\n\020ConnectionIdList\022-" + "\n\016connection_ids\030\001 \003(\0132\025.context.Connect" + "ionId\":\n\016ConnectionList\022(\n\013connections\030\001" + " \003(\0132\023.context.Connection\"^\n\017ConnectionE" + "vent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022,\n\rc" + "onnection_id\030\002 \001(\0132\025.context.ConnectionI" + "d\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 \001(\0132\023." + "context.TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021." + "context.DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132" + "\r.context.Uuid\"\310\002\n\010EndPoint\022(\n\013endpoint_" + "id\030\001 \001(\0132\023.context.EndPointId\022\014\n\004name\030\002 " + "\001(\t\022\025\n\rendpoint_type\030\003 \001(\t\0229\n\020kpi_sample" + "_types\030\004 \003(\0162\037.kpi_sample_types.KpiSampl" + "eType\022,\n\021endpoint_location\030\005 \001(\0132\021.conte" + "xt.Location\0229\n\014capabilities\030\006 \003(\0132#.cont" + "ext.EndPoint.CapabilitiesEntry\032I\n\021Capabi" + "litiesEntry\022\013\n\003key\030\001 \001(\t\022#\n\005value\030\002 \001(\0132" + "\024.google.protobuf.Any:\0028\001\"{\n\014EndPointNam" + "e\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPoin" + "tId\022\023\n\013device_name\030\002 \001(\t\022\025\n\rendpoint_nam" + "e\030\003 \001(\t\022\025\n\rendpoint_type\030\004 \001(\t\";\n\016EndPoi" + "ntIdList\022)\n\014endpoint_ids\030\001 \003(\0132\023.context" + ".EndPointId\"A\n\020EndPointNameList\022-\n\016endpo" + "int_names\030\001 \003(\0132\025.context.EndPointName\"A" + "\n\021ConfigRule_Custom\022\024\n\014resource_key\030\001 \001(" + "\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016ConfigRule_" + "ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPo" + "intId\022!\n\010rule_set\030\002 \001(\0132\017.acl.AclRuleSet" + "\"h\n\022ConfigRule_IP_LINK\022(\n\013endpoint_id\030\001 " + "\001(\0132\023.context.EndPointId\022(\n\010rule_set\030\002 \001" + "(\0132\026.ip_link.IpLinkRuleSet\"\314\001\n\nConfigRul" + "e\022)\n\006action\030\001 \001(\0162\031.context.ConfigAction" + "Enum\022,\n\006custom\030\002 \001(\0132\032.context.ConfigRul" + "e_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.Config" + "Rule_ACLH\000\022.\n\007ip_link\030\004 \001(\0132\033.context.Co" + "nfigRule_IP_LINKH\000B\r\n\013config_rule\"F\n\021Con" + "straint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022" + "\030\n\020constraint_value\030\002 \001(\t\"E\n\023Constraint_" + "Schedule\022\027\n\017start_timestamp\030\001 \001(\001\022\025\n\rdur" + "ation_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010lati" + "tude\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"\204\001\n\010Locati" + "on\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001" + "(\0132\025.context.GPS_PositionH\000\022\023\n\tinterface" + "\030\003 \001(\tH\000\022\026\n\014circuit_pack\030\004 \001(\tH\000B\n\n\010loca" + "tion\"l\n\033Constraint_EndPointLocation\022(\n\013e" + "ndpoint_id\030\001 \001(\0132\023.context.EndPointId\022#\n" + "\010location\030\002 \001(\0132\021.context.Location\"Y\n\033Co" + "nstraint_EndPointPriority\022(\n\013endpoint_id" + "\030\001 \001(\0132\023.context.EndPointId\022\020\n\010priority\030" + "\002 \001(\r\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_l" + "atency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capaci" + "ty\022\025\n\rcapacity_gbps\030\001 \001(\002\"c\n\033Constraint_" + "SLA_Availability\022\032\n\022num_disjoint_paths\030\001" + " \001(\r\022\022\n\nall_active\030\002 \001(\010\022\024\n\014availability" + "\030\003 \001(\002\"V\n\036Constraint_SLA_Isolation_level" + "\0224\n\017isolation_level\030\001 \003(\0162\033.context.Isol" + "ationLevelEnum\"\242\001\n\025Constraint_Exclusions" + "\022\024\n\014is_permanent\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003" + "(\0132\021.context.DeviceId\022)\n\014endpoint_ids\030\003 " + "\003(\0132\023.context.EndPointId\022!\n\010link_ids\030\004 \003" + "(\0132\017.context.LinkId\"5\n\014QoSProfileId\022%\n\016q" + "os_profile_id\030\001 \001(\0132\r.context.Uuid\"`\n\025Co" + "nstraint_QoSProfile\022-\n\016qos_profile_id\030\001 " + "\001(\0132\025.context.QoSProfileId\022\030\n\020qos_profil" + "e_name\030\002 \001(\t\"\222\005\n\nConstraint\022-\n\006action\030\001 " + "\001(\0162\035.context.ConstraintActionEnum\022,\n\006cu" + "stom\030\002 \001(\0132\032.context.Constraint_CustomH\000" + "\0220\n\010schedule\030\003 \001(\0132\034.context.Constraint_" + "ScheduleH\000\022A\n\021endpoint_location\030\004 \001(\0132$." + "context.Constraint_EndPointLocationH\000\022A\n" + "\021endpoint_priority\030\005 \001(\0132$.context.Const" + "raint_EndPointPriorityH\000\0228\n\014sla_capacity" + "\030\006 \001(\0132 .context.Constraint_SLA_Capacity" + "H\000\0226\n\013sla_latency\030\007 \001(\0132\037.context.Constr" + "aint_SLA_LatencyH\000\022@\n\020sla_availability\030\010" + " \001(\0132$.context.Constraint_SLA_Availabili" + "tyH\000\022@\n\rsla_isolation\030\t \001(\0132\'.context.Co" + "nstraint_SLA_Isolation_levelH\000\0224\n\nexclus" + "ions\030\n \001(\0132\036.context.Constraint_Exclusio" + "nsH\000\0225\n\013qos_profile\030\013 \001(\0132\036.context.Cons" + "traint_QoSProfileH\000B\014\n\nconstraint\"^\n\022Ter" + "aFlowController\022&\n\ncontext_id\030\001 \001(\0132\022.co" + "ntext.ContextId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004p" + "ort\030\003 \001(\r\"U\n\024AuthenticationResult\022&\n\ncon" + "text_id\030\001 \001(\0132\022.context.ContextId\022\025\n\raut" + "henticated\030\002 \001(\010\"-\n\017OpticalConfigId\022\032\n\022o" + "pticalconfig_uuid\030\001 \001(\t\"y\n\rOpticalConfig" + "\0222\n\020opticalconfig_id\030\001 \001(\0132\030.context.Opt" + "icalConfigId\022\016\n\006config\030\002 \001(\t\022$\n\tdevice_i" + "d\030\003 \001(\0132\021.context.DeviceId\"C\n\021OpticalCon" + "figList\022.\n\016opticalconfigs\030\001 \003(\0132\026.contex" + "t.OpticalConfig\"g\n\022OpticalConfigEvent\022\035\n" + "\005event\030\001 \001(\0132\016.context.Event\0222\n\020opticalc" + "onfig_id\030\002 \001(\0132\030.context.OpticalConfigId" + "\"_\n\021OpticalEndPointId\022$\n\tdevice_id\030\002 \001(\013" + "2\021.context.DeviceId\022$\n\rendpoint_uuid\030\003 \001" + "(\0132\r.context.Uuid\">\n\017OpticalLinkList\022+\n\r" + "optical_links\030\001 \003(\0132\024.context.OpticalLin" + "k\"\304\003\n\022OpticalLinkDetails\022\016\n\006length\030\001 \001(\002" + "\022\020\n\010src_port\030\002 \001(\t\022\020\n\010dst_port\030\003 \001(\t\022\027\n\017" + "local_peer_port\030\004 \001(\t\022\030\n\020remote_peer_por" + "t\030\005 \001(\t\022\014\n\004used\030\006 \001(\010\0228\n\007c_slots\030\007 \003(\0132\'" + ".context.OpticalLinkDetails.CSlotsEntry\022" + "8\n\007l_slots\030\010 \003(\0132\'.context.OpticalLinkDe" + "tails.LSlotsEntry\0228\n\007s_slots\030\t \003(\0132\'.con" + "text.OpticalLinkDetails.SSlotsEntry\032-\n\013C" + "SlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\002" + "8\001\032-\n\013LSlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030" + "\002 \001(\005:\0028\001\032-\n\013SSlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n" + "\005value\030\002 \001(\005:\0028\001\"\243\001\n\013OpticalLink\022\014\n\004name" + "\030\001 \001(\t\0224\n\017optical_details\030\002 \001(\0132\033.contex" + "t.OpticalLinkDetails\022 \n\007link_id\030\003 \001(\0132\017." + "context.LinkId\022.\n\021link_endpoint_ids\030\004 \003(" + "\0132\023.context.EndPointId\"0\n\tChannelId\022#\n\014c" + "hannel_uuid\030\001 \001(\0132\r.context.Uuid\"8\n\rOpti" + "calBandId\022\'\n\020opticalband_uuid\030\001 \001(\0132\r.co" + "ntext.Uuid\"\247\002\n\013OpticalBand\022.\n\016opticalban" + "d_id\030\001 \001(\0132\026.context.OpticalBandId\022,\n\rco" + "nnection_id\030\002 \001(\0132\025.context.ConnectionId" + "\022&\n\nchannel_id\030\003 \001(\0132\022.context.ChannelId" + "\022&\n\nservice_id\030\004 \001(\0132\022.context.ServiceId" + "\022#\n\007service\030\005 \001(\0132\020.context.ServiceH\000\022)\n" + "\nconnection\030\006 \001(\0132\023.context.ConnectionH\000" + "\022\021\n\007channel\030\007 \001(\tH\000B\007\n\005field\"=\n\017OpticalB" + "andList\022*\n\014opticalbands\030\001 \003(\0132\024.context." + "OpticalBand\"r\n\021ServiceConfigRule\022&\n\nserv" + "ice_id\030\001 \001(\0132\022.context.ServiceId\0225\n\021conf" + "igrule_custom\030\002 \001(\0132\032.context.ConfigRule" + "_Custom*j\n\rEventTypeEnum\022\027\n\023EVENTTYPE_UN" + "DEFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020EVENT" + "TYPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*\333\004\n\020" + "DeviceDriverEnum\022\032\n\026DEVICEDRIVER_UNDEFIN" + "ED\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n\032DEV" + "ICEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICEDRIVE" + "R_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_TOPO" + "LOGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_532\020\005\022\023\n\017D" + "EVICEDRIVER_XR\020\006\022\033\n\027DEVICEDRIVER_IETF_L2" + "VPN\020\007\022 \n\034DEVICEDRIVER_GNMI_OPENCONFIG\020\010\022" + "\034\n\030DEVICEDRIVER_OPTICAL_TFS\020\t\022\032\n\026DEVICED" + "RIVER_IETF_ACTN\020\n\022\023\n\017DEVICEDRIVER_OC\020\013\022\024" + "\n\020DEVICEDRIVER_QKD\020\014\022\033\n\027DEVICEDRIVER_IET" + "F_L3VPN\020\r\022\033\n\027DEVICEDRIVER_IETF_SLICE\020\016\022\024" + "\n\020DEVICEDRIVER_NCE\020\017\022\031\n\025DEVICEDRIVER_SMA" + "RTNIC\020\020\022\031\n\025DEVICEDRIVER_MORPHEUS\020\021\022\024\n\020DE" + "VICEDRIVER_RYU\020\022\022#\n\037DEVICEDRIVER_GNMI_NO" + "KIA_SRLINUX\020\023\022\032\n\026DEVICEDRIVER_OPENROADM\020" + "\024*\217\001\n\033DeviceOperationalStatusEnum\022%\n!DEV" + "ICEOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DEVI" + "CEOPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICE" + "OPERATIONALSTATUS_ENABLED\020\002*\245\001\n\014LinkType" + "Enum\022\024\n\020LINKTYPE_UNKNOWN\020\000\022\023\n\017LINKTYPE_C" + "OPPER\020\001\022\022\n\016LINKTYPE_FIBER\020\002\022\022\n\016LINKTYPE_" + "RADIO\020\003\022\024\n\020LINKTYPE_VIRTUAL\020\004\022\027\n\023LINKTYP" + "E_MANAGEMENT\020\005\022\023\n\017LINKTYPE_REMOTE\020\006*\276\002\n\017" + "ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000" + "\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2" + "NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVITY_SE" + "RVICE\020\003\022\022\n\016SERVICETYPE_TE\020\004\022\023\n\017SERVICETY" + "PE_E2E\020\005\022$\n SERVICETYPE_OPTICAL_CONNECTI" + "VITY\020\006\022\023\n\017SERVICETYPE_QKD\020\007\022\024\n\020SERVICETY" + "PE_L1NM\020\010\022\023\n\017SERVICETYPE_INT\020\t\022\023\n\017SERVIC" + "ETYPE_ACL\020\n\022\027\n\023SERVICETYPE_IP_LINK\020\013*\304\001\n" + "\021ServiceStatusEnum\022\033\n\027SERVICESTATUS_UNDE" + "FINED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024SE" + "RVICESTATUS_ACTIVE\020\002\022\032\n\026SERVICESTATUS_UP" + "DATING\020\003\022!\n\035SERVICESTATUS_PENDING_REMOVA" + "L\020\004\022\036\n\032SERVICESTATUS_SLA_VIOLATED\020\005*\251\001\n\017" + "SliceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED" + "\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTAT" + "US_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLI" + "CESTATUS_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIO" + "LATED\020\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACT" + "ION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n" + "\023CONFIGACTION_DELETE\020\002*m\n\024ConstraintActi" + "onEnum\022\036\n\032CONSTRAINTACTION_UNDEFINED\020\000\022\030" + "\n\024CONSTRAINTACTION_SET\020\001\022\033\n\027CONSTRAINTAC" + "TION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020\n\014" + "NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001\022\025" + "\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLATI" + "ON\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n\032P" + "HYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL_R" + "ESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIONS" + "_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\274\035\n\016" + "ContextService\022:\n\016ListContextIds\022\016.conte" + "xt.Empty\032\026.context.ContextIdList\"\000\0226\n\014Li" + "stContexts\022\016.context.Empty\032\024.context.Con" + "textList\"\000\0224\n\nGetContext\022\022.context.Conte" + "xtId\032\020.context.Context\"\000\0224\n\nSetContext\022\020" + ".context.Context\032\022.context.ContextId\"\000\0225" + "\n\rRemoveContext\022\022.context.ContextId\032\016.co" + "ntext.Empty\"\000\022=\n\020GetContextEvents\022\016.cont" + "ext.Empty\032\025.context.ContextEvent\"\0000\001\022@\n\017" + "ListTopologyIds\022\022.context.ContextId\032\027.co" + "ntext.TopologyIdList\"\000\022=\n\016ListTopologies" + "\022\022.context.ContextId\032\025.context.TopologyL" + "ist\"\000\0227\n\013GetTopology\022\023.context.TopologyI" + "d\032\021.context.Topology\"\000\022E\n\022GetTopologyDet" + "ails\022\023.context.TopologyId\032\030.context.Topo" + "logyDetails\"\000\0227\n\013SetTopology\022\021.context.T" + "opology\032\023.context.TopologyId\"\000\0227\n\016Remove" + "Topology\022\023.context.TopologyId\032\016.context." + "Empty\"\000\022?\n\021GetTopologyEvents\022\016.context.E" + "mpty\032\026.context.TopologyEvent\"\0000\001\0228\n\rList" + "DeviceIds\022\016.context.Empty\032\025.context.Devi" + "ceIdList\"\000\0224\n\013ListDevices\022\016.context.Empt" + "y\032\023.context.DeviceList\"\000\0221\n\tGetDevice\022\021." + "context.DeviceId\032\017.context.Device\"\000\0221\n\tS" + "etDevice\022\017.context.Device\032\021.context.Devi" + "ceId\"\000\0223\n\014RemoveDevice\022\021.context.DeviceI" + "d\032\016.context.Empty\"\000\022;\n\017GetDeviceEvents\022\016" + ".context.Empty\032\024.context.DeviceEvent\"\0000\001" + "\022<\n\014SelectDevice\022\025.context.DeviceFilter\032" + "\023.context.DeviceList\"\000\022I\n\021ListEndPointNa" + "mes\022\027.context.EndPointIdList\032\031.context.E" + "ndPointNameList\"\000\0224\n\013ListLinkIds\022\016.conte" + "xt.Empty\032\023.context.LinkIdList\"\000\0220\n\tListL" + "inks\022\016.context.Empty\032\021.context.LinkList\"" + "\000\022+\n\007GetLink\022\017.context.LinkId\032\r.context." + "Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.conte" + "xt.LinkId\"\000\022/\n\nRemoveLink\022\017.context.Link" + "Id\032\016.context.Empty\"\000\0227\n\rGetLinkEvents\022\016." + "context.Empty\032\022.context.LinkEvent\"\0000\001\022>\n" + "\016ListServiceIds\022\022.context.ContextId\032\026.co" + "ntext.ServiceIdList\"\000\022:\n\014ListServices\022\022." + "context.ContextId\032\024.context.ServiceList\"" + "\000\0224\n\nGetService\022\022.context.ServiceId\032\020.co" + "ntext.Service\"\000\0224\n\nSetService\022\020.context." + "Service\032\022.context.ServiceId\"\000\0226\n\014UnsetSe" + "rvice\022\020.context.Service\032\022.context.Servic" + "eId\"\000\0225\n\rRemoveService\022\022.context.Service" + "Id\032\016.context.Empty\"\000\022=\n\020GetServiceEvents" + "\022\016.context.Empty\032\025.context.ServiceEvent\"" + "\0000\001\022?\n\rSelectService\022\026.context.ServiceFi" + "lter\032\024.context.ServiceList\"\000\022:\n\014ListSlic" + "eIds\022\022.context.ContextId\032\024.context.Slice" + "IdList\"\000\0226\n\nListSlices\022\022.context.Context" + "Id\032\022.context.SliceList\"\000\022.\n\010GetSlice\022\020.c" + "ontext.SliceId\032\016.context.Slice\"\000\022.\n\010SetS" + "lice\022\016.context.Slice\032\020.context.SliceId\"\000" + "\0220\n\nUnsetSlice\022\016.context.Slice\032\020.context" + ".SliceId\"\000\0221\n\013RemoveSlice\022\020.context.Slic" + "eId\032\016.context.Empty\"\000\0229\n\016GetSliceEvents\022" + "\016.context.Empty\032\023.context.SliceEvent\"\0000\001" + "\0229\n\013SelectSlice\022\024.context.SliceFilter\032\022." + "context.SliceList\"\000\022D\n\021ListConnectionIds", "\022\022.context.ServiceId\032\031.context.Connectio" + "nIdList\"\000\022@\n\017ListConnections\022\022.context.S" + "erviceId\032\027.context.ConnectionList\"\000\022=\n\rG" + "etConnection\022\025.context.ConnectionId\032\023.co" + "ntext.Connection\"\000\022=\n\rSetConnection\022\023.co" + "ntext.Connection\032\025.context.ConnectionId\"" + "\000\022;\n\020RemoveConnection\022\025.context.Connecti" + "onId\032\016.context.Empty\"\000\022C\n\023GetConnectionE" + "vents\022\016.context.Empty\032\030.context.Connecti" + "onEvent\"\0000\001\0225\n\014GetAllEvents\022\016.context.Em" + "pty\032\021.context.AnyEvent\"\0000\001\022@\n\020GetOptical" + "Config\022\016.context.Empty\032\032.context.Optical" + "ConfigList\"\000\022F\n\020SetOpticalConfig\022\026.conte" + "xt.OpticalConfig\032\030.context.OpticalConfig" + "Id\"\000\022I\n\023UpdateOpticalConfig\022\026.context.Op" + "ticalConfig\032\030.context.OpticalConfigId\"\000\022" + "I\n\023SelectOpticalConfig\022\030.context.Optical" + "ConfigId\032\026.context.OpticalConfig\"\000\022A\n\023De" + "leteOpticalConfig\022\030.context.OpticalConfi" + "gId\032\016.context.Empty\"\000\022@\n\024DeleteOpticalCh" + "annel\022\026.context.OpticalConfig\032\016.context." + "Empty\"\000\0228\n\016SetOpticalLink\022\024.context.Opti" + "calLink\032\016.context.Empty\"\000\0229\n\016GetOpticalL" + "ink\022\017.context.LinkId\032\024.context.OpticalLi" + "nk\"\000\0226\n\021DeleteOpticalLink\022\017.context.Link" + "Id\032\016.context.Empty\"\000\022@\n\022GetOpticalLinkLi" + "st\022\016.context.Empty\032\030.context.OpticalLink" + "List\"\000\022<\n\016GetOpticalBand\022\016.context.Empty" + "\032\030.context.OpticalBandList\"\000\022C\n\021SelectOp" + "ticalBand\022\026.context.OpticalBandId\032\024.cont" + "ext.OpticalBand\"\000\022G\n\027DeleteServiceConfig" + "Rule\022\032.context.ServiceConfigRule\032\016.conte" + "xt.Empty\"\000b\006proto3" };
-        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.protobuf.AnyProto.getDescriptor(), acl.Acl.getDescriptor(), ip_link.IpLink.getDescriptor(), kpi_sample_types.KpiSampleTypes.getDescriptor() });
+        java.lang.String[] descriptorData = { "\n\rcontext.proto\022\007context\032\031google/protobu" + "f/any.proto\032\tacl.proto\032\014ipowdm.proto\032\rip" + "_link.proto\032\026kpi_sample_types.proto\032\016tap" + "i_lsp.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004uuid\030\001 \001" + "(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001(\001\"Z\n\005Ev" + "ent\022%\n\ttimestamp\030\001 \001(\0132\022.context.Timesta" + "mp\022*\n\nevent_type\030\002 \001(\0162\026.context.EventTy" + "peEnum\"\265\002\n\010AnyEvent\022(\n\007context\030\001 \001(\0132\025.c" + "ontext.ContextEventH\000\022*\n\010topology\030\002 \001(\0132" + "\026.context.TopologyEventH\000\022&\n\006device\030\003 \001(" + "\0132\024.context.DeviceEventH\000\022\"\n\004link\030\004 \001(\0132" + "\022.context.LinkEventH\000\022(\n\007service\030\005 \001(\0132\025" + ".context.ServiceEventH\000\022$\n\005slice\030\006 \001(\0132\023" + ".context.SliceEventH\000\022.\n\nconnection\030\007 \001(" + "\0132\030.context.ConnectionEventH\000B\007\n\005event\"0" + "\n\tContextId\022#\n\014context_uuid\030\001 \001(\0132\r.cont" + "ext.Uuid\"\351\001\n\007Context\022&\n\ncontext_id\030\001 \001(\013" + "2\022.context.ContextId\022\014\n\004name\030\002 \001(\t\022)\n\014to" + "pology_ids\030\003 \003(\0132\023.context.TopologyId\022\'\n" + "\013service_ids\030\004 \003(\0132\022.context.ServiceId\022#" + "\n\tslice_ids\030\005 \003(\0132\020.context.SliceId\022/\n\nc" + "ontroller\030\006 \001(\0132\033.context.TeraFlowContro" + "ller\"8\n\rContextIdList\022\'\n\013context_ids\030\001 \003" + "(\0132\022.context.ContextId\"1\n\013ContextList\022\"\n" + "\010contexts\030\001 \003(\0132\020.context.Context\"U\n\014Con" + "textEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event" + "\022&\n\ncontext_id\030\002 \001(\0132\022.context.ContextId" + "\"Z\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132\022.con" + "text.ContextId\022$\n\rtopology_uuid\030\002 \001(\0132\r." + "context.Uuid\"\267\001\n\010Topology\022(\n\013topology_id" + "\030\001 \001(\0132\023.context.TopologyId\022\014\n\004name\030\002 \001(" + "\t\022%\n\ndevice_ids\030\003 \003(\0132\021.context.DeviceId" + "\022!\n\010link_ids\030\004 \003(\0132\017.context.LinkId\022)\n\020o" + "ptical_link_ids\030\005 \003(\0132\017.context.LinkId\"\266" + "\001\n\017TopologyDetails\022(\n\013topology_id\030\001 \001(\0132" + "\023.context.TopologyId\022\014\n\004name\030\002 \001(\t\022 \n\007de" + "vices\030\003 \003(\0132\017.context.Device\022\034\n\005links\030\004 " + "\003(\0132\r.context.Link\022+\n\roptical_links\030\005 \003(" + "\0132\024.context.OpticalLink\";\n\016TopologyIdLis" + "t\022)\n\014topology_ids\030\001 \003(\0132\023.context.Topolo" + "gyId\"5\n\014TopologyList\022%\n\ntopologies\030\001 \003(\013" + "2\021.context.Topology\"X\n\rTopologyEvent\022\035\n\005" + "event\030\001 \001(\0132\016.context.Event\022(\n\013topology_" + "id\030\002 \001(\0132\023.context.TopologyId\".\n\010DeviceI" + "d\022\"\n\013device_uuid\030\001 \001(\0132\r.context.Uuid\"\372\002" + "\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.context.De" + "viceId\022\014\n\004name\030\002 \001(\t\022\023\n\013device_type\030\003 \001(" + "\t\022,\n\rdevice_config\030\004 \001(\0132\025.context.Devic" + "eConfig\022G\n\031device_operational_status\030\005 \001" + "(\0162$.context.DeviceOperationalStatusEnum" + "\0221\n\016device_drivers\030\006 \003(\0162\031.context.Devic" + "eDriverEnum\022+\n\020device_endpoints\030\007 \003(\0132\021." + "context.EndPoint\022&\n\ncomponents\030\010 \003(\0132\022.c" + "ontext.Component\022(\n\rcontroller_id\030\t \001(\0132" + "\021.context.DeviceId\"\311\001\n\tComponent\022%\n\016comp" + "onent_uuid\030\001 \001(\0132\r.context.Uuid\022\014\n\004name\030" + "\002 \001(\t\022\014\n\004type\030\003 \001(\t\0226\n\nattributes\030\004 \003(\0132" + "\".context.Component.AttributesEntry\022\016\n\006p" + "arent\030\005 \001(\t\0321\n\017AttributesEntry\022\013\n\003key\030\001 " + "\001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"9\n\014DeviceConfig\022)" + "\n\014config_rules\030\001 \003(\0132\023.context.ConfigRul" + "e\"5\n\014DeviceIdList\022%\n\ndevice_ids\030\001 \003(\0132\021." + "context.DeviceId\".\n\nDeviceList\022 \n\007device" + "s\030\001 \003(\0132\017.context.Device\"\216\001\n\014DeviceFilte" + "r\022)\n\ndevice_ids\030\001 \001(\0132\025.context.DeviceId" + "List\022\031\n\021include_endpoints\030\002 \001(\010\022\034\n\024inclu" + "de_config_rules\030\003 \001(\010\022\032\n\022include_compone" + "nts\030\004 \001(\010\"\200\001\n\013DeviceEvent\022\035\n\005event\030\001 \001(\013" + "2\016.context.Event\022$\n\tdevice_id\030\002 \001(\0132\021.co" + "ntext.DeviceId\022,\n\rdevice_config\030\003 \001(\0132\025." + "context.DeviceConfig\"*\n\006LinkId\022 \n\tlink_u" + "uid\030\001 \001(\0132\r.context.Uuid\"c\n\016LinkAttribut" + "es\022\030\n\020is_bidirectional\030\001 \001(\010\022\033\n\023total_ca" + "pacity_gbps\030\002 \001(\002\022\032\n\022used_capacity_gbps\030" + "\003 \001(\002\"\275\001\n\004Link\022 \n\007link_id\030\001 \001(\0132\017.contex" + "t.LinkId\022\014\n\004name\030\002 \001(\t\022(\n\tlink_type\030\003 \001(" + "\0162\025.context.LinkTypeEnum\022.\n\021link_endpoin" + "t_ids\030\004 \003(\0132\023.context.EndPointId\022+\n\nattr" + "ibutes\030\005 \001(\0132\027.context.LinkAttributes\"/\n" + "\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132\017.context." + "LinkId\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r.cont" + "ext.Link\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\0132\016.c" + "ontext.Event\022 \n\007link_id\030\002 \001(\0132\017.context." + "LinkId\"X\n\tServiceId\022&\n\ncontext_id\030\001 \001(\0132" + "\022.context.ContextId\022#\n\014service_uuid\030\002 \001(" + "\0132\r.context.Uuid\"\333\002\n\007Service\022&\n\nservice_" + "id\030\001 \001(\0132\022.context.ServiceId\022\014\n\004name\030\002 \001" + "(\t\022.\n\014service_type\030\003 \001(\0162\030.context.Servi" + "ceTypeEnum\0221\n\024service_endpoint_ids\030\004 \003(\013" + "2\023.context.EndPointId\0220\n\023service_constra" + "ints\030\005 \003(\0132\023.context.Constraint\022.\n\016servi" + "ce_status\030\006 \001(\0132\026.context.ServiceStatus\022" + ".\n\016service_config\030\007 \001(\0132\026.context.Servic" + "eConfig\022%\n\ttimestamp\030\010 \001(\0132\022.context.Tim" + "estamp\"C\n\rServiceStatus\0222\n\016service_statu" + "s\030\001 \001(\0162\032.context.ServiceStatusEnum\":\n\rS" + "erviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.con" + "text.ConfigRule\"8\n\rServiceIdList\022\'\n\013serv" + "ice_ids\030\001 \003(\0132\022.context.ServiceId\"1\n\013Ser" + "viceList\022\"\n\010services\030\001 \003(\0132\020.context.Ser" + "vice\"\225\001\n\rServiceFilter\022+\n\013service_ids\030\001 " + "\001(\0132\026.context.ServiceIdList\022\034\n\024include_e" + "ndpoint_ids\030\002 \001(\010\022\033\n\023include_constraints" + "\030\003 \001(\010\022\034\n\024include_config_rules\030\004 \001(\010\"U\n\014" + "ServiceEvent\022\035\n\005event\030\001 \001(\0132\016.context.Ev" + "ent\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" + "eId\"T\n\007SliceId\022&\n\ncontext_id\030\001 \001(\0132\022.con" + "text.ContextId\022!\n\nslice_uuid\030\002 \001(\0132\r.con" + "text.Uuid\"\240\003\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020." + "context.SliceId\022\014\n\004name\030\002 \001(\t\022/\n\022slice_e" + "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022." + "\n\021slice_constraints\030\004 \003(\0132\023.context.Cons" + "traint\022-\n\021slice_service_ids\030\005 \003(\0132\022.cont" + "ext.ServiceId\022,\n\022slice_subslice_ids\030\006 \003(" + "\0132\020.context.SliceId\022*\n\014slice_status\030\007 \001(" + "\0132\024.context.SliceStatus\022*\n\014slice_config\030" + "\010 \001(\0132\024.context.SliceConfig\022(\n\013slice_own" + "er\030\t \001(\0132\023.context.SliceOwner\022%\n\ttimesta" + "mp\030\n \001(\0132\022.context.Timestamp\"E\n\nSliceOwn" + "er\022!\n\nowner_uuid\030\001 \001(\0132\r.context.Uuid\022\024\n" + "\014owner_string\030\002 \001(\t\"=\n\013SliceStatus\022.\n\014sl" + "ice_status\030\001 \001(\0162\030.context.SliceStatusEn" + "um\"8\n\013SliceConfig\022)\n\014config_rules\030\001 \003(\0132" + "\023.context.ConfigRule\"2\n\013SliceIdList\022#\n\ts" + "lice_ids\030\001 \003(\0132\020.context.SliceId\"+\n\tSlic" + "eList\022\036\n\006slices\030\001 \003(\0132\016.context.Slice\"\312\001" + "\n\013SliceFilter\022\'\n\tslice_ids\030\001 \001(\0132\024.conte" + "xt.SliceIdList\022\034\n\024include_endpoint_ids\030\002" + " \001(\010\022\033\n\023include_constraints\030\003 \001(\010\022\033\n\023inc" + "lude_service_ids\030\004 \001(\010\022\034\n\024include_subsli" + "ce_ids\030\005 \001(\010\022\034\n\024include_config_rules\030\006 \001" + "(\010\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.contex" + "t.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Slic" + "eId\"6\n\014ConnectionId\022&\n\017connection_uuid\030\001" + " \001(\0132\r.context.Uuid\"2\n\025ConnectionSetting" + "s_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Conn" + "ectionSettings_L2\022\027\n\017src_mac_address\030\001 \001" + "(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_typ" + "e\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label\030\005" + " \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Conn" + "ectionSettings_L3\022\026\n\016src_ip_address\030\001 \001(" + "\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022" + "\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Connec" + "tionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010dst" + "_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030\004 " + "\001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\0132\036" + ".context.ConnectionSettings_L0\022*\n\002l2\030\002 \001" + "(\0132\036.context.ConnectionSettings_L2\022*\n\002l3" + "\030\003 \001(\0132\036.context.ConnectionSettings_L3\022*" + "\n\002l4\030\004 \001(\0132\036.context.ConnectionSettings_" + "L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001(\013" + "2\025.context.ConnectionId\022&\n\nservice_id\030\002 " + "\001(\0132\022.context.ServiceId\0223\n\026path_hops_end" + "point_ids\030\003 \003(\0132\023.context.EndPointId\022+\n\017" + "sub_service_ids\030\004 \003(\0132\022.context.ServiceI" + "d\022-\n\010settings\030\005 \001(\0132\033.context.Connection" + "Settings\"A\n\020ConnectionIdList\022-\n\016connecti" + "on_ids\030\001 \003(\0132\025.context.ConnectionId\":\n\016C" + "onnectionList\022(\n\013connections\030\001 \003(\0132\023.con" + "text.Connection\"^\n\017ConnectionEvent\022\035\n\005ev" + "ent\030\001 \001(\0132\016.context.Event\022,\n\rconnection_" + "id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEndP" + "ointId\022(\n\013topology_id\030\001 \001(\0132\023.context.To" + "pologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context.De" + "viceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.context." + "Uuid\"\310\002\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\0132\023" + ".context.EndPointId\022\014\n\004name\030\002 \001(\t\022\025\n\rend" + "point_type\030\003 \001(\t\0229\n\020kpi_sample_types\030\004 \003" + "(\0162\037.kpi_sample_types.KpiSampleType\022,\n\021e" + "ndpoint_location\030\005 \001(\0132\021.context.Locatio" + "n\0229\n\014capabilities\030\006 \003(\0132#.context.EndPoi" + "nt.CapabilitiesEntry\032I\n\021CapabilitiesEntr" + "y\022\013\n\003key\030\001 \001(\t\022#\n\005value\030\002 \001(\0132\024.google.p" + "rotobuf.Any:\0028\001\"{\n\014EndPointName\022(\n\013endpo" + "int_id\030\001 \001(\0132\023.context.EndPointId\022\023\n\013dev" + "ice_name\030\002 \001(\t\022\025\n\rendpoint_name\030\003 \001(\t\022\025\n" + "\rendpoint_type\030\004 \001(\t\";\n\016EndPointIdList\022)" + "\n\014endpoint_ids\030\001 \003(\0132\023.context.EndPointI" + "d\"A\n\020EndPointNameList\022-\n\016endpoint_names\030" + "\001 \003(\0132\025.context.EndPointName\"A\n\021ConfigRu" + "le_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016resou" + "rce_value\030\002 \001(\t\"\213\001\n\016ConfigRule_ACL\022(\n\013en" + "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022,\n\t" + "direction\030\002 \001(\0162\031.context.AclDirectionEn" + "um\022!\n\010rule_set\030\003 \001(\0132\017.acl.AclRuleSet\"f\n" + "\021ConfigRule_IPOWDM\022(\n\013endpoint_id\030\001 \001(\0132" + "\023.context.EndPointId\022\'\n\010rule_set\030\002 \001(\0132\025" + ".ipowdm.IpowdmRuleSet\"k\n\023ConfigRule_TAPI" + "_LSP\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndP" + "ointId\022*\n\010rule_set\030\002 \003(\0132\030.tapi_lsp.Tapi" + "LspRuleSet\"h\n\022ConfigRule_IP_LINK\022(\n\013endp" + "oint_id\030\001 \001(\0132\023.context.EndPointId\022(\n\010ru" + "le_set\030\002 \001(\0132\026.ip_link.IpLinkRuleSet\"\254\002\n" + "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" + "nfigActionEnum\022,\n\006custom\030\002 \001(\0132\032.context" + ".ConfigRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.cont" + "ext.ConfigRule_ACLH\000\022.\n\007ip_link\030\004 \001(\0132\033." + "context.ConfigRule_IP_LINKH\000\0220\n\010tapi_lsp" + "\030\005 \001(\0132\034.context.ConfigRule_TAPI_LSPH\000\022," + "\n\006ipowdm\030\006 \001(\0132\032.context.ConfigRule_IPOW" + "DMH\000B\r\n\013config_rule\"F\n\021Constraint_Custom" + "\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020constraint_" + "value\030\002 \001(\t\"E\n\023Constraint_Schedule\022\027\n\017st" + "art_timestamp\030\001 \001(\001\022\025\n\rduration_days\030\002 \001" + "(\002\"3\n\014GPS_Position\022\020\n\010latitude\030\001 \001(\002\022\021\n\t" + "longitude\030\002 \001(\002\"\204\001\n\010Location\022\020\n\006region\030\001" + " \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025.context.G" + "PS_PositionH\000\022\023\n\tinterface\030\003 \001(\tH\000\022\026\n\014ci" + "rcuit_pack\030\004 \001(\tH\000B\n\n\010location\"l\n\033Constr" + "aint_EndPointLocation\022(\n\013endpoint_id\030\001 \001" + "(\0132\023.context.EndPointId\022#\n\010location\030\002 \001(" + "\0132\021.context.Location\"Y\n\033Constraint_EndPo" + "intPriority\022(\n\013endpoint_id\030\001 \001(\0132\023.conte" + "xt.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026Const" + "raint_SLA_Latency\022\026\n\016e2e_latency_ms\030\001 \001(" + "\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcapacity" + "_gbps\030\001 \001(\002\"c\n\033Constraint_SLA_Availabili" + "ty\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\nall_ac" + "tive\030\002 \001(\010\022\024\n\014availability\030\003 \001(\002\"V\n\036Cons" + "traint_SLA_Isolation_level\0224\n\017isolation_" + "level\030\001 \003(\0162\033.context.IsolationLevelEnum" + "\"\242\001\n\025Constraint_Exclusions\022\024\n\014is_permane" + "nt\030\001 \001(\010\022%\n\ndevice_ids\030\002 \003(\0132\021.context.D" + "eviceId\022)\n\014endpoint_ids\030\003 \003(\0132\023.context." + "EndPointId\022!\n\010link_ids\030\004 \003(\0132\017.context.L" + "inkId\"5\n\014QoSProfileId\022%\n\016qos_profile_id\030" + "\001 \001(\0132\r.context.Uuid\"`\n\025Constraint_QoSPr" + "ofile\022-\n\016qos_profile_id\030\001 \001(\0132\025.context." + "QoSProfileId\022\030\n\020qos_profile_name\030\002 \001(\t\"\222" + "\005\n\nConstraint\022-\n\006action\030\001 \001(\0162\035.context." + "ConstraintActionEnum\022,\n\006custom\030\002 \001(\0132\032.c" + "ontext.Constraint_CustomH\000\0220\n\010schedule\030\003" + " \001(\0132\034.context.Constraint_ScheduleH\000\022A\n\021" + "endpoint_location\030\004 \001(\0132$.context.Constr" + "aint_EndPointLocationH\000\022A\n\021endpoint_prio" + "rity\030\005 \001(\0132$.context.Constraint_EndPoint" + "PriorityH\000\0228\n\014sla_capacity\030\006 \001(\0132 .conte" + "xt.Constraint_SLA_CapacityH\000\0226\n\013sla_late" + "ncy\030\007 \001(\0132\037.context.Constraint_SLA_Laten" + "cyH\000\022@\n\020sla_availability\030\010 \001(\0132$.context" + ".Constraint_SLA_AvailabilityH\000\022@\n\rsla_is" + "olation\030\t \001(\0132\'.context.Constraint_SLA_I" + "solation_levelH\000\0224\n\nexclusions\030\n \001(\0132\036.c" + "ontext.Constraint_ExclusionsH\000\0225\n\013qos_pr" + "ofile\030\013 \001(\0132\036.context.Constraint_QoSProf" + "ileH\000B\014\n\nconstraint\"^\n\022TeraFlowControlle" + "r\022&\n\ncontext_id\030\001 \001(\0132\022.context.ContextI" + "d\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024A" + "uthenticationResult\022&\n\ncontext_id\030\001 \001(\0132" + "\022.context.ContextId\022\025\n\rauthenticated\030\002 \001" + "(\010\"-\n\017OpticalConfigId\022\032\n\022opticalconfig_u" + "uid\030\001 \001(\t\"y\n\rOpticalConfig\0222\n\020opticalcon" + "fig_id\030\001 \001(\0132\030.context.OpticalConfigId\022\016" + "\n\006config\030\002 \001(\t\022$\n\tdevice_id\030\003 \001(\0132\021.cont" + "ext.DeviceId\"C\n\021OpticalConfigList\022.\n\016opt" + "icalconfigs\030\001 \003(\0132\026.context.OpticalConfi" + "g\"g\n\022OpticalConfigEvent\022\035\n\005event\030\001 \001(\0132\016" + ".context.Event\0222\n\020opticalconfig_id\030\002 \001(\013" + "2\030.context.OpticalConfigId\"_\n\021OpticalEnd" + "PointId\022$\n\tdevice_id\030\002 \001(\0132\021.context.Dev" + "iceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.context.U" + "uid\">\n\017OpticalLinkList\022+\n\roptical_links\030" + "\001 \003(\0132\024.context.OpticalLink\"\304\003\n\022OpticalL" + "inkDetails\022\016\n\006length\030\001 \001(\002\022\020\n\010src_port\030\002" + " \001(\t\022\020\n\010dst_port\030\003 \001(\t\022\027\n\017local_peer_por" + "t\030\004 \001(\t\022\030\n\020remote_peer_port\030\005 \001(\t\022\014\n\004use" + "d\030\006 \001(\010\0228\n\007c_slots\030\007 \003(\0132\'.context.Optic" + "alLinkDetails.CSlotsEntry\0228\n\007l_slots\030\010 \003" + "(\0132\'.context.OpticalLinkDetails.LSlotsEn" + "try\0228\n\007s_slots\030\t \003(\0132\'.context.OpticalLi" + "nkDetails.SSlotsEntry\032-\n\013CSlotsEntry\022\013\n\003" + "key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\032-\n\013LSlotsEn" + "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\0028\001\032-\n\013S" + "SlotsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\005:\002" + "8\001\"\243\001\n\013OpticalLink\022\014\n\004name\030\001 \001(\t\0224\n\017opti" + "cal_details\030\002 \001(\0132\033.context.OpticalLinkD" + "etails\022 \n\007link_id\030\003 \001(\0132\017.context.LinkId" + "\022.\n\021link_endpoint_ids\030\004 \003(\0132\023.context.En" + "dPointId\"0\n\tChannelId\022#\n\014channel_uuid\030\001 " + "\001(\0132\r.context.Uuid\"8\n\rOpticalBandId\022\'\n\020o" + "pticalband_uuid\030\001 \001(\0132\r.context.Uuid\"\247\002\n" + "\013OpticalBand\022.\n\016opticalband_id\030\001 \001(\0132\026.c" + "ontext.OpticalBandId\022,\n\rconnection_id\030\002 " + "\001(\0132\025.context.ConnectionId\022&\n\nchannel_id" + "\030\003 \001(\0132\022.context.ChannelId\022&\n\nservice_id" + "\030\004 \001(\0132\022.context.ServiceId\022#\n\007service\030\005 " + "\001(\0132\020.context.ServiceH\000\022)\n\nconnection\030\006 " + "\001(\0132\023.context.ConnectionH\000\022\021\n\007channel\030\007 " + "\001(\tH\000B\007\n\005field\"=\n\017OpticalBandList\022*\n\014opt" + "icalbands\030\001 \003(\0132\024.context.OpticalBand\"r\n" + "\021ServiceConfigRule\022&\n\nservice_id\030\001 \001(\0132\022" + ".context.ServiceId\0225\n\021configrule_custom\030" + "\002 \001(\0132\032.context.ConfigRule_Custom*j\n\rEve" + "ntTypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020E" + "VENTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022" + "\024\n\020EVENTTYPE_REMOVE\020\003*\201\005\n\020DeviceDriverEn" + "um\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICE" + "DRIVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRAN" + "SPORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVI" + "CEDRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVI" + "CEDRIVER_ONF_TR_532\020\005\022\023\n\017DEVICEDRIVER_XR" + "\020\006\022\033\n\027DEVICEDRIVER_IETF_L2VPN\020\007\022 \n\034DEVIC" + "EDRIVER_GNMI_OPENCONFIG\020\010\022\034\n\030DEVICEDRIVE" + "R_OPTICAL_TFS\020\t\022\032\n\026DEVICEDRIVER_IETF_ACT" + "N\020\n\022\023\n\017DEVICEDRIVER_OC\020\013\022\024\n\020DEVICEDRIVER" + "_QKD\020\014\022\033\n\027DEVICEDRIVER_IETF_L3VPN\020\r\022\033\n\027D" + "EVICEDRIVER_IETF_SLICE\020\016\022\024\n\020DEVICEDRIVER" + "_NCE\020\017\022\031\n\025DEVICEDRIVER_SMARTNIC\020\020\022\031\n\025DEV" + "ICEDRIVER_MORPHEUS\020\021\022\024\n\020DEVICEDRIVER_RYU" + "\020\022\022#\n\037DEVICEDRIVER_GNMI_NOKIA_SRLINUX\020\023\022" + "\032\n\026DEVICEDRIVER_OPENROADM\020\024\022$\n DEVICEDRI" + "VER_RESTCONF_OPENCONFIG\020\025*\217\001\n\033DeviceOper" + "ationalStatusEnum\022%\n!DEVICEOPERATIONALST" + "ATUS_UNDEFINED\020\000\022$\n DEVICEOPERATIONALSTA" + "TUS_DISABLED\020\001\022#\n\037DEVICEOPERATIONALSTATU" + "S_ENABLED\020\002*\245\001\n\014LinkTypeEnum\022\024\n\020LINKTYPE" + "_UNKNOWN\020\000\022\023\n\017LINKTYPE_COPPER\020\001\022\022\n\016LINKT" + "YPE_FIBER\020\002\022\022\n\016LINKTYPE_RADIO\020\003\022\024\n\020LINKT" + "YPE_VIRTUAL\020\004\022\027\n\023LINKTYPE_MANAGEMENT\020\005\022\023" + "\n\017LINKTYPE_REMOTE\020\006*\360\002\n\017ServiceTypeEnum\022" + "\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVICETYPE_" + "L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SERVICET" + "YPE_TAPI_CONNECTIVITY_SERVICE\020\003\022\022\n\016SERVI" + "CETYPE_TE\020\004\022\023\n\017SERVICETYPE_E2E\020\005\022$\n SERV" + "ICETYPE_OPTICAL_CONNECTIVITY\020\006\022\023\n\017SERVIC" + "ETYPE_QKD\020\007\022\024\n\020SERVICETYPE_L1NM\020\010\022\023\n\017SER" + "VICETYPE_INT\020\t\022\023\n\017SERVICETYPE_ACL\020\n\022\027\n\023S" + "ERVICETYPE_IP_LINK\020\013\022\030\n\024SERVICETYPE_TAPI" + "_LSP\020\014\022\026\n\022SERVICETYPE_IPOWDM\020\r*\304\001\n\021Servi" + "ceStatusEnum\022\033\n\027SERVICESTATUS_UNDEFINED\020" + "\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024SERVICES" + "TATUS_ACTIVE\020\002\022\032\n\026SERVICESTATUS_UPDATING" + "\020\003\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\004\022\036\n" + "\032SERVICESTATUS_SLA_VIOLATED\020\005*\251\001\n\017SliceS" + "tatusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023" + "SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INI" + "T\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTAT" + "US_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020" + "\005*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UN" + "DEFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFI" + "GACTION_DELETE\020\002*\\\n\020AclDirectionEnum\022\025\n\021" + "ACLDIRECTION_BOTH\020\000\022\030\n\024ACLDIRECTION_INGR" + "ESS\020\001\022\027\n\023ACLDIRECTION_EGRESS\020\002*m\n\024Constr" + "aintActionEnum\022\036\n\032CONSTRAINTACTION_UNDEF" + "INED\020\000\022\030\n\024CONSTRAINTACTION_SET\020\001\022\033\n\027CONS" + "TRAINTACTION_DELETE\020\002*\203\002\n\022IsolationLevel" + "Enum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLA" + "TION\020\001\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS" + "_ISOLATION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATIO" + "N\020\004\022\036\n\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032V" + "IRTUAL_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_F" + "UNCTIONS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATIO" + "N\020\0102\274\035\n\016ContextService\022:\n\016ListContextIds" + "\022\016.context.Empty\032\026.context.ContextIdList" + "\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024.con" + "text.ContextList\"\000\0224\n\nGetContext\022\022.conte" + "xt.ContextId\032\020.context.Context\"\000\0224\n\nSetC" + "ontext\022\020.context.Context\032\022.context.Conte" + "xtId\"\000\0225\n\rRemoveContext\022\022.context.Contex" + "tId\032\016.context.Empty\"\000\022=\n\020GetContextEvent" + "s\022\016.context.Empty\032\025.context.ContextEvent" + "\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Contex" + "tId\032\027.context.TopologyIdList\"\000\022=\n\016ListTo" + "pologies\022\022.context.ContextId\032\025.context.T" + "opologyList\"\000\0227\n\013GetTopology\022\023.context.T" + "opologyId\032\021.context.Topology\"\000\022E\n\022GetTop" + "ologyDetails\022\023.context.TopologyId\032\030.cont" + "ext.TopologyDetails\"\000\0227\n\013SetTopology\022\021.c" + "ontext.Topology\032\023.context.TopologyId\"\000\0227" + "\n\016RemoveTopology\022\023.context.TopologyId\032\016." + "context.Empty\"\000\022?\n\021GetTopologyEvents\022\016.c" + "ontext.Empty\032\026.context.TopologyEvent\"\0000\001" + "\0228\n\rListDeviceIds\022\016.context.Empty\032\025.cont" + "ext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.cont" + "ext.Empty\032\023.context.DeviceList\"\000\0221\n\tGetD" + "evice\022\021.context.DeviceId\032\017.context.Devic" + "e\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.cont" + "ext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.context" + ".DeviceId\032\016.context.Empty\"\000\022;\n\017GetDevice" + "Events\022\016.context.Empty\032\024.context.DeviceE" + "vent\"\0000\001\022<\n\014SelectDevice\022\025.context.Devic" + "eFilter\032\023.context.DeviceList\"\000\022I\n\021ListEn" + "dPointNames\022\027.context.EndPointIdList\032\031.c" + "ontext.EndPointNameList\"\000\0224\n\013ListLinkIds" + "\022\016.context.Empty\032\023.context.LinkIdList\"\000\022" + "0\n\tListLinks\022\016.context.Empty\032\021.context.L" + "inkList\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r." + "context.Link\"\000\022+\n\007SetLink\022\r.context.Link" + "\032\017.context.LinkId\"\000\022/\n\nRemoveLink\022\017.cont" + "ext.LinkId\032\016.context.Empty\"\000\0227\n\rGetLinkE" + "vents\022\016.context.Empty\032\022.context.LinkEven" + "t\"\0000\001\022>\n\016ListServiceIds\022\022.context.Contex" + "tId\032\026.context.ServiceIdList\"\000\022:\n\014ListSer" + "vices\022\022.context.ContextId\032\024.context.Serv" + "iceList\"\000\0224\n\nGetService\022\022.context.Servic" + "eId\032\020.context.Service\"\000\0224\n\nSetService\022\020." + "context.Service\032\022.context.ServiceId\"\000\0226\n" + "\014UnsetService\022\020.context.Service\032\022.contex" + "t.ServiceId\"\000\0225\n\rRemoveService\022\022.context" + ".ServiceId\032\016.context.Empty\"\000\022=\n\020GetServi", "ceEvents\022\016.context.Empty\032\025.context.Servi" + "ceEvent\"\0000\001\022?\n\rSelectService\022\026.context.S" + "erviceFilter\032\024.context.ServiceList\"\000\022:\n\014" + "ListSliceIds\022\022.context.ContextId\032\024.conte" + "xt.SliceIdList\"\000\0226\n\nListSlices\022\022.context" + ".ContextId\032\022.context.SliceList\"\000\022.\n\010GetS" + "lice\022\020.context.SliceId\032\016.context.Slice\"\000" + "\022.\n\010SetSlice\022\016.context.Slice\032\020.context.S" + "liceId\"\000\0220\n\nUnsetSlice\022\016.context.Slice\032\020" + ".context.SliceId\"\000\0221\n\013RemoveSlice\022\020.cont" + "ext.SliceId\032\016.context.Empty\"\000\0229\n\016GetSlic" + "eEvents\022\016.context.Empty\032\023.context.SliceE" + "vent\"\0000\001\0229\n\013SelectSlice\022\024.context.SliceF" + "ilter\032\022.context.SliceList\"\000\022D\n\021ListConne" + "ctionIds\022\022.context.ServiceId\032\031.context.C" + "onnectionIdList\"\000\022@\n\017ListConnections\022\022.c" + "ontext.ServiceId\032\027.context.ConnectionLis" + "t\"\000\022=\n\rGetConnection\022\025.context.Connectio" + "nId\032\023.context.Connection\"\000\022=\n\rSetConnect" + "ion\022\023.context.Connection\032\025.context.Conne" + "ctionId\"\000\022;\n\020RemoveConnection\022\025.context." + "ConnectionId\032\016.context.Empty\"\000\022C\n\023GetCon" + "nectionEvents\022\016.context.Empty\032\030.context." + "ConnectionEvent\"\0000\001\0225\n\014GetAllEvents\022\016.co" + "ntext.Empty\032\021.context.AnyEvent\"\0000\001\022@\n\020Ge" + "tOpticalConfig\022\016.context.Empty\032\032.context" + ".OpticalConfigList\"\000\022F\n\020SetOpticalConfig" + "\022\026.context.OpticalConfig\032\030.context.Optic" + "alConfigId\"\000\022I\n\023UpdateOpticalConfig\022\026.co" + "ntext.OpticalConfig\032\030.context.OpticalCon" + "figId\"\000\022I\n\023SelectOpticalConfig\022\030.context" + ".OpticalConfigId\032\026.context.OpticalConfig" + "\"\000\022A\n\023DeleteOpticalConfig\022\030.context.Opti" + "calConfigId\032\016.context.Empty\"\000\022@\n\024DeleteO" + "pticalChannel\022\026.context.OpticalConfig\032\016." + "context.Empty\"\000\0228\n\016SetOpticalLink\022\024.cont" + "ext.OpticalLink\032\016.context.Empty\"\000\0229\n\016Get" + "OpticalLink\022\017.context.LinkId\032\024.context.O" + "pticalLink\"\000\0226\n\021DeleteOpticalLink\022\017.cont" + "ext.LinkId\032\016.context.Empty\"\000\022@\n\022GetOptic" + "alLinkList\022\016.context.Empty\032\030.context.Opt" + "icalLinkList\"\000\022<\n\016GetOpticalBand\022\016.conte" + "xt.Empty\032\030.context.OpticalBandList\"\000\022C\n\021" + "SelectOpticalBand\022\026.context.OpticalBandI" + "d\032\024.context.OpticalBand\"\000\022G\n\027DeleteServi" + "ceConfigRule\022\032.context.ServiceConfigRule" + "\032\016.context.Empty\"\000b\006proto3" };
+        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { com.google.protobuf.AnyProto.getDescriptor(), acl.Acl.getDescriptor(), ipowdm.Ipowdm.getDescriptor(), ip_link.IpLink.getDescriptor(), kpi_sample_types.KpiSampleTypes.getDescriptor(), tapi_lsp.TapiLsp.getDescriptor() });
         internal_static_context_Empty_descriptor = getDescriptor().getMessageTypes().get(0);
         internal_static_context_Empty_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Empty_descriptor, new java.lang.String[] {});
         internal_static_context_Uuid_descriptor = getDescriptor().getMessageTypes().get(1);
@@ -88131,56 +90514,60 @@ public final class ContextOuterClass {
         internal_static_context_ConfigRule_Custom_descriptor = getDescriptor().getMessageTypes().get(62);
         internal_static_context_ConfigRule_Custom_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_Custom_descriptor, new java.lang.String[] { "ResourceKey", "ResourceValue" });
         internal_static_context_ConfigRule_ACL_descriptor = getDescriptor().getMessageTypes().get(63);
-        internal_static_context_ConfigRule_ACL_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_ACL_descriptor, new java.lang.String[] { "EndpointId", "RuleSet" });
-        internal_static_context_ConfigRule_IP_LINK_descriptor = getDescriptor().getMessageTypes().get(64);
+        internal_static_context_ConfigRule_ACL_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_ACL_descriptor, new java.lang.String[] { "EndpointId", "Direction", "RuleSet" });
+        internal_static_context_ConfigRule_IPOWDM_descriptor = getDescriptor().getMessageTypes().get(64);
+        internal_static_context_ConfigRule_IPOWDM_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_IPOWDM_descriptor, new java.lang.String[] { "EndpointId", "RuleSet" });
+        internal_static_context_ConfigRule_TAPI_LSP_descriptor = getDescriptor().getMessageTypes().get(65);
+        internal_static_context_ConfigRule_TAPI_LSP_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_TAPI_LSP_descriptor, new java.lang.String[] { "EndpointId", "RuleSet" });
+        internal_static_context_ConfigRule_IP_LINK_descriptor = getDescriptor().getMessageTypes().get(66);
         internal_static_context_ConfigRule_IP_LINK_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_IP_LINK_descriptor, new java.lang.String[] { "EndpointId", "RuleSet" });
-        internal_static_context_ConfigRule_descriptor = getDescriptor().getMessageTypes().get(65);
-        internal_static_context_ConfigRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_descriptor, new java.lang.String[] { "Action", "Custom", "Acl", "IpLink", "ConfigRule" });
-        internal_static_context_Constraint_Custom_descriptor = getDescriptor().getMessageTypes().get(66);
+        internal_static_context_ConfigRule_descriptor = getDescriptor().getMessageTypes().get(67);
+        internal_static_context_ConfigRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ConfigRule_descriptor, new java.lang.String[] { "Action", "Custom", "Acl", "IpLink", "TapiLsp", "Ipowdm", "ConfigRule" });
+        internal_static_context_Constraint_Custom_descriptor = getDescriptor().getMessageTypes().get(68);
         internal_static_context_Constraint_Custom_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_Custom_descriptor, new java.lang.String[] { "ConstraintType", "ConstraintValue" });
-        internal_static_context_Constraint_Schedule_descriptor = getDescriptor().getMessageTypes().get(67);
+        internal_static_context_Constraint_Schedule_descriptor = getDescriptor().getMessageTypes().get(69);
         internal_static_context_Constraint_Schedule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_Schedule_descriptor, new java.lang.String[] { "StartTimestamp", "DurationDays" });
-        internal_static_context_GPS_Position_descriptor = getDescriptor().getMessageTypes().get(68);
+        internal_static_context_GPS_Position_descriptor = getDescriptor().getMessageTypes().get(70);
         internal_static_context_GPS_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_GPS_Position_descriptor, new java.lang.String[] { "Latitude", "Longitude" });
-        internal_static_context_Location_descriptor = getDescriptor().getMessageTypes().get(69);
+        internal_static_context_Location_descriptor = getDescriptor().getMessageTypes().get(71);
         internal_static_context_Location_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Location_descriptor, new java.lang.String[] { "Region", "GpsPosition", "Interface", "CircuitPack", "Location" });
-        internal_static_context_Constraint_EndPointLocation_descriptor = getDescriptor().getMessageTypes().get(70);
+        internal_static_context_Constraint_EndPointLocation_descriptor = getDescriptor().getMessageTypes().get(72);
         internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_EndPointLocation_descriptor, new java.lang.String[] { "EndpointId", "Location" });
-        internal_static_context_Constraint_EndPointPriority_descriptor = getDescriptor().getMessageTypes().get(71);
+        internal_static_context_Constraint_EndPointPriority_descriptor = getDescriptor().getMessageTypes().get(73);
         internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_EndPointPriority_descriptor, new java.lang.String[] { "EndpointId", "Priority" });
-        internal_static_context_Constraint_SLA_Latency_descriptor = getDescriptor().getMessageTypes().get(72);
+        internal_static_context_Constraint_SLA_Latency_descriptor = getDescriptor().getMessageTypes().get(74);
         internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Latency_descriptor, new java.lang.String[] { "E2ELatencyMs" });
-        internal_static_context_Constraint_SLA_Capacity_descriptor = getDescriptor().getMessageTypes().get(73);
+        internal_static_context_Constraint_SLA_Capacity_descriptor = getDescriptor().getMessageTypes().get(75);
         internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Capacity_descriptor, new java.lang.String[] { "CapacityGbps" });
-        internal_static_context_Constraint_SLA_Availability_descriptor = getDescriptor().getMessageTypes().get(74);
+        internal_static_context_Constraint_SLA_Availability_descriptor = getDescriptor().getMessageTypes().get(76);
         internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Availability_descriptor, new java.lang.String[] { "NumDisjointPaths", "AllActive", "Availability" });
-        internal_static_context_Constraint_SLA_Isolation_level_descriptor = getDescriptor().getMessageTypes().get(75);
+        internal_static_context_Constraint_SLA_Isolation_level_descriptor = getDescriptor().getMessageTypes().get(77);
         internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_SLA_Isolation_level_descriptor, new java.lang.String[] { "IsolationLevel" });
-        internal_static_context_Constraint_Exclusions_descriptor = getDescriptor().getMessageTypes().get(76);
+        internal_static_context_Constraint_Exclusions_descriptor = getDescriptor().getMessageTypes().get(78);
         internal_static_context_Constraint_Exclusions_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_Exclusions_descriptor, new java.lang.String[] { "IsPermanent", "DeviceIds", "EndpointIds", "LinkIds" });
-        internal_static_context_QoSProfileId_descriptor = getDescriptor().getMessageTypes().get(77);
+        internal_static_context_QoSProfileId_descriptor = getDescriptor().getMessageTypes().get(79);
         internal_static_context_QoSProfileId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_QoSProfileId_descriptor, new java.lang.String[] { "QosProfileId" });
-        internal_static_context_Constraint_QoSProfile_descriptor = getDescriptor().getMessageTypes().get(78);
+        internal_static_context_Constraint_QoSProfile_descriptor = getDescriptor().getMessageTypes().get(80);
         internal_static_context_Constraint_QoSProfile_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_QoSProfile_descriptor, new java.lang.String[] { "QosProfileId", "QosProfileName" });
-        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(79);
+        internal_static_context_Constraint_descriptor = getDescriptor().getMessageTypes().get(81);
         internal_static_context_Constraint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_Constraint_descriptor, new java.lang.String[] { "Action", "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Exclusions", "QosProfile", "Constraint" });
-        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(80);
+        internal_static_context_TeraFlowController_descriptor = getDescriptor().getMessageTypes().get(82);
         internal_static_context_TeraFlowController_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_TeraFlowController_descriptor, new java.lang.String[] { "ContextId", "IpAddress", "Port" });
-        internal_static_context_AuthenticationResult_descriptor = getDescriptor().getMessageTypes().get(81);
+        internal_static_context_AuthenticationResult_descriptor = getDescriptor().getMessageTypes().get(83);
         internal_static_context_AuthenticationResult_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_AuthenticationResult_descriptor, new java.lang.String[] { "ContextId", "Authenticated" });
-        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(82);
+        internal_static_context_OpticalConfigId_descriptor = getDescriptor().getMessageTypes().get(84);
         internal_static_context_OpticalConfigId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigId_descriptor, new java.lang.String[] { "OpticalconfigUuid" });
-        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(83);
+        internal_static_context_OpticalConfig_descriptor = getDescriptor().getMessageTypes().get(85);
         internal_static_context_OpticalConfig_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfig_descriptor, new java.lang.String[] { "OpticalconfigId", "Config", "DeviceId" });
-        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(84);
+        internal_static_context_OpticalConfigList_descriptor = getDescriptor().getMessageTypes().get(86);
         internal_static_context_OpticalConfigList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigList_descriptor, new java.lang.String[] { "Opticalconfigs" });
-        internal_static_context_OpticalConfigEvent_descriptor = getDescriptor().getMessageTypes().get(85);
+        internal_static_context_OpticalConfigEvent_descriptor = getDescriptor().getMessageTypes().get(87);
         internal_static_context_OpticalConfigEvent_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalConfigEvent_descriptor, new java.lang.String[] { "Event", "OpticalconfigId" });
-        internal_static_context_OpticalEndPointId_descriptor = getDescriptor().getMessageTypes().get(86);
+        internal_static_context_OpticalEndPointId_descriptor = getDescriptor().getMessageTypes().get(88);
         internal_static_context_OpticalEndPointId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalEndPointId_descriptor, new java.lang.String[] { "DeviceId", "EndpointUuid" });
-        internal_static_context_OpticalLinkList_descriptor = getDescriptor().getMessageTypes().get(87);
+        internal_static_context_OpticalLinkList_descriptor = getDescriptor().getMessageTypes().get(89);
         internal_static_context_OpticalLinkList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkList_descriptor, new java.lang.String[] { "OpticalLinks" });
-        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(88);
+        internal_static_context_OpticalLinkDetails_descriptor = getDescriptor().getMessageTypes().get(90);
         internal_static_context_OpticalLinkDetails_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_descriptor, new java.lang.String[] { "Length", "SrcPort", "DstPort", "LocalPeerPort", "RemotePeerPort", "Used", "CSlots", "LSlots", "SSlots" });
         internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(0);
         internal_static_context_OpticalLinkDetails_CSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_CSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
@@ -88188,22 +90575,24 @@ public final class ContextOuterClass {
         internal_static_context_OpticalLinkDetails_LSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_LSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
         internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor = internal_static_context_OpticalLinkDetails_descriptor.getNestedTypes().get(2);
         internal_static_context_OpticalLinkDetails_SSlotsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLinkDetails_SSlotsEntry_descriptor, new java.lang.String[] { "Key", "Value" });
-        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(89);
+        internal_static_context_OpticalLink_descriptor = getDescriptor().getMessageTypes().get(91);
         internal_static_context_OpticalLink_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalLink_descriptor, new java.lang.String[] { "Name", "OpticalDetails", "LinkId", "LinkEndpointIds" });
-        internal_static_context_ChannelId_descriptor = getDescriptor().getMessageTypes().get(90);
+        internal_static_context_ChannelId_descriptor = getDescriptor().getMessageTypes().get(92);
         internal_static_context_ChannelId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ChannelId_descriptor, new java.lang.String[] { "ChannelUuid" });
-        internal_static_context_OpticalBandId_descriptor = getDescriptor().getMessageTypes().get(91);
+        internal_static_context_OpticalBandId_descriptor = getDescriptor().getMessageTypes().get(93);
         internal_static_context_OpticalBandId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalBandId_descriptor, new java.lang.String[] { "OpticalbandUuid" });
-        internal_static_context_OpticalBand_descriptor = getDescriptor().getMessageTypes().get(92);
+        internal_static_context_OpticalBand_descriptor = getDescriptor().getMessageTypes().get(94);
         internal_static_context_OpticalBand_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalBand_descriptor, new java.lang.String[] { "OpticalbandId", "ConnectionId", "ChannelId", "ServiceId", "Service", "Connection", "Channel", "Field" });
-        internal_static_context_OpticalBandList_descriptor = getDescriptor().getMessageTypes().get(93);
+        internal_static_context_OpticalBandList_descriptor = getDescriptor().getMessageTypes().get(95);
         internal_static_context_OpticalBandList_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_OpticalBandList_descriptor, new java.lang.String[] { "Opticalbands" });
-        internal_static_context_ServiceConfigRule_descriptor = getDescriptor().getMessageTypes().get(94);
+        internal_static_context_ServiceConfigRule_descriptor = getDescriptor().getMessageTypes().get(96);
         internal_static_context_ServiceConfigRule_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_context_ServiceConfigRule_descriptor, new java.lang.String[] { "ServiceId", "ConfigruleCustom" });
         com.google.protobuf.AnyProto.getDescriptor();
         acl.Acl.getDescriptor();
+        ipowdm.Ipowdm.getDescriptor();
         ip_link.IpLink.getDescriptor();
         kpi_sample_types.KpiSampleTypes.getDescriptor();
+        tapi_lsp.TapiLsp.getDescriptor();
     }
     // @@protoc_insertion_point(outer_class_scope)
 }
diff --git a/src/policy/target/generated-sources/grpc/ipowdm/Ipowdm.java b/src/policy/target/generated-sources/grpc/ipowdm/Ipowdm.java
new file mode 100644
index 0000000000000000000000000000000000000000..2008e5d4fecf20f60486efdf655b512080bfa413
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/ipowdm/Ipowdm.java
@@ -0,0 +1,5782 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: ipowdm.proto
+package ipowdm;
+
+public final class Ipowdm {
+
+    private Ipowdm() {
+    }
+
+    public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
+    }
+
+    public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+        registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+    }
+
+    public interface RuleEndpointOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.RuleEndpoint)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * string uuid = 1;
+         * @return The uuid.
+         */
+        java.lang.String getUuid();
+
+        /**
+         * string uuid = 1;
+         * @return The bytes for uuid.
+         */
+        com.google.protobuf.ByteString getUuidBytes();
+
+        /**
+         * string ip_address = 2;
+         * @return The ipAddress.
+         */
+        java.lang.String getIpAddress();
+
+        /**
+         * string ip_address = 2;
+         * @return The bytes for ipAddress.
+         */
+        com.google.protobuf.ByteString getIpAddressBytes();
+
+        /**
+         * string ip_mask = 3;
+         * @return The ipMask.
+         */
+        java.lang.String getIpMask();
+
+        /**
+         * string ip_mask = 3;
+         * @return The bytes for ipMask.
+         */
+        com.google.protobuf.ByteString getIpMaskBytes();
+
+        /**
+         * int32 vlan_id = 4;
+         * @return The vlanId.
+         */
+        int getVlanId();
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.RuleEndpoint}
+     */
+    public static final class RuleEndpoint extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.RuleEndpoint)
+    RuleEndpointOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use RuleEndpoint.newBuilder() to construct.
+        private RuleEndpoint(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private RuleEndpoint() {
+            uuid_ = "";
+            ipAddress_ = "";
+            ipMask_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new RuleEndpoint();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_RuleEndpoint_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_RuleEndpoint_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.RuleEndpoint.class, ipowdm.Ipowdm.RuleEndpoint.Builder.class);
+        }
+
+        public static final int UUID_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object uuid_ = "";
+
+        /**
+         * string uuid = 1;
+         * @return The uuid.
+         */
+        @java.lang.Override
+        public java.lang.String getUuid() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                uuid_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string uuid = 1;
+         * @return The bytes for uuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getUuidBytes() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                uuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int IP_ADDRESS_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object ipAddress_ = "";
+
+        /**
+         * string ip_address = 2;
+         * @return The ipAddress.
+         */
+        @java.lang.Override
+        public java.lang.String getIpAddress() {
+            java.lang.Object ref = ipAddress_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                ipAddress_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string ip_address = 2;
+         * @return The bytes for ipAddress.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getIpAddressBytes() {
+            java.lang.Object ref = ipAddress_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                ipAddress_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int IP_MASK_FIELD_NUMBER = 3;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object ipMask_ = "";
+
+        /**
+         * string ip_mask = 3;
+         * @return The ipMask.
+         */
+        @java.lang.Override
+        public java.lang.String getIpMask() {
+            java.lang.Object ref = ipMask_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                ipMask_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string ip_mask = 3;
+         * @return The bytes for ipMask.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getIpMaskBytes() {
+            java.lang.Object ref = ipMask_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                ipMask_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int VLAN_ID_FIELD_NUMBER = 4;
+
+        private int vlanId_ = 0;
+
+        /**
+         * int32 vlan_id = 4;
+         * @return The vlanId.
+         */
+        @java.lang.Override
+        public int getVlanId() {
+            return vlanId_;
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipAddress_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ipAddress_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipMask_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, ipMask_);
+            }
+            if (vlanId_ != 0) {
+                output.writeInt32(4, vlanId_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipAddress_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ipAddress_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(ipMask_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, ipMask_);
+            }
+            if (vlanId_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, vlanId_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.RuleEndpoint)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.RuleEndpoint other = (ipowdm.Ipowdm.RuleEndpoint) obj;
+            if (!getUuid().equals(other.getUuid()))
+                return false;
+            if (!getIpAddress().equals(other.getIpAddress()))
+                return false;
+            if (!getIpMask().equals(other.getIpMask()))
+                return false;
+            if (getVlanId() != other.getVlanId())
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getUuid().hashCode();
+            hash = (37 * hash) + IP_ADDRESS_FIELD_NUMBER;
+            hash = (53 * hash) + getIpAddress().hashCode();
+            hash = (37 * hash) + IP_MASK_FIELD_NUMBER;
+            hash = (53 * hash) + getIpMask().hashCode();
+            hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+            hash = (53 * hash) + getVlanId();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.RuleEndpoint prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.RuleEndpoint}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.RuleEndpoint)
+        ipowdm.Ipowdm.RuleEndpointOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_RuleEndpoint_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_RuleEndpoint_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.RuleEndpoint.class, ipowdm.Ipowdm.RuleEndpoint.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.RuleEndpoint.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                uuid_ = "";
+                ipAddress_ = "";
+                ipMask_ = "";
+                vlanId_ = 0;
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_RuleEndpoint_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.RuleEndpoint getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.RuleEndpoint build() {
+                ipowdm.Ipowdm.RuleEndpoint result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.RuleEndpoint buildPartial() {
+                ipowdm.Ipowdm.RuleEndpoint result = new ipowdm.Ipowdm.RuleEndpoint(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.RuleEndpoint result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.uuid_ = uuid_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.ipAddress_ = ipAddress_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.ipMask_ = ipMask_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.vlanId_ = vlanId_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.RuleEndpoint) {
+                    return mergeFrom((ipowdm.Ipowdm.RuleEndpoint) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.RuleEndpoint other) {
+                if (other == ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance())
+                    return this;
+                if (!other.getUuid().isEmpty()) {
+                    uuid_ = other.uuid_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                if (!other.getIpAddress().isEmpty()) {
+                    ipAddress_ = other.ipAddress_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                if (!other.getIpMask().isEmpty()) {
+                    ipMask_ = other.ipMask_;
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
+                if (other.getVlanId() != 0) {
+                    setVlanId(other.getVlanId());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    uuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    ipAddress_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    ipMask_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 32:
+                                {
+                                    vlanId_ = input.readInt32();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object uuid_ = "";
+
+            /**
+             * string uuid = 1;
+             * @return The uuid.
+             */
+            public java.lang.String getUuid() {
+                java.lang.Object ref = uuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    uuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string uuid = 1;
+             * @return The bytes for uuid.
+             */
+            public com.google.protobuf.ByteString getUuidBytes() {
+                java.lang.Object ref = uuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    uuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string uuid = 1;
+             * @param value The uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                uuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 1;
+             * @return This builder for chaining.
+             */
+            public Builder clearUuid() {
+                uuid_ = getDefaultInstance().getUuid();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 1;
+             * @param value The bytes for uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                uuid_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object ipAddress_ = "";
+
+            /**
+             * string ip_address = 2;
+             * @return The ipAddress.
+             */
+            public java.lang.String getIpAddress() {
+                java.lang.Object ref = ipAddress_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    ipAddress_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string ip_address = 2;
+             * @return The bytes for ipAddress.
+             */
+            public com.google.protobuf.ByteString getIpAddressBytes() {
+                java.lang.Object ref = ipAddress_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    ipAddress_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string ip_address = 2;
+             * @param value The ipAddress to set.
+             * @return This builder for chaining.
+             */
+            public Builder setIpAddress(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                ipAddress_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string ip_address = 2;
+             * @return This builder for chaining.
+             */
+            public Builder clearIpAddress() {
+                ipAddress_ = getDefaultInstance().getIpAddress();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string ip_address = 2;
+             * @param value The bytes for ipAddress to set.
+             * @return This builder for chaining.
+             */
+            public Builder setIpAddressBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                ipAddress_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object ipMask_ = "";
+
+            /**
+             * string ip_mask = 3;
+             * @return The ipMask.
+             */
+            public java.lang.String getIpMask() {
+                java.lang.Object ref = ipMask_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    ipMask_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string ip_mask = 3;
+             * @return The bytes for ipMask.
+             */
+            public com.google.protobuf.ByteString getIpMaskBytes() {
+                java.lang.Object ref = ipMask_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    ipMask_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string ip_mask = 3;
+             * @param value The ipMask to set.
+             * @return This builder for chaining.
+             */
+            public Builder setIpMask(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                ipMask_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string ip_mask = 3;
+             * @return This builder for chaining.
+             */
+            public Builder clearIpMask() {
+                ipMask_ = getDefaultInstance().getIpMask();
+                bitField0_ = (bitField0_ & ~0x00000004);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string ip_mask = 3;
+             * @param value The bytes for ipMask to set.
+             * @return This builder for chaining.
+             */
+            public Builder setIpMaskBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                ipMask_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            private int vlanId_;
+
+            /**
+             * int32 vlan_id = 4;
+             * @return The vlanId.
+             */
+            @java.lang.Override
+            public int getVlanId() {
+                return vlanId_;
+            }
+
+            /**
+             * int32 vlan_id = 4;
+             * @param value The vlanId to set.
+             * @return This builder for chaining.
+             */
+            public Builder setVlanId(int value) {
+                vlanId_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * int32 vlan_id = 4;
+             * @return This builder for chaining.
+             */
+            public Builder clearVlanId() {
+                bitField0_ = (bitField0_ & ~0x00000008);
+                vlanId_ = 0;
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.RuleEndpoint)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.RuleEndpoint)
+        private static final ipowdm.Ipowdm.RuleEndpoint DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.RuleEndpoint();
+        }
+
+        public static ipowdm.Ipowdm.RuleEndpoint getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public RuleEndpoint parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.RuleEndpoint getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface DigitalSubCarrierIdOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.DigitalSubCarrierId)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * int32 sub_carrier_id = 1;
+         * @return The subCarrierId.
+         */
+        int getSubCarrierId();
+
+        /**
+         * string active = 2;
+         * @return The active.
+         */
+        java.lang.String getActive();
+
+        /**
+         * string active = 2;
+         * @return The bytes for active.
+         */
+        com.google.protobuf.ByteString getActiveBytes();
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.DigitalSubCarrierId}
+     */
+    public static final class DigitalSubCarrierId extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.DigitalSubCarrierId)
+    DigitalSubCarrierIdOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use DigitalSubCarrierId.newBuilder() to construct.
+        private DigitalSubCarrierId(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private DigitalSubCarrierId() {
+            active_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new DigitalSubCarrierId();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarrierId_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarrierId_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.DigitalSubCarrierId.class, ipowdm.Ipowdm.DigitalSubCarrierId.Builder.class);
+        }
+
+        public static final int SUB_CARRIER_ID_FIELD_NUMBER = 1;
+
+        private int subCarrierId_ = 0;
+
+        /**
+         * int32 sub_carrier_id = 1;
+         * @return The subCarrierId.
+         */
+        @java.lang.Override
+        public int getSubCarrierId() {
+            return subCarrierId_;
+        }
+
+        public static final int ACTIVE_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object active_ = "";
+
+        /**
+         * string active = 2;
+         * @return The active.
+         */
+        @java.lang.Override
+        public java.lang.String getActive() {
+            java.lang.Object ref = active_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                active_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string active = 2;
+         * @return The bytes for active.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getActiveBytes() {
+            java.lang.Object ref = active_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                active_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (subCarrierId_ != 0) {
+                output.writeInt32(1, subCarrierId_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(active_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, active_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (subCarrierId_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, subCarrierId_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(active_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, active_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.DigitalSubCarrierId)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.DigitalSubCarrierId other = (ipowdm.Ipowdm.DigitalSubCarrierId) obj;
+            if (getSubCarrierId() != other.getSubCarrierId())
+                return false;
+            if (!getActive().equals(other.getActive()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + SUB_CARRIER_ID_FIELD_NUMBER;
+            hash = (53 * hash) + getSubCarrierId();
+            hash = (37 * hash) + ACTIVE_FIELD_NUMBER;
+            hash = (53 * hash) + getActive().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.DigitalSubCarrierId prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.DigitalSubCarrierId}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.DigitalSubCarrierId)
+        ipowdm.Ipowdm.DigitalSubCarrierIdOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarrierId_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarrierId_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.DigitalSubCarrierId.class, ipowdm.Ipowdm.DigitalSubCarrierId.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.DigitalSubCarrierId.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                subCarrierId_ = 0;
+                active_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarrierId_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarrierId getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.DigitalSubCarrierId.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarrierId build() {
+                ipowdm.Ipowdm.DigitalSubCarrierId result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarrierId buildPartial() {
+                ipowdm.Ipowdm.DigitalSubCarrierId result = new ipowdm.Ipowdm.DigitalSubCarrierId(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.DigitalSubCarrierId result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.subCarrierId_ = subCarrierId_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.active_ = active_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.DigitalSubCarrierId) {
+                    return mergeFrom((ipowdm.Ipowdm.DigitalSubCarrierId) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.DigitalSubCarrierId other) {
+                if (other == ipowdm.Ipowdm.DigitalSubCarrierId.getDefaultInstance())
+                    return this;
+                if (other.getSubCarrierId() != 0) {
+                    setSubCarrierId(other.getSubCarrierId());
+                }
+                if (!other.getActive().isEmpty()) {
+                    active_ = other.active_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    subCarrierId_ = input.readInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 18:
+                                {
+                                    active_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private int subCarrierId_;
+
+            /**
+             * int32 sub_carrier_id = 1;
+             * @return The subCarrierId.
+             */
+            @java.lang.Override
+            public int getSubCarrierId() {
+                return subCarrierId_;
+            }
+
+            /**
+             * int32 sub_carrier_id = 1;
+             * @param value The subCarrierId to set.
+             * @return This builder for chaining.
+             */
+            public Builder setSubCarrierId(int value) {
+                subCarrierId_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * int32 sub_carrier_id = 1;
+             * @return This builder for chaining.
+             */
+            public Builder clearSubCarrierId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                subCarrierId_ = 0;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object active_ = "";
+
+            /**
+             * string active = 2;
+             * @return The active.
+             */
+            public java.lang.String getActive() {
+                java.lang.Object ref = active_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    active_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string active = 2;
+             * @return The bytes for active.
+             */
+            public com.google.protobuf.ByteString getActiveBytes() {
+                java.lang.Object ref = active_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    active_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string active = 2;
+             * @param value The active to set.
+             * @return This builder for chaining.
+             */
+            public Builder setActive(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                active_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string active = 2;
+             * @return This builder for chaining.
+             */
+            public Builder clearActive() {
+                active_ = getDefaultInstance().getActive();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string active = 2;
+             * @param value The bytes for active to set.
+             * @return This builder for chaining.
+             */
+            public Builder setActiveBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                active_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.DigitalSubCarrierId)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.DigitalSubCarrierId)
+        private static final ipowdm.Ipowdm.DigitalSubCarrierId DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.DigitalSubCarrierId();
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarrierId getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public DigitalSubCarrierId parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarrierId getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface DigitalSubCarriersGroupOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.DigitalSubCarriersGroup)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * int32 digital_sub_carriers_group_id = 1;
+         * @return The digitalSubCarriersGroupId.
+         */
+        int getDigitalSubCarriersGroupId();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        java.util.List getDigitalSubCarrierIdList();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        ipowdm.Ipowdm.DigitalSubCarrierId getDigitalSubCarrierId(int index);
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        int getDigitalSubCarrierIdCount();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        java.util.List getDigitalSubCarrierIdOrBuilderList();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        ipowdm.Ipowdm.DigitalSubCarrierIdOrBuilder getDigitalSubCarrierIdOrBuilder(int index);
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.DigitalSubCarriersGroup}
+     */
+    public static final class DigitalSubCarriersGroup extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.DigitalSubCarriersGroup)
+    DigitalSubCarriersGroupOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use DigitalSubCarriersGroup.newBuilder() to construct.
+        private DigitalSubCarriersGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private DigitalSubCarriersGroup() {
+            digitalSubCarrierId_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new DigitalSubCarriersGroup();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarriersGroup_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarriersGroup_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.DigitalSubCarriersGroup.class, ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder.class);
+        }
+
+        public static final int DIGITAL_SUB_CARRIERS_GROUP_ID_FIELD_NUMBER = 1;
+
+        private int digitalSubCarriersGroupId_ = 0;
+
+        /**
+         * int32 digital_sub_carriers_group_id = 1;
+         * @return The digitalSubCarriersGroupId.
+         */
+        @java.lang.Override
+        public int getDigitalSubCarriersGroupId() {
+            return digitalSubCarriersGroupId_;
+        }
+
+        public static final int DIGITAL_SUB_CARRIER_ID_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private java.util.List digitalSubCarrierId_;
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        @java.lang.Override
+        public java.util.List getDigitalSubCarrierIdList() {
+            return digitalSubCarrierId_;
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        @java.lang.Override
+        public java.util.List getDigitalSubCarrierIdOrBuilderList() {
+            return digitalSubCarrierId_;
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        @java.lang.Override
+        public int getDigitalSubCarrierIdCount() {
+            return digitalSubCarrierId_.size();
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarrierId getDigitalSubCarrierId(int index) {
+            return digitalSubCarrierId_.get(index);
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarrierIdOrBuilder getDigitalSubCarrierIdOrBuilder(int index) {
+            return digitalSubCarrierId_.get(index);
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (digitalSubCarriersGroupId_ != 0) {
+                output.writeInt32(1, digitalSubCarriersGroupId_);
+            }
+            for (int i = 0; i < digitalSubCarrierId_.size(); i++) {
+                output.writeMessage(4, digitalSubCarrierId_.get(i));
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (digitalSubCarriersGroupId_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, digitalSubCarriersGroupId_);
+            }
+            for (int i = 0; i < digitalSubCarrierId_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, digitalSubCarrierId_.get(i));
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.DigitalSubCarriersGroup)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.DigitalSubCarriersGroup other = (ipowdm.Ipowdm.DigitalSubCarriersGroup) obj;
+            if (getDigitalSubCarriersGroupId() != other.getDigitalSubCarriersGroupId())
+                return false;
+            if (!getDigitalSubCarrierIdList().equals(other.getDigitalSubCarrierIdList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + DIGITAL_SUB_CARRIERS_GROUP_ID_FIELD_NUMBER;
+            hash = (53 * hash) + getDigitalSubCarriersGroupId();
+            if (getDigitalSubCarrierIdCount() > 0) {
+                hash = (37 * hash) + DIGITAL_SUB_CARRIER_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getDigitalSubCarrierIdList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.DigitalSubCarriersGroup prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.DigitalSubCarriersGroup}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.DigitalSubCarriersGroup)
+        ipowdm.Ipowdm.DigitalSubCarriersGroupOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarriersGroup_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarriersGroup_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.DigitalSubCarriersGroup.class, ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.DigitalSubCarriersGroup.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                digitalSubCarriersGroupId_ = 0;
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    digitalSubCarrierId_ = java.util.Collections.emptyList();
+                } else {
+                    digitalSubCarrierId_ = null;
+                    digitalSubCarrierIdBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000002);
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_DigitalSubCarriersGroup_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.DigitalSubCarriersGroup.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup build() {
+                ipowdm.Ipowdm.DigitalSubCarriersGroup result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup buildPartial() {
+                ipowdm.Ipowdm.DigitalSubCarriersGroup result = new ipowdm.Ipowdm.DigitalSubCarriersGroup(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(ipowdm.Ipowdm.DigitalSubCarriersGroup result) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0)) {
+                        digitalSubCarrierId_ = java.util.Collections.unmodifiableList(digitalSubCarrierId_);
+                        bitField0_ = (bitField0_ & ~0x00000002);
+                    }
+                    result.digitalSubCarrierId_ = digitalSubCarrierId_;
+                } else {
+                    result.digitalSubCarrierId_ = digitalSubCarrierIdBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.DigitalSubCarriersGroup result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.digitalSubCarriersGroupId_ = digitalSubCarriersGroupId_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.DigitalSubCarriersGroup) {
+                    return mergeFrom((ipowdm.Ipowdm.DigitalSubCarriersGroup) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.DigitalSubCarriersGroup other) {
+                if (other == ipowdm.Ipowdm.DigitalSubCarriersGroup.getDefaultInstance())
+                    return this;
+                if (other.getDigitalSubCarriersGroupId() != 0) {
+                    setDigitalSubCarriersGroupId(other.getDigitalSubCarriersGroupId());
+                }
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    if (!other.digitalSubCarrierId_.isEmpty()) {
+                        if (digitalSubCarrierId_.isEmpty()) {
+                            digitalSubCarrierId_ = other.digitalSubCarrierId_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                        } else {
+                            ensureDigitalSubCarrierIdIsMutable();
+                            digitalSubCarrierId_.addAll(other.digitalSubCarrierId_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.digitalSubCarrierId_.isEmpty()) {
+                        if (digitalSubCarrierIdBuilder_.isEmpty()) {
+                            digitalSubCarrierIdBuilder_.dispose();
+                            digitalSubCarrierIdBuilder_ = null;
+                            digitalSubCarrierId_ = other.digitalSubCarrierId_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                            digitalSubCarrierIdBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDigitalSubCarrierIdFieldBuilder() : null;
+                        } else {
+                            digitalSubCarrierIdBuilder_.addAllMessages(other.digitalSubCarrierId_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 8:
+                                {
+                                    digitalSubCarriersGroupId_ = input.readInt32();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 8
+                            case 34:
+                                {
+                                    ipowdm.Ipowdm.DigitalSubCarrierId m = input.readMessage(ipowdm.Ipowdm.DigitalSubCarrierId.parser(), extensionRegistry);
+                                    if (digitalSubCarrierIdBuilder_ == null) {
+                                        ensureDigitalSubCarrierIdIsMutable();
+                                        digitalSubCarrierId_.add(m);
+                                    } else {
+                                        digitalSubCarrierIdBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 34
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private int digitalSubCarriersGroupId_;
+
+            /**
+             * int32 digital_sub_carriers_group_id = 1;
+             * @return The digitalSubCarriersGroupId.
+             */
+            @java.lang.Override
+            public int getDigitalSubCarriersGroupId() {
+                return digitalSubCarriersGroupId_;
+            }
+
+            /**
+             * int32 digital_sub_carriers_group_id = 1;
+             * @param value The digitalSubCarriersGroupId to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDigitalSubCarriersGroupId(int value) {
+                digitalSubCarriersGroupId_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * int32 digital_sub_carriers_group_id = 1;
+             * @return This builder for chaining.
+             */
+            public Builder clearDigitalSubCarriersGroupId() {
+                bitField0_ = (bitField0_ & ~0x00000001);
+                digitalSubCarriersGroupId_ = 0;
+                onChanged();
+                return this;
+            }
+
+            private java.util.List digitalSubCarrierId_ = java.util.Collections.emptyList();
+
+            private void ensureDigitalSubCarrierIdIsMutable() {
+                if (!((bitField0_ & 0x00000002) != 0)) {
+                    digitalSubCarrierId_ = new java.util.ArrayList(digitalSubCarrierId_);
+                    bitField0_ |= 0x00000002;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 digitalSubCarrierIdBuilder_;
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public java.util.List getDigitalSubCarrierIdList() {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(digitalSubCarrierId_);
+                } else {
+                    return digitalSubCarrierIdBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public int getDigitalSubCarrierIdCount() {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    return digitalSubCarrierId_.size();
+                } else {
+                    return digitalSubCarrierIdBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarrierId getDigitalSubCarrierId(int index) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    return digitalSubCarrierId_.get(index);
+                } else {
+                    return digitalSubCarrierIdBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder setDigitalSubCarrierId(int index, ipowdm.Ipowdm.DigitalSubCarrierId value) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.set(index, value);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder setDigitalSubCarrierId(int index, ipowdm.Ipowdm.DigitalSubCarrierId.Builder builderForValue) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder addDigitalSubCarrierId(ipowdm.Ipowdm.DigitalSubCarrierId value) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.add(value);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder addDigitalSubCarrierId(int index, ipowdm.Ipowdm.DigitalSubCarrierId value) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.add(index, value);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder addDigitalSubCarrierId(ipowdm.Ipowdm.DigitalSubCarrierId.Builder builderForValue) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder addDigitalSubCarrierId(int index, ipowdm.Ipowdm.DigitalSubCarrierId.Builder builderForValue) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder addAllDigitalSubCarrierId(java.lang.Iterable values) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    ensureDigitalSubCarrierIdIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, digitalSubCarrierId_);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder clearDigitalSubCarrierId() {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    digitalSubCarrierId_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000002);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public Builder removeDigitalSubCarrierId(int index) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    ensureDigitalSubCarrierIdIsMutable();
+                    digitalSubCarrierId_.remove(index);
+                    onChanged();
+                } else {
+                    digitalSubCarrierIdBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarrierId.Builder getDigitalSubCarrierIdBuilder(int index) {
+                return getDigitalSubCarrierIdFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarrierIdOrBuilder getDigitalSubCarrierIdOrBuilder(int index) {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    return digitalSubCarrierId_.get(index);
+                } else {
+                    return digitalSubCarrierIdBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public java.util.List getDigitalSubCarrierIdOrBuilderList() {
+                if (digitalSubCarrierIdBuilder_ != null) {
+                    return digitalSubCarrierIdBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(digitalSubCarrierId_);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarrierId.Builder addDigitalSubCarrierIdBuilder() {
+                return getDigitalSubCarrierIdFieldBuilder().addBuilder(ipowdm.Ipowdm.DigitalSubCarrierId.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarrierId.Builder addDigitalSubCarrierIdBuilder(int index) {
+                return getDigitalSubCarrierIdFieldBuilder().addBuilder(index, ipowdm.Ipowdm.DigitalSubCarrierId.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarrierId digital_sub_carrier_id = 4;
+             */
+            public java.util.List getDigitalSubCarrierIdBuilderList() {
+                return getDigitalSubCarrierIdFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getDigitalSubCarrierIdFieldBuilder() {
+                if (digitalSubCarrierIdBuilder_ == null) {
+                    digitalSubCarrierIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(digitalSubCarrierId_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    digitalSubCarrierId_ = null;
+                }
+                return digitalSubCarrierIdBuilder_;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.DigitalSubCarriersGroup)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.DigitalSubCarriersGroup)
+        private static final ipowdm.Ipowdm.DigitalSubCarriersGroup DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.DigitalSubCarriersGroup();
+        }
+
+        public static ipowdm.Ipowdm.DigitalSubCarriersGroup getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public DigitalSubCarriersGroup parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarriersGroup getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface ComponentOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.Component)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * string name = 1;
+         * @return The name.
+         */
+        java.lang.String getName();
+
+        /**
+         * string name = 1;
+         * @return The bytes for name.
+         */
+        com.google.protobuf.ByteString getNameBytes();
+
+        /**
+         * float frequency = 2;
+         * @return The frequency.
+         */
+        float getFrequency();
+
+        /**
+         * float target_output_power = 3;
+         * @return The targetOutputPower.
+         */
+        float getTargetOutputPower();
+
+        /**
+         * int32 operational_mode = 4;
+         * @return The operationalMode.
+         */
+        int getOperationalMode();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        java.util.List getDigitalSubCarriersGroupList();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        ipowdm.Ipowdm.DigitalSubCarriersGroup getDigitalSubCarriersGroup(int index);
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        int getDigitalSubCarriersGroupCount();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        java.util.List getDigitalSubCarriersGroupOrBuilderList();
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        ipowdm.Ipowdm.DigitalSubCarriersGroupOrBuilder getDigitalSubCarriersGroupOrBuilder(int index);
+
+        /**
+         * string operation = 6;
+         * @return The operation.
+         */
+        java.lang.String getOperation();
+
+        /**
+         * string operation = 6;
+         * @return The bytes for operation.
+         */
+        com.google.protobuf.ByteString getOperationBytes();
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.Component}
+     */
+    public static final class Component extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.Component)
+    ComponentOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use Component.newBuilder() to construct.
+        private Component(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private Component() {
+            name_ = "";
+            digitalSubCarriersGroup_ = java.util.Collections.emptyList();
+            operation_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Component();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_Component_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_Component_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.Component.class, ipowdm.Ipowdm.Component.Builder.class);
+        }
+
+        public static final int NAME_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object name_ = "";
+
+        /**
+         * string name = 1;
+         * @return The name.
+         */
+        @java.lang.Override
+        public java.lang.String getName() {
+            java.lang.Object ref = name_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                name_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string name = 1;
+         * @return The bytes for name.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getNameBytes() {
+            java.lang.Object ref = name_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                name_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int FREQUENCY_FIELD_NUMBER = 2;
+
+        private float frequency_ = 0F;
+
+        /**
+         * float frequency = 2;
+         * @return The frequency.
+         */
+        @java.lang.Override
+        public float getFrequency() {
+            return frequency_;
+        }
+
+        public static final int TARGET_OUTPUT_POWER_FIELD_NUMBER = 3;
+
+        private float targetOutputPower_ = 0F;
+
+        /**
+         * float target_output_power = 3;
+         * @return The targetOutputPower.
+         */
+        @java.lang.Override
+        public float getTargetOutputPower() {
+            return targetOutputPower_;
+        }
+
+        public static final int OPERATIONAL_MODE_FIELD_NUMBER = 4;
+
+        private int operationalMode_ = 0;
+
+        /**
+         * int32 operational_mode = 4;
+         * @return The operationalMode.
+         */
+        @java.lang.Override
+        public int getOperationalMode() {
+            return operationalMode_;
+        }
+
+        public static final int DIGITAL_SUB_CARRIERS_GROUP_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private java.util.List digitalSubCarriersGroup_;
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        @java.lang.Override
+        public java.util.List getDigitalSubCarriersGroupList() {
+            return digitalSubCarriersGroup_;
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        @java.lang.Override
+        public java.util.List getDigitalSubCarriersGroupOrBuilderList() {
+            return digitalSubCarriersGroup_;
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        @java.lang.Override
+        public int getDigitalSubCarriersGroupCount() {
+            return digitalSubCarriersGroup_.size();
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarriersGroup getDigitalSubCarriersGroup(int index) {
+            return digitalSubCarriersGroup_.get(index);
+        }
+
+        /**
+         * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.DigitalSubCarriersGroupOrBuilder getDigitalSubCarriersGroupOrBuilder(int index) {
+            return digitalSubCarriersGroup_.get(index);
+        }
+
+        public static final int OPERATION_FIELD_NUMBER = 6;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object operation_ = "";
+
+        /**
+         * string operation = 6;
+         * @return The operation.
+         */
+        @java.lang.Override
+        public java.lang.String getOperation() {
+            java.lang.Object ref = operation_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                operation_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string operation = 6;
+         * @return The bytes for operation.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getOperationBytes() {
+            java.lang.Object ref = operation_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                operation_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+            }
+            if (java.lang.Float.floatToRawIntBits(frequency_) != 0) {
+                output.writeFloat(2, frequency_);
+            }
+            if (java.lang.Float.floatToRawIntBits(targetOutputPower_) != 0) {
+                output.writeFloat(3, targetOutputPower_);
+            }
+            if (operationalMode_ != 0) {
+                output.writeInt32(4, operationalMode_);
+            }
+            for (int i = 0; i < digitalSubCarriersGroup_.size(); i++) {
+                output.writeMessage(5, digitalSubCarriersGroup_.get(i));
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 6, operation_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+            }
+            if (java.lang.Float.floatToRawIntBits(frequency_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(2, frequency_);
+            }
+            if (java.lang.Float.floatToRawIntBits(targetOutputPower_) != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeFloatSize(3, targetOutputPower_);
+            }
+            if (operationalMode_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, operationalMode_);
+            }
+            for (int i = 0; i < digitalSubCarriersGroup_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, digitalSubCarriersGroup_.get(i));
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(operation_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, operation_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.Component)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.Component other = (ipowdm.Ipowdm.Component) obj;
+            if (!getName().equals(other.getName()))
+                return false;
+            if (java.lang.Float.floatToIntBits(getFrequency()) != java.lang.Float.floatToIntBits(other.getFrequency()))
+                return false;
+            if (java.lang.Float.floatToIntBits(getTargetOutputPower()) != java.lang.Float.floatToIntBits(other.getTargetOutputPower()))
+                return false;
+            if (getOperationalMode() != other.getOperationalMode())
+                return false;
+            if (!getDigitalSubCarriersGroupList().equals(other.getDigitalSubCarriersGroupList()))
+                return false;
+            if (!getOperation().equals(other.getOperation()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getName().hashCode();
+            hash = (37 * hash) + FREQUENCY_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getFrequency());
+            hash = (37 * hash) + TARGET_OUTPUT_POWER_FIELD_NUMBER;
+            hash = (53 * hash) + java.lang.Float.floatToIntBits(getTargetOutputPower());
+            hash = (37 * hash) + OPERATIONAL_MODE_FIELD_NUMBER;
+            hash = (53 * hash) + getOperationalMode();
+            if (getDigitalSubCarriersGroupCount() > 0) {
+                hash = (37 * hash) + DIGITAL_SUB_CARRIERS_GROUP_FIELD_NUMBER;
+                hash = (53 * hash) + getDigitalSubCarriersGroupList().hashCode();
+            }
+            hash = (37 * hash) + OPERATION_FIELD_NUMBER;
+            hash = (53 * hash) + getOperation().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Component parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Component parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Component parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.Component prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.Component}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.Component)
+        ipowdm.Ipowdm.ComponentOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Component_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Component_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.Component.class, ipowdm.Ipowdm.Component.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.Component.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                name_ = "";
+                frequency_ = 0F;
+                targetOutputPower_ = 0F;
+                operationalMode_ = 0;
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    digitalSubCarriersGroup_ = java.util.Collections.emptyList();
+                } else {
+                    digitalSubCarriersGroup_ = null;
+                    digitalSubCarriersGroupBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000010);
+                operation_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Component_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Component getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.Component.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Component build() {
+                ipowdm.Ipowdm.Component result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Component buildPartial() {
+                ipowdm.Ipowdm.Component result = new ipowdm.Ipowdm.Component(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(ipowdm.Ipowdm.Component result) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0)) {
+                        digitalSubCarriersGroup_ = java.util.Collections.unmodifiableList(digitalSubCarriersGroup_);
+                        bitField0_ = (bitField0_ & ~0x00000010);
+                    }
+                    result.digitalSubCarriersGroup_ = digitalSubCarriersGroup_;
+                } else {
+                    result.digitalSubCarriersGroup_ = digitalSubCarriersGroupBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.Component result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.name_ = name_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.frequency_ = frequency_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.targetOutputPower_ = targetOutputPower_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.operationalMode_ = operationalMode_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.operation_ = operation_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.Component) {
+                    return mergeFrom((ipowdm.Ipowdm.Component) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.Component other) {
+                if (other == ipowdm.Ipowdm.Component.getDefaultInstance())
+                    return this;
+                if (!other.getName().isEmpty()) {
+                    name_ = other.name_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                if (other.getFrequency() != 0F) {
+                    setFrequency(other.getFrequency());
+                }
+                if (other.getTargetOutputPower() != 0F) {
+                    setTargetOutputPower(other.getTargetOutputPower());
+                }
+                if (other.getOperationalMode() != 0) {
+                    setOperationalMode(other.getOperationalMode());
+                }
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    if (!other.digitalSubCarriersGroup_.isEmpty()) {
+                        if (digitalSubCarriersGroup_.isEmpty()) {
+                            digitalSubCarriersGroup_ = other.digitalSubCarriersGroup_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                        } else {
+                            ensureDigitalSubCarriersGroupIsMutable();
+                            digitalSubCarriersGroup_.addAll(other.digitalSubCarriersGroup_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.digitalSubCarriersGroup_.isEmpty()) {
+                        if (digitalSubCarriersGroupBuilder_.isEmpty()) {
+                            digitalSubCarriersGroupBuilder_.dispose();
+                            digitalSubCarriersGroupBuilder_ = null;
+                            digitalSubCarriersGroup_ = other.digitalSubCarriersGroup_;
+                            bitField0_ = (bitField0_ & ~0x00000010);
+                            digitalSubCarriersGroupBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDigitalSubCarriersGroupFieldBuilder() : null;
+                        } else {
+                            digitalSubCarriersGroupBuilder_.addAllMessages(other.digitalSubCarriersGroup_);
+                        }
+                    }
+                }
+                if (!other.getOperation().isEmpty()) {
+                    operation_ = other.operation_;
+                    bitField0_ |= 0x00000020;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    name_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 21:
+                                {
+                                    frequency_ = input.readFloat();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 21
+                            case 29:
+                                {
+                                    targetOutputPower_ = input.readFloat();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 29
+                            case 32:
+                                {
+                                    operationalMode_ = input.readInt32();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 32
+                            case 42:
+                                {
+                                    ipowdm.Ipowdm.DigitalSubCarriersGroup m = input.readMessage(ipowdm.Ipowdm.DigitalSubCarriersGroup.parser(), extensionRegistry);
+                                    if (digitalSubCarriersGroupBuilder_ == null) {
+                                        ensureDigitalSubCarriersGroupIsMutable();
+                                        digitalSubCarriersGroup_.add(m);
+                                    } else {
+                                        digitalSubCarriersGroupBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    operation_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object name_ = "";
+
+            /**
+             * string name = 1;
+             * @return The name.
+             */
+            public java.lang.String getName() {
+                java.lang.Object ref = name_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    name_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string name = 1;
+             * @return The bytes for name.
+             */
+            public com.google.protobuf.ByteString getNameBytes() {
+                java.lang.Object ref = name_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    name_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string name = 1;
+             * @param value The name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                name_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string name = 1;
+             * @return This builder for chaining.
+             */
+            public Builder clearName() {
+                name_ = getDefaultInstance().getName();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string name = 1;
+             * @param value The bytes for name to set.
+             * @return This builder for chaining.
+             */
+            public Builder setNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                name_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private float frequency_;
+
+            /**
+             * float frequency = 2;
+             * @return The frequency.
+             */
+            @java.lang.Override
+            public float getFrequency() {
+                return frequency_;
+            }
+
+            /**
+             * float frequency = 2;
+             * @param value The frequency to set.
+             * @return This builder for chaining.
+             */
+            public Builder setFrequency(float value) {
+                frequency_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * float frequency = 2;
+             * @return This builder for chaining.
+             */
+            public Builder clearFrequency() {
+                bitField0_ = (bitField0_ & ~0x00000002);
+                frequency_ = 0F;
+                onChanged();
+                return this;
+            }
+
+            private float targetOutputPower_;
+
+            /**
+             * float target_output_power = 3;
+             * @return The targetOutputPower.
+             */
+            @java.lang.Override
+            public float getTargetOutputPower() {
+                return targetOutputPower_;
+            }
+
+            /**
+             * float target_output_power = 3;
+             * @param value The targetOutputPower to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTargetOutputPower(float value) {
+                targetOutputPower_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * float target_output_power = 3;
+             * @return This builder for chaining.
+             */
+            public Builder clearTargetOutputPower() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                targetOutputPower_ = 0F;
+                onChanged();
+                return this;
+            }
+
+            private int operationalMode_;
+
+            /**
+             * int32 operational_mode = 4;
+             * @return The operationalMode.
+             */
+            @java.lang.Override
+            public int getOperationalMode() {
+                return operationalMode_;
+            }
+
+            /**
+             * int32 operational_mode = 4;
+             * @param value The operationalMode to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOperationalMode(int value) {
+                operationalMode_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * int32 operational_mode = 4;
+             * @return This builder for chaining.
+             */
+            public Builder clearOperationalMode() {
+                bitField0_ = (bitField0_ & ~0x00000008);
+                operationalMode_ = 0;
+                onChanged();
+                return this;
+            }
+
+            private java.util.List digitalSubCarriersGroup_ = java.util.Collections.emptyList();
+
+            private void ensureDigitalSubCarriersGroupIsMutable() {
+                if (!((bitField0_ & 0x00000010) != 0)) {
+                    digitalSubCarriersGroup_ = new java.util.ArrayList(digitalSubCarriersGroup_);
+                    bitField0_ |= 0x00000010;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 digitalSubCarriersGroupBuilder_;
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public java.util.List getDigitalSubCarriersGroupList() {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(digitalSubCarriersGroup_);
+                } else {
+                    return digitalSubCarriersGroupBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public int getDigitalSubCarriersGroupCount() {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    return digitalSubCarriersGroup_.size();
+                } else {
+                    return digitalSubCarriersGroupBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup getDigitalSubCarriersGroup(int index) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    return digitalSubCarriersGroup_.get(index);
+                } else {
+                    return digitalSubCarriersGroupBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder setDigitalSubCarriersGroup(int index, ipowdm.Ipowdm.DigitalSubCarriersGroup value) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.set(index, value);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder setDigitalSubCarriersGroup(int index, ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder builderForValue) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder addDigitalSubCarriersGroup(ipowdm.Ipowdm.DigitalSubCarriersGroup value) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.add(value);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder addDigitalSubCarriersGroup(int index, ipowdm.Ipowdm.DigitalSubCarriersGroup value) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.add(index, value);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder addDigitalSubCarriersGroup(ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder builderForValue) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder addDigitalSubCarriersGroup(int index, ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder builderForValue) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder addAllDigitalSubCarriersGroup(java.lang.Iterable values) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, digitalSubCarriersGroup_);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder clearDigitalSubCarriersGroup() {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    digitalSubCarriersGroup_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000010);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public Builder removeDigitalSubCarriersGroup(int index) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    ensureDigitalSubCarriersGroupIsMutable();
+                    digitalSubCarriersGroup_.remove(index);
+                    onChanged();
+                } else {
+                    digitalSubCarriersGroupBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder getDigitalSubCarriersGroupBuilder(int index) {
+                return getDigitalSubCarriersGroupFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarriersGroupOrBuilder getDigitalSubCarriersGroupOrBuilder(int index) {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    return digitalSubCarriersGroup_.get(index);
+                } else {
+                    return digitalSubCarriersGroupBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public java.util.List getDigitalSubCarriersGroupOrBuilderList() {
+                if (digitalSubCarriersGroupBuilder_ != null) {
+                    return digitalSubCarriersGroupBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(digitalSubCarriersGroup_);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder addDigitalSubCarriersGroupBuilder() {
+                return getDigitalSubCarriersGroupFieldBuilder().addBuilder(ipowdm.Ipowdm.DigitalSubCarriersGroup.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public ipowdm.Ipowdm.DigitalSubCarriersGroup.Builder addDigitalSubCarriersGroupBuilder(int index) {
+                return getDigitalSubCarriersGroupFieldBuilder().addBuilder(index, ipowdm.Ipowdm.DigitalSubCarriersGroup.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.DigitalSubCarriersGroup digital_sub_carriers_group = 5;
+             */
+            public java.util.List getDigitalSubCarriersGroupBuilderList() {
+                return getDigitalSubCarriersGroupFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getDigitalSubCarriersGroupFieldBuilder() {
+                if (digitalSubCarriersGroupBuilder_ == null) {
+                    digitalSubCarriersGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(digitalSubCarriersGroup_, ((bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
+                    digitalSubCarriersGroup_ = null;
+                }
+                return digitalSubCarriersGroupBuilder_;
+            }
+
+            private java.lang.Object operation_ = "";
+
+            /**
+             * string operation = 6;
+             * @return The operation.
+             */
+            public java.lang.String getOperation() {
+                java.lang.Object ref = operation_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    operation_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string operation = 6;
+             * @return The bytes for operation.
+             */
+            public com.google.protobuf.ByteString getOperationBytes() {
+                java.lang.Object ref = operation_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    operation_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string operation = 6;
+             * @param value The operation to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOperation(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                operation_ = value;
+                bitField0_ |= 0x00000020;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string operation = 6;
+             * @return This builder for chaining.
+             */
+            public Builder clearOperation() {
+                operation_ = getDefaultInstance().getOperation();
+                bitField0_ = (bitField0_ & ~0x00000020);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string operation = 6;
+             * @param value The bytes for operation to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOperationBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                operation_ = value;
+                bitField0_ |= 0x00000020;
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.Component)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.Component)
+        private static final ipowdm.Ipowdm.Component DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.Component();
+        }
+
+        public static ipowdm.Ipowdm.Component getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public Component parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.Component getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface TransceiverOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.Transceiver)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        java.util.List getComponentsList();
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        ipowdm.Ipowdm.Component getComponents(int index);
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        int getComponentsCount();
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        java.util.List getComponentsOrBuilderList();
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        ipowdm.Ipowdm.ComponentOrBuilder getComponentsOrBuilder(int index);
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.Transceiver}
+     */
+    public static final class Transceiver extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.Transceiver)
+    TransceiverOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use Transceiver.newBuilder() to construct.
+        private Transceiver(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private Transceiver() {
+            components_ = java.util.Collections.emptyList();
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new Transceiver();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_Transceiver_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_Transceiver_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.Transceiver.class, ipowdm.Ipowdm.Transceiver.Builder.class);
+        }
+
+        public static final int COMPONENTS_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private java.util.List components_;
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        @java.lang.Override
+        public java.util.List getComponentsList() {
+            return components_;
+        }
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        @java.lang.Override
+        public java.util.List getComponentsOrBuilderList() {
+            return components_;
+        }
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        @java.lang.Override
+        public int getComponentsCount() {
+            return components_.size();
+        }
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.Component getComponents(int index) {
+            return components_.get(index);
+        }
+
+        /**
+         * repeated .ipowdm.Component components = 1;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.ComponentOrBuilder getComponentsOrBuilder(int index) {
+            return components_.get(index);
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            for (int i = 0; i < components_.size(); i++) {
+                output.writeMessage(1, components_.get(i));
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            for (int i = 0; i < components_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, components_.get(i));
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.Transceiver)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.Transceiver other = (ipowdm.Ipowdm.Transceiver) obj;
+            if (!getComponentsList().equals(other.getComponentsList()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (getComponentsCount() > 0) {
+                hash = (37 * hash) + COMPONENTS_FIELD_NUMBER;
+                hash = (53 * hash) + getComponentsList().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.Transceiver parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.Transceiver prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.Transceiver}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.Transceiver)
+        ipowdm.Ipowdm.TransceiverOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Transceiver_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Transceiver_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.Transceiver.class, ipowdm.Ipowdm.Transceiver.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.Transceiver.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                if (componentsBuilder_ == null) {
+                    components_ = java.util.Collections.emptyList();
+                } else {
+                    components_ = null;
+                    componentsBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000001);
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_Transceiver_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Transceiver getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.Transceiver.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Transceiver build() {
+                ipowdm.Ipowdm.Transceiver result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.Transceiver buildPartial() {
+                ipowdm.Ipowdm.Transceiver result = new ipowdm.Ipowdm.Transceiver(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(ipowdm.Ipowdm.Transceiver result) {
+                if (componentsBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        components_ = java.util.Collections.unmodifiableList(components_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.components_ = components_;
+                } else {
+                    result.components_ = componentsBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.Transceiver result) {
+                int from_bitField0_ = bitField0_;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.Transceiver) {
+                    return mergeFrom((ipowdm.Ipowdm.Transceiver) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.Transceiver other) {
+                if (other == ipowdm.Ipowdm.Transceiver.getDefaultInstance())
+                    return this;
+                if (componentsBuilder_ == null) {
+                    if (!other.components_.isEmpty()) {
+                        if (components_.isEmpty()) {
+                            components_ = other.components_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureComponentsIsMutable();
+                            components_.addAll(other.components_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.components_.isEmpty()) {
+                        if (componentsBuilder_.isEmpty()) {
+                            componentsBuilder_.dispose();
+                            componentsBuilder_ = null;
+                            components_ = other.components_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            componentsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getComponentsFieldBuilder() : null;
+                        } else {
+                            componentsBuilder_.addAllMessages(other.components_);
+                        }
+                    }
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    ipowdm.Ipowdm.Component m = input.readMessage(ipowdm.Ipowdm.Component.parser(), extensionRegistry);
+                                    if (componentsBuilder_ == null) {
+                                        ensureComponentsIsMutable();
+                                        components_.add(m);
+                                    } else {
+                                        componentsBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.util.List components_ = java.util.Collections.emptyList();
+
+            private void ensureComponentsIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    components_ = new java.util.ArrayList(components_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 componentsBuilder_;
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public java.util.List getComponentsList() {
+                if (componentsBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(components_);
+                } else {
+                    return componentsBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public int getComponentsCount() {
+                if (componentsBuilder_ == null) {
+                    return components_.size();
+                } else {
+                    return componentsBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public ipowdm.Ipowdm.Component getComponents(int index) {
+                if (componentsBuilder_ == null) {
+                    return components_.get(index);
+                } else {
+                    return componentsBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder setComponents(int index, ipowdm.Ipowdm.Component value) {
+                if (componentsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureComponentsIsMutable();
+                    components_.set(index, value);
+                    onChanged();
+                } else {
+                    componentsBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder setComponents(int index, ipowdm.Ipowdm.Component.Builder builderForValue) {
+                if (componentsBuilder_ == null) {
+                    ensureComponentsIsMutable();
+                    components_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    componentsBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder addComponents(ipowdm.Ipowdm.Component value) {
+                if (componentsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureComponentsIsMutable();
+                    components_.add(value);
+                    onChanged();
+                } else {
+                    componentsBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder addComponents(int index, ipowdm.Ipowdm.Component value) {
+                if (componentsBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureComponentsIsMutable();
+                    components_.add(index, value);
+                    onChanged();
+                } else {
+                    componentsBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder addComponents(ipowdm.Ipowdm.Component.Builder builderForValue) {
+                if (componentsBuilder_ == null) {
+                    ensureComponentsIsMutable();
+                    components_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    componentsBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder addComponents(int index, ipowdm.Ipowdm.Component.Builder builderForValue) {
+                if (componentsBuilder_ == null) {
+                    ensureComponentsIsMutable();
+                    components_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    componentsBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder addAllComponents(java.lang.Iterable values) {
+                if (componentsBuilder_ == null) {
+                    ensureComponentsIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, components_);
+                    onChanged();
+                } else {
+                    componentsBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder clearComponents() {
+                if (componentsBuilder_ == null) {
+                    components_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
+                } else {
+                    componentsBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public Builder removeComponents(int index) {
+                if (componentsBuilder_ == null) {
+                    ensureComponentsIsMutable();
+                    components_.remove(index);
+                    onChanged();
+                } else {
+                    componentsBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public ipowdm.Ipowdm.Component.Builder getComponentsBuilder(int index) {
+                return getComponentsFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public ipowdm.Ipowdm.ComponentOrBuilder getComponentsOrBuilder(int index) {
+                if (componentsBuilder_ == null) {
+                    return components_.get(index);
+                } else {
+                    return componentsBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public java.util.List getComponentsOrBuilderList() {
+                if (componentsBuilder_ != null) {
+                    return componentsBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(components_);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public ipowdm.Ipowdm.Component.Builder addComponentsBuilder() {
+                return getComponentsFieldBuilder().addBuilder(ipowdm.Ipowdm.Component.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public ipowdm.Ipowdm.Component.Builder addComponentsBuilder(int index) {
+                return getComponentsFieldBuilder().addBuilder(index, ipowdm.Ipowdm.Component.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.Component components = 1;
+             */
+            public java.util.List getComponentsBuilderList() {
+                return getComponentsFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getComponentsFieldBuilder() {
+                if (componentsBuilder_ == null) {
+                    componentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(components_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    components_ = null;
+                }
+                return componentsBuilder_;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.Transceiver)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.Transceiver)
+        private static final ipowdm.Ipowdm.Transceiver DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.Transceiver();
+        }
+
+        public static ipowdm.Ipowdm.Transceiver getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public Transceiver parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.Transceiver getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    public interface IpowdmRuleSetOrBuilder extends // @@protoc_insertion_point(interface_extends:ipowdm.IpowdmRuleSet)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        java.util.List getSrcList();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        ipowdm.Ipowdm.RuleEndpoint getSrc(int index);
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        int getSrcCount();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        java.util.List getSrcOrBuilderList();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        ipowdm.Ipowdm.RuleEndpointOrBuilder getSrcOrBuilder(int index);
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        java.util.List getDstList();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        ipowdm.Ipowdm.RuleEndpoint getDst(int index);
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        int getDstCount();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        java.util.List getDstOrBuilderList();
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        ipowdm.Ipowdm.RuleEndpointOrBuilder getDstOrBuilder(int index);
+
+        /**
+         * int32 bw = 3;
+         * @return The bw.
+         */
+        int getBw();
+
+        /**
+         * string uuid = 4;
+         * @return The uuid.
+         */
+        java.lang.String getUuid();
+
+        /**
+         * string uuid = 4;
+         * @return The bytes for uuid.
+         */
+        com.google.protobuf.ByteString getUuidBytes();
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         * @return Whether the transceiver field is set.
+         */
+        boolean hasTransceiver();
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         * @return The transceiver.
+         */
+        ipowdm.Ipowdm.Transceiver getTransceiver();
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         */
+        ipowdm.Ipowdm.TransceiverOrBuilder getTransceiverOrBuilder();
+    }
+
+    /**
+     * Protobuf type {@code ipowdm.IpowdmRuleSet}
+     */
+    public static final class IpowdmRuleSet extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:ipowdm.IpowdmRuleSet)
+    IpowdmRuleSetOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use IpowdmRuleSet.newBuilder() to construct.
+        private IpowdmRuleSet(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private IpowdmRuleSet() {
+            src_ = java.util.Collections.emptyList();
+            dst_ = java.util.Collections.emptyList();
+            uuid_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new IpowdmRuleSet();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_IpowdmRuleSet_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return ipowdm.Ipowdm.internal_static_ipowdm_IpowdmRuleSet_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.IpowdmRuleSet.class, ipowdm.Ipowdm.IpowdmRuleSet.Builder.class);
+        }
+
+        public static final int SRC_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private java.util.List src_;
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        @java.lang.Override
+        public java.util.List getSrcList() {
+            return src_;
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        @java.lang.Override
+        public java.util.List getSrcOrBuilderList() {
+            return src_;
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        @java.lang.Override
+        public int getSrcCount() {
+            return src_.size();
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.RuleEndpoint getSrc(int index) {
+            return src_.get(index);
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint src = 1;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.RuleEndpointOrBuilder getSrcOrBuilder(int index) {
+            return src_.get(index);
+        }
+
+        public static final int DST_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private java.util.List dst_;
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        @java.lang.Override
+        public java.util.List getDstList() {
+            return dst_;
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        @java.lang.Override
+        public java.util.List getDstOrBuilderList() {
+            return dst_;
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        @java.lang.Override
+        public int getDstCount() {
+            return dst_.size();
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.RuleEndpoint getDst(int index) {
+            return dst_.get(index);
+        }
+
+        /**
+         * repeated .ipowdm.RuleEndpoint dst = 2;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.RuleEndpointOrBuilder getDstOrBuilder(int index) {
+            return dst_.get(index);
+        }
+
+        public static final int BW_FIELD_NUMBER = 3;
+
+        private int bw_ = 0;
+
+        /**
+         * int32 bw = 3;
+         * @return The bw.
+         */
+        @java.lang.Override
+        public int getBw() {
+            return bw_;
+        }
+
+        public static final int UUID_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object uuid_ = "";
+
+        /**
+         * string uuid = 4;
+         * @return The uuid.
+         */
+        @java.lang.Override
+        public java.lang.String getUuid() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                uuid_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string uuid = 4;
+         * @return The bytes for uuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getUuidBytes() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                uuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int TRANSCEIVER_FIELD_NUMBER = 5;
+
+        private ipowdm.Ipowdm.Transceiver transceiver_;
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         * @return Whether the transceiver field is set.
+         */
+        @java.lang.Override
+        public boolean hasTransceiver() {
+            return transceiver_ != null;
+        }
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         * @return The transceiver.
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.Transceiver getTransceiver() {
+            return transceiver_ == null ? ipowdm.Ipowdm.Transceiver.getDefaultInstance() : transceiver_;
+        }
+
+        /**
+         * .ipowdm.Transceiver transceiver = 5;
+         */
+        @java.lang.Override
+        public ipowdm.Ipowdm.TransceiverOrBuilder getTransceiverOrBuilder() {
+            return transceiver_ == null ? ipowdm.Ipowdm.Transceiver.getDefaultInstance() : transceiver_;
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            for (int i = 0; i < src_.size(); i++) {
+                output.writeMessage(1, src_.get(i));
+            }
+            for (int i = 0; i < dst_.size(); i++) {
+                output.writeMessage(2, dst_.get(i));
+            }
+            if (bw_ != 0) {
+                output.writeInt32(3, bw_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, uuid_);
+            }
+            if (transceiver_ != null) {
+                output.writeMessage(5, getTransceiver());
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            for (int i = 0; i < src_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, src_.get(i));
+            }
+            for (int i = 0; i < dst_.size(); i++) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, dst_.get(i));
+            }
+            if (bw_ != 0) {
+                size += com.google.protobuf.CodedOutputStream.computeInt32Size(3, bw_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, uuid_);
+            }
+            if (transceiver_ != null) {
+                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getTransceiver());
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof ipowdm.Ipowdm.IpowdmRuleSet)) {
+                return super.equals(obj);
+            }
+            ipowdm.Ipowdm.IpowdmRuleSet other = (ipowdm.Ipowdm.IpowdmRuleSet) obj;
+            if (!getSrcList().equals(other.getSrcList()))
+                return false;
+            if (!getDstList().equals(other.getDstList()))
+                return false;
+            if (getBw() != other.getBw())
+                return false;
+            if (!getUuid().equals(other.getUuid()))
+                return false;
+            if (hasTransceiver() != other.hasTransceiver())
+                return false;
+            if (hasTransceiver()) {
+                if (!getTransceiver().equals(other.getTransceiver()))
+                    return false;
+            }
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            if (getSrcCount() > 0) {
+                hash = (37 * hash) + SRC_FIELD_NUMBER;
+                hash = (53 * hash) + getSrcList().hashCode();
+            }
+            if (getDstCount() > 0) {
+                hash = (37 * hash) + DST_FIELD_NUMBER;
+                hash = (53 * hash) + getDstList().hashCode();
+            }
+            hash = (37 * hash) + BW_FIELD_NUMBER;
+            hash = (53 * hash) + getBw();
+            hash = (37 * hash) + UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getUuid().hashCode();
+            if (hasTransceiver()) {
+                hash = (37 * hash) + TRANSCEIVER_FIELD_NUMBER;
+                hash = (53 * hash) + getTransceiver().hashCode();
+            }
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(ipowdm.Ipowdm.IpowdmRuleSet prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code ipowdm.IpowdmRuleSet}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:ipowdm.IpowdmRuleSet)
+        ipowdm.Ipowdm.IpowdmRuleSetOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_IpowdmRuleSet_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_IpowdmRuleSet_fieldAccessorTable.ensureFieldAccessorsInitialized(ipowdm.Ipowdm.IpowdmRuleSet.class, ipowdm.Ipowdm.IpowdmRuleSet.Builder.class);
+            }
+
+            // Construct using ipowdm.Ipowdm.IpowdmRuleSet.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                if (srcBuilder_ == null) {
+                    src_ = java.util.Collections.emptyList();
+                } else {
+                    src_ = null;
+                    srcBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000001);
+                if (dstBuilder_ == null) {
+                    dst_ = java.util.Collections.emptyList();
+                } else {
+                    dst_ = null;
+                    dstBuilder_.clear();
+                }
+                bitField0_ = (bitField0_ & ~0x00000002);
+                bw_ = 0;
+                uuid_ = "";
+                transceiver_ = null;
+                if (transceiverBuilder_ != null) {
+                    transceiverBuilder_.dispose();
+                    transceiverBuilder_ = null;
+                }
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return ipowdm.Ipowdm.internal_static_ipowdm_IpowdmRuleSet_descriptor;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.IpowdmRuleSet getDefaultInstanceForType() {
+                return ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.IpowdmRuleSet build() {
+                ipowdm.Ipowdm.IpowdmRuleSet result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public ipowdm.Ipowdm.IpowdmRuleSet buildPartial() {
+                ipowdm.Ipowdm.IpowdmRuleSet result = new ipowdm.Ipowdm.IpowdmRuleSet(this);
+                buildPartialRepeatedFields(result);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartialRepeatedFields(ipowdm.Ipowdm.IpowdmRuleSet result) {
+                if (srcBuilder_ == null) {
+                    if (((bitField0_ & 0x00000001) != 0)) {
+                        src_ = java.util.Collections.unmodifiableList(src_);
+                        bitField0_ = (bitField0_ & ~0x00000001);
+                    }
+                    result.src_ = src_;
+                } else {
+                    result.src_ = srcBuilder_.build();
+                }
+                if (dstBuilder_ == null) {
+                    if (((bitField0_ & 0x00000002) != 0)) {
+                        dst_ = java.util.Collections.unmodifiableList(dst_);
+                        bitField0_ = (bitField0_ & ~0x00000002);
+                    }
+                    result.dst_ = dst_;
+                } else {
+                    result.dst_ = dstBuilder_.build();
+                }
+            }
+
+            private void buildPartial0(ipowdm.Ipowdm.IpowdmRuleSet result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.bw_ = bw_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.uuid_ = uuid_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.transceiver_ = transceiverBuilder_ == null ? transceiver_ : transceiverBuilder_.build();
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof ipowdm.Ipowdm.IpowdmRuleSet) {
+                    return mergeFrom((ipowdm.Ipowdm.IpowdmRuleSet) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(ipowdm.Ipowdm.IpowdmRuleSet other) {
+                if (other == ipowdm.Ipowdm.IpowdmRuleSet.getDefaultInstance())
+                    return this;
+                if (srcBuilder_ == null) {
+                    if (!other.src_.isEmpty()) {
+                        if (src_.isEmpty()) {
+                            src_ = other.src_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                        } else {
+                            ensureSrcIsMutable();
+                            src_.addAll(other.src_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.src_.isEmpty()) {
+                        if (srcBuilder_.isEmpty()) {
+                            srcBuilder_.dispose();
+                            srcBuilder_ = null;
+                            src_ = other.src_;
+                            bitField0_ = (bitField0_ & ~0x00000001);
+                            srcBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getSrcFieldBuilder() : null;
+                        } else {
+                            srcBuilder_.addAllMessages(other.src_);
+                        }
+                    }
+                }
+                if (dstBuilder_ == null) {
+                    if (!other.dst_.isEmpty()) {
+                        if (dst_.isEmpty()) {
+                            dst_ = other.dst_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                        } else {
+                            ensureDstIsMutable();
+                            dst_.addAll(other.dst_);
+                        }
+                        onChanged();
+                    }
+                } else {
+                    if (!other.dst_.isEmpty()) {
+                        if (dstBuilder_.isEmpty()) {
+                            dstBuilder_.dispose();
+                            dstBuilder_ = null;
+                            dst_ = other.dst_;
+                            bitField0_ = (bitField0_ & ~0x00000002);
+                            dstBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getDstFieldBuilder() : null;
+                        } else {
+                            dstBuilder_.addAllMessages(other.dst_);
+                        }
+                    }
+                }
+                if (other.getBw() != 0) {
+                    setBw(other.getBw());
+                }
+                if (!other.getUuid().isEmpty()) {
+                    uuid_ = other.uuid_;
+                    bitField0_ |= 0x00000008;
+                    onChanged();
+                }
+                if (other.hasTransceiver()) {
+                    mergeTransceiver(other.getTransceiver());
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    ipowdm.Ipowdm.RuleEndpoint m = input.readMessage(ipowdm.Ipowdm.RuleEndpoint.parser(), extensionRegistry);
+                                    if (srcBuilder_ == null) {
+                                        ensureSrcIsMutable();
+                                        src_.add(m);
+                                    } else {
+                                        srcBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    ipowdm.Ipowdm.RuleEndpoint m = input.readMessage(ipowdm.Ipowdm.RuleEndpoint.parser(), extensionRegistry);
+                                    if (dstBuilder_ == null) {
+                                        ensureDstIsMutable();
+                                        dst_.add(m);
+                                    } else {
+                                        dstBuilder_.addMessage(m);
+                                    }
+                                    break;
+                                }
+                            // case 18
+                            case 24:
+                                {
+                                    bw_ = input.readInt32();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 24
+                            case 34:
+                                {
+                                    uuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    input.readMessage(getTransceiverFieldBuilder().getBuilder(), extensionRegistry);
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.util.List src_ = java.util.Collections.emptyList();
+
+            private void ensureSrcIsMutable() {
+                if (!((bitField0_ & 0x00000001) != 0)) {
+                    src_ = new java.util.ArrayList(src_);
+                    bitField0_ |= 0x00000001;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 srcBuilder_;
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public java.util.List getSrcList() {
+                if (srcBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(src_);
+                } else {
+                    return srcBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public int getSrcCount() {
+                if (srcBuilder_ == null) {
+                    return src_.size();
+                } else {
+                    return srcBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint getSrc(int index) {
+                if (srcBuilder_ == null) {
+                    return src_.get(index);
+                } else {
+                    return srcBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder setSrc(int index, ipowdm.Ipowdm.RuleEndpoint value) {
+                if (srcBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureSrcIsMutable();
+                    src_.set(index, value);
+                    onChanged();
+                } else {
+                    srcBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder setSrc(int index, ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (srcBuilder_ == null) {
+                    ensureSrcIsMutable();
+                    src_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    srcBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder addSrc(ipowdm.Ipowdm.RuleEndpoint value) {
+                if (srcBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureSrcIsMutable();
+                    src_.add(value);
+                    onChanged();
+                } else {
+                    srcBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder addSrc(int index, ipowdm.Ipowdm.RuleEndpoint value) {
+                if (srcBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureSrcIsMutable();
+                    src_.add(index, value);
+                    onChanged();
+                } else {
+                    srcBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder addSrc(ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (srcBuilder_ == null) {
+                    ensureSrcIsMutable();
+                    src_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    srcBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder addSrc(int index, ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (srcBuilder_ == null) {
+                    ensureSrcIsMutable();
+                    src_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    srcBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder addAllSrc(java.lang.Iterable values) {
+                if (srcBuilder_ == null) {
+                    ensureSrcIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, src_);
+                    onChanged();
+                } else {
+                    srcBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder clearSrc() {
+                if (srcBuilder_ == null) {
+                    src_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000001);
+                    onChanged();
+                } else {
+                    srcBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public Builder removeSrc(int index) {
+                if (srcBuilder_ == null) {
+                    ensureSrcIsMutable();
+                    src_.remove(index);
+                    onChanged();
+                } else {
+                    srcBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder getSrcBuilder(int index) {
+                return getSrcFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public ipowdm.Ipowdm.RuleEndpointOrBuilder getSrcOrBuilder(int index) {
+                if (srcBuilder_ == null) {
+                    return src_.get(index);
+                } else {
+                    return srcBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public java.util.List getSrcOrBuilderList() {
+                if (srcBuilder_ != null) {
+                    return srcBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(src_);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder addSrcBuilder() {
+                return getSrcFieldBuilder().addBuilder(ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder addSrcBuilder(int index) {
+                return getSrcFieldBuilder().addBuilder(index, ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint src = 1;
+             */
+            public java.util.List getSrcBuilderList() {
+                return getSrcFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getSrcFieldBuilder() {
+                if (srcBuilder_ == null) {
+                    srcBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(src_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
+                    src_ = null;
+                }
+                return srcBuilder_;
+            }
+
+            private java.util.List dst_ = java.util.Collections.emptyList();
+
+            private void ensureDstIsMutable() {
+                if (!((bitField0_ & 0x00000002) != 0)) {
+                    dst_ = new java.util.ArrayList(dst_);
+                    bitField0_ |= 0x00000002;
+                }
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 dstBuilder_;
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public java.util.List getDstList() {
+                if (dstBuilder_ == null) {
+                    return java.util.Collections.unmodifiableList(dst_);
+                } else {
+                    return dstBuilder_.getMessageList();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public int getDstCount() {
+                if (dstBuilder_ == null) {
+                    return dst_.size();
+                } else {
+                    return dstBuilder_.getCount();
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint getDst(int index) {
+                if (dstBuilder_ == null) {
+                    return dst_.get(index);
+                } else {
+                    return dstBuilder_.getMessage(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder setDst(int index, ipowdm.Ipowdm.RuleEndpoint value) {
+                if (dstBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDstIsMutable();
+                    dst_.set(index, value);
+                    onChanged();
+                } else {
+                    dstBuilder_.setMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder setDst(int index, ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (dstBuilder_ == null) {
+                    ensureDstIsMutable();
+                    dst_.set(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    dstBuilder_.setMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder addDst(ipowdm.Ipowdm.RuleEndpoint value) {
+                if (dstBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDstIsMutable();
+                    dst_.add(value);
+                    onChanged();
+                } else {
+                    dstBuilder_.addMessage(value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder addDst(int index, ipowdm.Ipowdm.RuleEndpoint value) {
+                if (dstBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    ensureDstIsMutable();
+                    dst_.add(index, value);
+                    onChanged();
+                } else {
+                    dstBuilder_.addMessage(index, value);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder addDst(ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (dstBuilder_ == null) {
+                    ensureDstIsMutable();
+                    dst_.add(builderForValue.build());
+                    onChanged();
+                } else {
+                    dstBuilder_.addMessage(builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder addDst(int index, ipowdm.Ipowdm.RuleEndpoint.Builder builderForValue) {
+                if (dstBuilder_ == null) {
+                    ensureDstIsMutable();
+                    dst_.add(index, builderForValue.build());
+                    onChanged();
+                } else {
+                    dstBuilder_.addMessage(index, builderForValue.build());
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder addAllDst(java.lang.Iterable values) {
+                if (dstBuilder_ == null) {
+                    ensureDstIsMutable();
+                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, dst_);
+                    onChanged();
+                } else {
+                    dstBuilder_.addAllMessages(values);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder clearDst() {
+                if (dstBuilder_ == null) {
+                    dst_ = java.util.Collections.emptyList();
+                    bitField0_ = (bitField0_ & ~0x00000002);
+                    onChanged();
+                } else {
+                    dstBuilder_.clear();
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public Builder removeDst(int index) {
+                if (dstBuilder_ == null) {
+                    ensureDstIsMutable();
+                    dst_.remove(index);
+                    onChanged();
+                } else {
+                    dstBuilder_.remove(index);
+                }
+                return this;
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder getDstBuilder(int index) {
+                return getDstFieldBuilder().getBuilder(index);
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public ipowdm.Ipowdm.RuleEndpointOrBuilder getDstOrBuilder(int index) {
+                if (dstBuilder_ == null) {
+                    return dst_.get(index);
+                } else {
+                    return dstBuilder_.getMessageOrBuilder(index);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public java.util.List getDstOrBuilderList() {
+                if (dstBuilder_ != null) {
+                    return dstBuilder_.getMessageOrBuilderList();
+                } else {
+                    return java.util.Collections.unmodifiableList(dst_);
+                }
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder addDstBuilder() {
+                return getDstFieldBuilder().addBuilder(ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public ipowdm.Ipowdm.RuleEndpoint.Builder addDstBuilder(int index) {
+                return getDstFieldBuilder().addBuilder(index, ipowdm.Ipowdm.RuleEndpoint.getDefaultInstance());
+            }
+
+            /**
+             * repeated .ipowdm.RuleEndpoint dst = 2;
+             */
+            public java.util.List getDstBuilderList() {
+                return getDstFieldBuilder().getBuilderList();
+            }
+
+            private com.google.protobuf.RepeatedFieldBuilderV3 getDstFieldBuilder() {
+                if (dstBuilder_ == null) {
+                    dstBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3(dst_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean());
+                    dst_ = null;
+                }
+                return dstBuilder_;
+            }
+
+            private int bw_;
+
+            /**
+             * int32 bw = 3;
+             * @return The bw.
+             */
+            @java.lang.Override
+            public int getBw() {
+                return bw_;
+            }
+
+            /**
+             * int32 bw = 3;
+             * @param value The bw to set.
+             * @return This builder for chaining.
+             */
+            public Builder setBw(int value) {
+                bw_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * int32 bw = 3;
+             * @return This builder for chaining.
+             */
+            public Builder clearBw() {
+                bitField0_ = (bitField0_ & ~0x00000004);
+                bw_ = 0;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object uuid_ = "";
+
+            /**
+             * string uuid = 4;
+             * @return The uuid.
+             */
+            public java.lang.String getUuid() {
+                java.lang.Object ref = uuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    uuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string uuid = 4;
+             * @return The bytes for uuid.
+             */
+            public com.google.protobuf.ByteString getUuidBytes() {
+                java.lang.Object ref = uuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    uuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string uuid = 4;
+             * @param value The uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                uuid_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 4;
+             * @return This builder for chaining.
+             */
+            public Builder clearUuid() {
+                uuid_ = getDefaultInstance().getUuid();
+                bitField0_ = (bitField0_ & ~0x00000008);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 4;
+             * @param value The bytes for uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                uuid_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            private ipowdm.Ipowdm.Transceiver transceiver_;
+
+            private com.google.protobuf.SingleFieldBuilderV3 transceiverBuilder_;
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             * @return Whether the transceiver field is set.
+             */
+            public boolean hasTransceiver() {
+                return ((bitField0_ & 0x00000010) != 0);
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             * @return The transceiver.
+             */
+            public ipowdm.Ipowdm.Transceiver getTransceiver() {
+                if (transceiverBuilder_ == null) {
+                    return transceiver_ == null ? ipowdm.Ipowdm.Transceiver.getDefaultInstance() : transceiver_;
+                } else {
+                    return transceiverBuilder_.getMessage();
+                }
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public Builder setTransceiver(ipowdm.Ipowdm.Transceiver value) {
+                if (transceiverBuilder_ == null) {
+                    if (value == null) {
+                        throw new NullPointerException();
+                    }
+                    transceiver_ = value;
+                } else {
+                    transceiverBuilder_.setMessage(value);
+                }
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public Builder setTransceiver(ipowdm.Ipowdm.Transceiver.Builder builderForValue) {
+                if (transceiverBuilder_ == null) {
+                    transceiver_ = builderForValue.build();
+                } else {
+                    transceiverBuilder_.setMessage(builderForValue.build());
+                }
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public Builder mergeTransceiver(ipowdm.Ipowdm.Transceiver value) {
+                if (transceiverBuilder_ == null) {
+                    if (((bitField0_ & 0x00000010) != 0) && transceiver_ != null && transceiver_ != ipowdm.Ipowdm.Transceiver.getDefaultInstance()) {
+                        getTransceiverBuilder().mergeFrom(value);
+                    } else {
+                        transceiver_ = value;
+                    }
+                } else {
+                    transceiverBuilder_.mergeFrom(value);
+                }
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public Builder clearTransceiver() {
+                bitField0_ = (bitField0_ & ~0x00000010);
+                transceiver_ = null;
+                if (transceiverBuilder_ != null) {
+                    transceiverBuilder_.dispose();
+                    transceiverBuilder_ = null;
+                }
+                onChanged();
+                return this;
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public ipowdm.Ipowdm.Transceiver.Builder getTransceiverBuilder() {
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return getTransceiverFieldBuilder().getBuilder();
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            public ipowdm.Ipowdm.TransceiverOrBuilder getTransceiverOrBuilder() {
+                if (transceiverBuilder_ != null) {
+                    return transceiverBuilder_.getMessageOrBuilder();
+                } else {
+                    return transceiver_ == null ? ipowdm.Ipowdm.Transceiver.getDefaultInstance() : transceiver_;
+                }
+            }
+
+            /**
+             * .ipowdm.Transceiver transceiver = 5;
+             */
+            private com.google.protobuf.SingleFieldBuilderV3 getTransceiverFieldBuilder() {
+                if (transceiverBuilder_ == null) {
+                    transceiverBuilder_ = new com.google.protobuf.SingleFieldBuilderV3(getTransceiver(), getParentForChildren(), isClean());
+                    transceiver_ = null;
+                }
+                return transceiverBuilder_;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:ipowdm.IpowdmRuleSet)
+        }
+
+        // @@protoc_insertion_point(class_scope:ipowdm.IpowdmRuleSet)
+        private static final ipowdm.Ipowdm.IpowdmRuleSet DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new ipowdm.Ipowdm.IpowdmRuleSet();
+        }
+
+        public static ipowdm.Ipowdm.IpowdmRuleSet getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public IpowdmRuleSet parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public ipowdm.Ipowdm.IpowdmRuleSet getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_RuleEndpoint_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_RuleEndpoint_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_DigitalSubCarrierId_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_DigitalSubCarrierId_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_DigitalSubCarriersGroup_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_DigitalSubCarriersGroup_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_Component_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_Component_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_Transceiver_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_Transceiver_fieldAccessorTable;
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_ipowdm_IpowdmRuleSet_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_ipowdm_IpowdmRuleSet_fieldAccessorTable;
+
+    public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+        return descriptor;
+    }
+
+    private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
+
+    static {
+        java.lang.String[] descriptorData = { "\n\014ipowdm.proto\022\006ipowdm\"R\n\014RuleEndpoint\022\014" + "\n\004uuid\030\001 \001(\t\022\022\n\nip_address\030\002 \001(\t\022\017\n\007ip_m" + "ask\030\003 \001(\t\022\017\n\007vlan_id\030\004 \001(\005\"=\n\023DigitalSub" + "CarrierId\022\026\n\016sub_carrier_id\030\001 \001(\005\022\016\n\006act" + "ive\030\002 \001(\t\"}\n\027DigitalSubCarriersGroup\022%\n\035" + "digital_sub_carriers_group_id\030\001 \001(\005\022;\n\026d" + "igital_sub_carrier_id\030\004 \003(\0132\033.ipowdm.Dig" + "italSubCarrierId\"\273\001\n\tComponent\022\014\n\004name\030\001" + " \001(\t\022\021\n\tfrequency\030\002 \001(\002\022\033\n\023target_output" + "_power\030\003 \001(\002\022\030\n\020operational_mode\030\004 \001(\005\022C" + "\n\032digital_sub_carriers_group\030\005 \003(\0132\037.ipo" + "wdm.DigitalSubCarriersGroup\022\021\n\toperation" + "\030\006 \001(\t\"4\n\013Transceiver\022%\n\ncomponents\030\001 \003(" + "\0132\021.ipowdm.Component\"\231\001\n\rIpowdmRuleSet\022!" + "\n\003src\030\001 \003(\0132\024.ipowdm.RuleEndpoint\022!\n\003dst" + "\030\002 \003(\0132\024.ipowdm.RuleEndpoint\022\n\n\002bw\030\003 \001(\005" + "\022\014\n\004uuid\030\004 \001(\t\022(\n\013transceiver\030\005 \001(\0132\023.ip" + "owdm.Transceiverb\006proto3" };
+        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
+        internal_static_ipowdm_RuleEndpoint_descriptor = getDescriptor().getMessageTypes().get(0);
+        internal_static_ipowdm_RuleEndpoint_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_RuleEndpoint_descriptor, new java.lang.String[] { "Uuid", "IpAddress", "IpMask", "VlanId" });
+        internal_static_ipowdm_DigitalSubCarrierId_descriptor = getDescriptor().getMessageTypes().get(1);
+        internal_static_ipowdm_DigitalSubCarrierId_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_DigitalSubCarrierId_descriptor, new java.lang.String[] { "SubCarrierId", "Active" });
+        internal_static_ipowdm_DigitalSubCarriersGroup_descriptor = getDescriptor().getMessageTypes().get(2);
+        internal_static_ipowdm_DigitalSubCarriersGroup_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_DigitalSubCarriersGroup_descriptor, new java.lang.String[] { "DigitalSubCarriersGroupId", "DigitalSubCarrierId" });
+        internal_static_ipowdm_Component_descriptor = getDescriptor().getMessageTypes().get(3);
+        internal_static_ipowdm_Component_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_Component_descriptor, new java.lang.String[] { "Name", "Frequency", "TargetOutputPower", "OperationalMode", "DigitalSubCarriersGroup", "Operation" });
+        internal_static_ipowdm_Transceiver_descriptor = getDescriptor().getMessageTypes().get(4);
+        internal_static_ipowdm_Transceiver_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_Transceiver_descriptor, new java.lang.String[] { "Components" });
+        internal_static_ipowdm_IpowdmRuleSet_descriptor = getDescriptor().getMessageTypes().get(5);
+        internal_static_ipowdm_IpowdmRuleSet_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_ipowdm_IpowdmRuleSet_descriptor, new java.lang.String[] { "Src", "Dst", "Bw", "Uuid", "Transceiver" });
+    }
+    // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/tapi_lsp/TapiLsp.java b/src/policy/target/generated-sources/grpc/tapi_lsp/TapiLsp.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8f5145bd42a8f2e62e949d0f9762b91b59da360
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/tapi_lsp/TapiLsp.java
@@ -0,0 +1,3031 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: tapi_lsp.proto
+package tapi_lsp;
+
+public final class TapiLsp {
+
+    private TapiLsp() {
+    }
+
+    public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {
+    }
+
+    public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) {
+        registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
+    }
+
+    public interface TapiLspRuleSetOrBuilder extends // @@protoc_insertion_point(interface_extends:tapi_lsp.TapiLspRuleSet)
+    com.google.protobuf.MessageOrBuilder {
+
+        /**
+         * string input_sip = 1;
+         * @return The inputSip.
+         */
+        java.lang.String getInputSip();
+
+        /**
+         * string input_sip = 1;
+         * @return The bytes for inputSip.
+         */
+        com.google.protobuf.ByteString getInputSipBytes();
+
+        /**
+         * string output_sip = 2;
+         * @return The outputSip.
+         */
+        java.lang.String getOutputSip();
+
+        /**
+         * string output_sip = 2;
+         * @return The bytes for outputSip.
+         */
+        com.google.protobuf.ByteString getOutputSipBytes();
+
+        /**
+         * string uuid = 3;
+         * @return The uuid.
+         */
+        java.lang.String getUuid();
+
+        /**
+         * string uuid = 3;
+         * @return The bytes for uuid.
+         */
+        com.google.protobuf.ByteString getUuidBytes();
+
+        /**
+         * string bw = 4;
+         * @return The bw.
+         */
+        java.lang.String getBw();
+
+        /**
+         * string bw = 4;
+         * @return The bytes for bw.
+         */
+        com.google.protobuf.ByteString getBwBytes();
+
+        /**
+         * string tenant_uuid = 5;
+         * @return The tenantUuid.
+         */
+        java.lang.String getTenantUuid();
+
+        /**
+         * string tenant_uuid = 5;
+         * @return The bytes for tenantUuid.
+         */
+        com.google.protobuf.ByteString getTenantUuidBytes();
+
+        /**
+         * string layer_protocol_name = 6;
+         * @return The layerProtocolName.
+         */
+        java.lang.String getLayerProtocolName();
+
+        /**
+         * string layer_protocol_name = 6;
+         * @return The bytes for layerProtocolName.
+         */
+        com.google.protobuf.ByteString getLayerProtocolNameBytes();
+
+        /**
+         * string layer_protocol_qualifier = 7;
+         * @return The layerProtocolQualifier.
+         */
+        java.lang.String getLayerProtocolQualifier();
+
+        /**
+         * string layer_protocol_qualifier = 7;
+         * @return The bytes for layerProtocolQualifier.
+         */
+        com.google.protobuf.ByteString getLayerProtocolQualifierBytes();
+
+        /**
+         * string lower_frequency_mhz = 8;
+         * @return The lowerFrequencyMhz.
+         */
+        java.lang.String getLowerFrequencyMhz();
+
+        /**
+         * string lower_frequency_mhz = 8;
+         * @return The bytes for lowerFrequencyMhz.
+         */
+        com.google.protobuf.ByteString getLowerFrequencyMhzBytes();
+
+        /**
+         * string upper_frequency_mhz = 9;
+         * @return The upperFrequencyMhz.
+         */
+        java.lang.String getUpperFrequencyMhz();
+
+        /**
+         * string upper_frequency_mhz = 9;
+         * @return The bytes for upperFrequencyMhz.
+         */
+        com.google.protobuf.ByteString getUpperFrequencyMhzBytes();
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @return A list containing the linkUuidPath.
+         */
+        java.util.List getLinkUuidPathList();
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @return The count of linkUuidPath.
+         */
+        int getLinkUuidPathCount();
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @param index The index of the element to return.
+         * @return The linkUuidPath at the given index.
+         */
+        java.lang.String getLinkUuidPath(int index);
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @param index The index of the value to return.
+         * @return The bytes of the linkUuidPath at the given index.
+         */
+        com.google.protobuf.ByteString getLinkUuidPathBytes(int index);
+
+        /**
+         * string granularity = 11;
+         * @return The granularity.
+         */
+        java.lang.String getGranularity();
+
+        /**
+         * string granularity = 11;
+         * @return The bytes for granularity.
+         */
+        com.google.protobuf.ByteString getGranularityBytes();
+
+        /**
+         * string grid_type = 12;
+         * @return The gridType.
+         */
+        java.lang.String getGridType();
+
+        /**
+         * string grid_type = 12;
+         * @return The bytes for gridType.
+         */
+        com.google.protobuf.ByteString getGridTypeBytes();
+
+        /**
+         * string direction = 13;
+         * @return The direction.
+         */
+        java.lang.String getDirection();
+
+        /**
+         * string direction = 13;
+         * @return The bytes for direction.
+         */
+        com.google.protobuf.ByteString getDirectionBytes();
+
+        /**
+         * string capacity_unit = 14;
+         * @return The capacityUnit.
+         */
+        java.lang.String getCapacityUnit();
+
+        /**
+         * string capacity_unit = 14;
+         * @return The bytes for capacityUnit.
+         */
+        com.google.protobuf.ByteString getCapacityUnitBytes();
+
+        /**
+         * string capacity_value = 15;
+         * @return The capacityValue.
+         */
+        java.lang.String getCapacityValue();
+
+        /**
+         * string capacity_value = 15;
+         * @return The bytes for capacityValue.
+         */
+        com.google.protobuf.ByteString getCapacityValueBytes();
+
+        /**
+         * string route_objective_function = 16;
+         * @return The routeObjectiveFunction.
+         */
+        java.lang.String getRouteObjectiveFunction();
+
+        /**
+         * string route_objective_function = 16;
+         * @return The bytes for routeObjectiveFunction.
+         */
+        com.google.protobuf.ByteString getRouteObjectiveFunctionBytes();
+
+        /**
+         * string url = 17;
+         * @return The url.
+         */
+        java.lang.String getUrl();
+
+        /**
+         * string url = 17;
+         * @return The bytes for url.
+         */
+        com.google.protobuf.ByteString getUrlBytes();
+    }
+
+    /**
+     * Protobuf type {@code tapi_lsp.TapiLspRuleSet}
+     */
+    public static final class TapiLspRuleSet extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:tapi_lsp.TapiLspRuleSet)
+    TapiLspRuleSetOrBuilder {
+
+        private static final long serialVersionUID = 0L;
+
+        // Use TapiLspRuleSet.newBuilder() to construct.
+        private TapiLspRuleSet(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+            super(builder);
+        }
+
+        private TapiLspRuleSet() {
+            inputSip_ = "";
+            outputSip_ = "";
+            uuid_ = "";
+            bw_ = "";
+            tenantUuid_ = "";
+            layerProtocolName_ = "";
+            layerProtocolQualifier_ = "";
+            lowerFrequencyMhz_ = "";
+            upperFrequencyMhz_ = "";
+            linkUuidPath_ = com.google.protobuf.LazyStringArrayList.emptyList();
+            granularity_ = "";
+            gridType_ = "";
+            direction_ = "";
+            capacityUnit_ = "";
+            capacityValue_ = "";
+            routeObjectiveFunction_ = "";
+            url_ = "";
+        }
+
+        @java.lang.Override
+        @SuppressWarnings({ "unused" })
+        protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
+            return new TapiLspRuleSet();
+        }
+
+        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+            return tapi_lsp.TapiLsp.internal_static_tapi_lsp_TapiLspRuleSet_descriptor;
+        }
+
+        @java.lang.Override
+        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+            return tapi_lsp.TapiLsp.internal_static_tapi_lsp_TapiLspRuleSet_fieldAccessorTable.ensureFieldAccessorsInitialized(tapi_lsp.TapiLsp.TapiLspRuleSet.class, tapi_lsp.TapiLsp.TapiLspRuleSet.Builder.class);
+        }
+
+        public static final int INPUT_SIP_FIELD_NUMBER = 1;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object inputSip_ = "";
+
+        /**
+         * string input_sip = 1;
+         * @return The inputSip.
+         */
+        @java.lang.Override
+        public java.lang.String getInputSip() {
+            java.lang.Object ref = inputSip_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                inputSip_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string input_sip = 1;
+         * @return The bytes for inputSip.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getInputSipBytes() {
+            java.lang.Object ref = inputSip_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                inputSip_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int OUTPUT_SIP_FIELD_NUMBER = 2;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object outputSip_ = "";
+
+        /**
+         * string output_sip = 2;
+         * @return The outputSip.
+         */
+        @java.lang.Override
+        public java.lang.String getOutputSip() {
+            java.lang.Object ref = outputSip_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                outputSip_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string output_sip = 2;
+         * @return The bytes for outputSip.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getOutputSipBytes() {
+            java.lang.Object ref = outputSip_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                outputSip_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int UUID_FIELD_NUMBER = 3;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object uuid_ = "";
+
+        /**
+         * string uuid = 3;
+         * @return The uuid.
+         */
+        @java.lang.Override
+        public java.lang.String getUuid() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                uuid_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string uuid = 3;
+         * @return The bytes for uuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getUuidBytes() {
+            java.lang.Object ref = uuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                uuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int BW_FIELD_NUMBER = 4;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object bw_ = "";
+
+        /**
+         * string bw = 4;
+         * @return The bw.
+         */
+        @java.lang.Override
+        public java.lang.String getBw() {
+            java.lang.Object ref = bw_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                bw_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string bw = 4;
+         * @return The bytes for bw.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getBwBytes() {
+            java.lang.Object ref = bw_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                bw_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int TENANT_UUID_FIELD_NUMBER = 5;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object tenantUuid_ = "";
+
+        /**
+         * string tenant_uuid = 5;
+         * @return The tenantUuid.
+         */
+        @java.lang.Override
+        public java.lang.String getTenantUuid() {
+            java.lang.Object ref = tenantUuid_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                tenantUuid_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string tenant_uuid = 5;
+         * @return The bytes for tenantUuid.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getTenantUuidBytes() {
+            java.lang.Object ref = tenantUuid_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                tenantUuid_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int LAYER_PROTOCOL_NAME_FIELD_NUMBER = 6;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object layerProtocolName_ = "";
+
+        /**
+         * string layer_protocol_name = 6;
+         * @return The layerProtocolName.
+         */
+        @java.lang.Override
+        public java.lang.String getLayerProtocolName() {
+            java.lang.Object ref = layerProtocolName_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                layerProtocolName_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string layer_protocol_name = 6;
+         * @return The bytes for layerProtocolName.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getLayerProtocolNameBytes() {
+            java.lang.Object ref = layerProtocolName_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                layerProtocolName_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int LAYER_PROTOCOL_QUALIFIER_FIELD_NUMBER = 7;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object layerProtocolQualifier_ = "";
+
+        /**
+         * string layer_protocol_qualifier = 7;
+         * @return The layerProtocolQualifier.
+         */
+        @java.lang.Override
+        public java.lang.String getLayerProtocolQualifier() {
+            java.lang.Object ref = layerProtocolQualifier_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                layerProtocolQualifier_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string layer_protocol_qualifier = 7;
+         * @return The bytes for layerProtocolQualifier.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getLayerProtocolQualifierBytes() {
+            java.lang.Object ref = layerProtocolQualifier_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                layerProtocolQualifier_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int LOWER_FREQUENCY_MHZ_FIELD_NUMBER = 8;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object lowerFrequencyMhz_ = "";
+
+        /**
+         * string lower_frequency_mhz = 8;
+         * @return The lowerFrequencyMhz.
+         */
+        @java.lang.Override
+        public java.lang.String getLowerFrequencyMhz() {
+            java.lang.Object ref = lowerFrequencyMhz_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                lowerFrequencyMhz_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string lower_frequency_mhz = 8;
+         * @return The bytes for lowerFrequencyMhz.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getLowerFrequencyMhzBytes() {
+            java.lang.Object ref = lowerFrequencyMhz_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                lowerFrequencyMhz_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int UPPER_FREQUENCY_MHZ_FIELD_NUMBER = 9;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object upperFrequencyMhz_ = "";
+
+        /**
+         * string upper_frequency_mhz = 9;
+         * @return The upperFrequencyMhz.
+         */
+        @java.lang.Override
+        public java.lang.String getUpperFrequencyMhz() {
+            java.lang.Object ref = upperFrequencyMhz_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                upperFrequencyMhz_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string upper_frequency_mhz = 9;
+         * @return The bytes for upperFrequencyMhz.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getUpperFrequencyMhzBytes() {
+            java.lang.Object ref = upperFrequencyMhz_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                upperFrequencyMhz_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int LINK_UUID_PATH_FIELD_NUMBER = 10;
+
+        @SuppressWarnings("serial")
+        private com.google.protobuf.LazyStringArrayList linkUuidPath_ = com.google.protobuf.LazyStringArrayList.emptyList();
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @return A list containing the linkUuidPath.
+         */
+        public com.google.protobuf.ProtocolStringList getLinkUuidPathList() {
+            return linkUuidPath_;
+        }
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @return The count of linkUuidPath.
+         */
+        public int getLinkUuidPathCount() {
+            return linkUuidPath_.size();
+        }
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @param index The index of the element to return.
+         * @return The linkUuidPath at the given index.
+         */
+        public java.lang.String getLinkUuidPath(int index) {
+            return linkUuidPath_.get(index);
+        }
+
+        /**
+         * repeated string link_uuid_path = 10;
+         * @param index The index of the value to return.
+         * @return The bytes of the linkUuidPath at the given index.
+         */
+        public com.google.protobuf.ByteString getLinkUuidPathBytes(int index) {
+            return linkUuidPath_.getByteString(index);
+        }
+
+        public static final int GRANULARITY_FIELD_NUMBER = 11;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object granularity_ = "";
+
+        /**
+         * string granularity = 11;
+         * @return The granularity.
+         */
+        @java.lang.Override
+        public java.lang.String getGranularity() {
+            java.lang.Object ref = granularity_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                granularity_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string granularity = 11;
+         * @return The bytes for granularity.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getGranularityBytes() {
+            java.lang.Object ref = granularity_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                granularity_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int GRID_TYPE_FIELD_NUMBER = 12;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object gridType_ = "";
+
+        /**
+         * string grid_type = 12;
+         * @return The gridType.
+         */
+        @java.lang.Override
+        public java.lang.String getGridType() {
+            java.lang.Object ref = gridType_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                gridType_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string grid_type = 12;
+         * @return The bytes for gridType.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getGridTypeBytes() {
+            java.lang.Object ref = gridType_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                gridType_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int DIRECTION_FIELD_NUMBER = 13;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object direction_ = "";
+
+        /**
+         * string direction = 13;
+         * @return The direction.
+         */
+        @java.lang.Override
+        public java.lang.String getDirection() {
+            java.lang.Object ref = direction_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                direction_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string direction = 13;
+         * @return The bytes for direction.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getDirectionBytes() {
+            java.lang.Object ref = direction_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                direction_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int CAPACITY_UNIT_FIELD_NUMBER = 14;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object capacityUnit_ = "";
+
+        /**
+         * string capacity_unit = 14;
+         * @return The capacityUnit.
+         */
+        @java.lang.Override
+        public java.lang.String getCapacityUnit() {
+            java.lang.Object ref = capacityUnit_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                capacityUnit_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string capacity_unit = 14;
+         * @return The bytes for capacityUnit.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getCapacityUnitBytes() {
+            java.lang.Object ref = capacityUnit_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                capacityUnit_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int CAPACITY_VALUE_FIELD_NUMBER = 15;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object capacityValue_ = "";
+
+        /**
+         * string capacity_value = 15;
+         * @return The capacityValue.
+         */
+        @java.lang.Override
+        public java.lang.String getCapacityValue() {
+            java.lang.Object ref = capacityValue_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                capacityValue_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string capacity_value = 15;
+         * @return The bytes for capacityValue.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getCapacityValueBytes() {
+            java.lang.Object ref = capacityValue_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                capacityValue_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int ROUTE_OBJECTIVE_FUNCTION_FIELD_NUMBER = 16;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object routeObjectiveFunction_ = "";
+
+        /**
+         * string route_objective_function = 16;
+         * @return The routeObjectiveFunction.
+         */
+        @java.lang.Override
+        public java.lang.String getRouteObjectiveFunction() {
+            java.lang.Object ref = routeObjectiveFunction_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                routeObjectiveFunction_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string route_objective_function = 16;
+         * @return The bytes for routeObjectiveFunction.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getRouteObjectiveFunctionBytes() {
+            java.lang.Object ref = routeObjectiveFunction_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                routeObjectiveFunction_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        public static final int URL_FIELD_NUMBER = 17;
+
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object url_ = "";
+
+        /**
+         * string url = 17;
+         * @return The url.
+         */
+        @java.lang.Override
+        public java.lang.String getUrl() {
+            java.lang.Object ref = url_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                url_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * string url = 17;
+         * @return The bytes for url.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString getUrlBytes() {
+            java.lang.Object ref = url_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                url_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
+        private byte memoizedIsInitialized = -1;
+
+        @java.lang.Override
+        public final boolean isInitialized() {
+            byte isInitialized = memoizedIsInitialized;
+            if (isInitialized == 1)
+                return true;
+            if (isInitialized == 0)
+                return false;
+            memoizedIsInitialized = 1;
+            return true;
+        }
+
+        @java.lang.Override
+        public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(inputSip_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 1, inputSip_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(outputSip_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 2, outputSip_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 3, uuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(bw_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 4, bw_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tenantUuid_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 5, tenantUuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(layerProtocolName_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 6, layerProtocolName_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(layerProtocolQualifier_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 7, layerProtocolQualifier_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lowerFrequencyMhz_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 8, lowerFrequencyMhz_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(upperFrequencyMhz_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 9, upperFrequencyMhz_);
+            }
+            for (int i = 0; i < linkUuidPath_.size(); i++) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 10, linkUuidPath_.getRaw(i));
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(granularity_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 11, granularity_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(gridType_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 12, gridType_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(direction_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 13, direction_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(capacityUnit_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 14, capacityUnit_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(capacityValue_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 15, capacityValue_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(routeObjectiveFunction_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 16, routeObjectiveFunction_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(url_)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 17, url_);
+            }
+            getUnknownFields().writeTo(output);
+        }
+
+        @java.lang.Override
+        public int getSerializedSize() {
+            int size = memoizedSize;
+            if (size != -1)
+                return size;
+            size = 0;
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(inputSip_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, inputSip_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(outputSip_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, outputSip_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(uuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, uuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(bw_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, bw_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(tenantUuid_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, tenantUuid_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(layerProtocolName_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, layerProtocolName_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(layerProtocolQualifier_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, layerProtocolQualifier_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(lowerFrequencyMhz_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, lowerFrequencyMhz_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(upperFrequencyMhz_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, upperFrequencyMhz_);
+            }
+            {
+                int dataSize = 0;
+                for (int i = 0; i < linkUuidPath_.size(); i++) {
+                    dataSize += computeStringSizeNoTag(linkUuidPath_.getRaw(i));
+                }
+                size += dataSize;
+                size += 1 * getLinkUuidPathList().size();
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(granularity_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, granularity_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(gridType_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, gridType_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(direction_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, direction_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(capacityUnit_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, capacityUnit_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(capacityValue_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(15, capacityValue_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(routeObjectiveFunction_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(16, routeObjectiveFunction_);
+            }
+            if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(url_)) {
+                size += com.google.protobuf.GeneratedMessageV3.computeStringSize(17, url_);
+            }
+            size += getUnknownFields().getSerializedSize();
+            memoizedSize = size;
+            return size;
+        }
+
+        @java.lang.Override
+        public boolean equals(final java.lang.Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof tapi_lsp.TapiLsp.TapiLspRuleSet)) {
+                return super.equals(obj);
+            }
+            tapi_lsp.TapiLsp.TapiLspRuleSet other = (tapi_lsp.TapiLsp.TapiLspRuleSet) obj;
+            if (!getInputSip().equals(other.getInputSip()))
+                return false;
+            if (!getOutputSip().equals(other.getOutputSip()))
+                return false;
+            if (!getUuid().equals(other.getUuid()))
+                return false;
+            if (!getBw().equals(other.getBw()))
+                return false;
+            if (!getTenantUuid().equals(other.getTenantUuid()))
+                return false;
+            if (!getLayerProtocolName().equals(other.getLayerProtocolName()))
+                return false;
+            if (!getLayerProtocolQualifier().equals(other.getLayerProtocolQualifier()))
+                return false;
+            if (!getLowerFrequencyMhz().equals(other.getLowerFrequencyMhz()))
+                return false;
+            if (!getUpperFrequencyMhz().equals(other.getUpperFrequencyMhz()))
+                return false;
+            if (!getLinkUuidPathList().equals(other.getLinkUuidPathList()))
+                return false;
+            if (!getGranularity().equals(other.getGranularity()))
+                return false;
+            if (!getGridType().equals(other.getGridType()))
+                return false;
+            if (!getDirection().equals(other.getDirection()))
+                return false;
+            if (!getCapacityUnit().equals(other.getCapacityUnit()))
+                return false;
+            if (!getCapacityValue().equals(other.getCapacityValue()))
+                return false;
+            if (!getRouteObjectiveFunction().equals(other.getRouteObjectiveFunction()))
+                return false;
+            if (!getUrl().equals(other.getUrl()))
+                return false;
+            if (!getUnknownFields().equals(other.getUnknownFields()))
+                return false;
+            return true;
+        }
+
+        @java.lang.Override
+        public int hashCode() {
+            if (memoizedHashCode != 0) {
+                return memoizedHashCode;
+            }
+            int hash = 41;
+            hash = (19 * hash) + getDescriptor().hashCode();
+            hash = (37 * hash) + INPUT_SIP_FIELD_NUMBER;
+            hash = (53 * hash) + getInputSip().hashCode();
+            hash = (37 * hash) + OUTPUT_SIP_FIELD_NUMBER;
+            hash = (53 * hash) + getOutputSip().hashCode();
+            hash = (37 * hash) + UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getUuid().hashCode();
+            hash = (37 * hash) + BW_FIELD_NUMBER;
+            hash = (53 * hash) + getBw().hashCode();
+            hash = (37 * hash) + TENANT_UUID_FIELD_NUMBER;
+            hash = (53 * hash) + getTenantUuid().hashCode();
+            hash = (37 * hash) + LAYER_PROTOCOL_NAME_FIELD_NUMBER;
+            hash = (53 * hash) + getLayerProtocolName().hashCode();
+            hash = (37 * hash) + LAYER_PROTOCOL_QUALIFIER_FIELD_NUMBER;
+            hash = (53 * hash) + getLayerProtocolQualifier().hashCode();
+            hash = (37 * hash) + LOWER_FREQUENCY_MHZ_FIELD_NUMBER;
+            hash = (53 * hash) + getLowerFrequencyMhz().hashCode();
+            hash = (37 * hash) + UPPER_FREQUENCY_MHZ_FIELD_NUMBER;
+            hash = (53 * hash) + getUpperFrequencyMhz().hashCode();
+            if (getLinkUuidPathCount() > 0) {
+                hash = (37 * hash) + LINK_UUID_PATH_FIELD_NUMBER;
+                hash = (53 * hash) + getLinkUuidPathList().hashCode();
+            }
+            hash = (37 * hash) + GRANULARITY_FIELD_NUMBER;
+            hash = (53 * hash) + getGranularity().hashCode();
+            hash = (37 * hash) + GRID_TYPE_FIELD_NUMBER;
+            hash = (53 * hash) + getGridType().hashCode();
+            hash = (37 * hash) + DIRECTION_FIELD_NUMBER;
+            hash = (53 * hash) + getDirection().hashCode();
+            hash = (37 * hash) + CAPACITY_UNIT_FIELD_NUMBER;
+            hash = (53 * hash) + getCapacityUnit().hashCode();
+            hash = (37 * hash) + CAPACITY_VALUE_FIELD_NUMBER;
+            hash = (53 * hash) + getCapacityValue().hashCode();
+            hash = (37 * hash) + ROUTE_OBJECTIVE_FUNCTION_FIELD_NUMBER;
+            hash = (53 * hash) + getRouteObjectiveFunction().hashCode();
+            hash = (37 * hash) + URL_FIELD_NUMBER;
+            hash = (53 * hash) + getUrl().hashCode();
+            hash = (29 * hash) + getUnknownFields().hashCode();
+            memoizedHashCode = hash;
+            return hash;
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+            return PARSER.parseFrom(data, extensionRegistry);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input);
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+            return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input, extensionRegistry);
+        }
+
+        @java.lang.Override
+        public Builder newBuilderForType() {
+            return newBuilder();
+        }
+
+        public static Builder newBuilder() {
+            return DEFAULT_INSTANCE.toBuilder();
+        }
+
+        public static Builder newBuilder(tapi_lsp.TapiLsp.TapiLspRuleSet prototype) {
+            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+        }
+
+        @java.lang.Override
+        public Builder toBuilder() {
+            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
+        }
+
+        @java.lang.Override
+        protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+            Builder builder = new Builder(parent);
+            return builder;
+        }
+
+        /**
+         * Protobuf type {@code tapi_lsp.TapiLspRuleSet}
+         */
+        public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements // @@protoc_insertion_point(builder_implements:tapi_lsp.TapiLspRuleSet)
+        tapi_lsp.TapiLsp.TapiLspRuleSetOrBuilder {
+
+            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
+                return tapi_lsp.TapiLsp.internal_static_tapi_lsp_TapiLspRuleSet_descriptor;
+            }
+
+            @java.lang.Override
+            protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() {
+                return tapi_lsp.TapiLsp.internal_static_tapi_lsp_TapiLspRuleSet_fieldAccessorTable.ensureFieldAccessorsInitialized(tapi_lsp.TapiLsp.TapiLspRuleSet.class, tapi_lsp.TapiLsp.TapiLspRuleSet.Builder.class);
+            }
+
+            // Construct using tapi_lsp.TapiLsp.TapiLspRuleSet.newBuilder()
+            private Builder() {
+            }
+
+            private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+                super(parent);
+            }
+
+            @java.lang.Override
+            public Builder clear() {
+                super.clear();
+                bitField0_ = 0;
+                inputSip_ = "";
+                outputSip_ = "";
+                uuid_ = "";
+                bw_ = "";
+                tenantUuid_ = "";
+                layerProtocolName_ = "";
+                layerProtocolQualifier_ = "";
+                lowerFrequencyMhz_ = "";
+                upperFrequencyMhz_ = "";
+                linkUuidPath_ = com.google.protobuf.LazyStringArrayList.emptyList();
+                granularity_ = "";
+                gridType_ = "";
+                direction_ = "";
+                capacityUnit_ = "";
+                capacityValue_ = "";
+                routeObjectiveFunction_ = "";
+                url_ = "";
+                return this;
+            }
+
+            @java.lang.Override
+            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {
+                return tapi_lsp.TapiLsp.internal_static_tapi_lsp_TapiLspRuleSet_descriptor;
+            }
+
+            @java.lang.Override
+            public tapi_lsp.TapiLsp.TapiLspRuleSet getDefaultInstanceForType() {
+                return tapi_lsp.TapiLsp.TapiLspRuleSet.getDefaultInstance();
+            }
+
+            @java.lang.Override
+            public tapi_lsp.TapiLsp.TapiLspRuleSet build() {
+                tapi_lsp.TapiLsp.TapiLspRuleSet result = buildPartial();
+                if (!result.isInitialized()) {
+                    throw newUninitializedMessageException(result);
+                }
+                return result;
+            }
+
+            @java.lang.Override
+            public tapi_lsp.TapiLsp.TapiLspRuleSet buildPartial() {
+                tapi_lsp.TapiLsp.TapiLspRuleSet result = new tapi_lsp.TapiLsp.TapiLspRuleSet(this);
+                if (bitField0_ != 0) {
+                    buildPartial0(result);
+                }
+                onBuilt();
+                return result;
+            }
+
+            private void buildPartial0(tapi_lsp.TapiLsp.TapiLspRuleSet result) {
+                int from_bitField0_ = bitField0_;
+                if (((from_bitField0_ & 0x00000001) != 0)) {
+                    result.inputSip_ = inputSip_;
+                }
+                if (((from_bitField0_ & 0x00000002) != 0)) {
+                    result.outputSip_ = outputSip_;
+                }
+                if (((from_bitField0_ & 0x00000004) != 0)) {
+                    result.uuid_ = uuid_;
+                }
+                if (((from_bitField0_ & 0x00000008) != 0)) {
+                    result.bw_ = bw_;
+                }
+                if (((from_bitField0_ & 0x00000010) != 0)) {
+                    result.tenantUuid_ = tenantUuid_;
+                }
+                if (((from_bitField0_ & 0x00000020) != 0)) {
+                    result.layerProtocolName_ = layerProtocolName_;
+                }
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.layerProtocolQualifier_ = layerProtocolQualifier_;
+                }
+                if (((from_bitField0_ & 0x00000080) != 0)) {
+                    result.lowerFrequencyMhz_ = lowerFrequencyMhz_;
+                }
+                if (((from_bitField0_ & 0x00000100) != 0)) {
+                    result.upperFrequencyMhz_ = upperFrequencyMhz_;
+                }
+                if (((from_bitField0_ & 0x00000200) != 0)) {
+                    linkUuidPath_.makeImmutable();
+                    result.linkUuidPath_ = linkUuidPath_;
+                }
+                if (((from_bitField0_ & 0x00000400) != 0)) {
+                    result.granularity_ = granularity_;
+                }
+                if (((from_bitField0_ & 0x00000800) != 0)) {
+                    result.gridType_ = gridType_;
+                }
+                if (((from_bitField0_ & 0x00001000) != 0)) {
+                    result.direction_ = direction_;
+                }
+                if (((from_bitField0_ & 0x00002000) != 0)) {
+                    result.capacityUnit_ = capacityUnit_;
+                }
+                if (((from_bitField0_ & 0x00004000) != 0)) {
+                    result.capacityValue_ = capacityValue_;
+                }
+                if (((from_bitField0_ & 0x00008000) != 0)) {
+                    result.routeObjectiveFunction_ = routeObjectiveFunction_;
+                }
+                if (((from_bitField0_ & 0x00010000) != 0)) {
+                    result.url_ = url_;
+                }
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.Message other) {
+                if (other instanceof tapi_lsp.TapiLsp.TapiLspRuleSet) {
+                    return mergeFrom((tapi_lsp.TapiLsp.TapiLspRuleSet) other);
+                } else {
+                    super.mergeFrom(other);
+                    return this;
+                }
+            }
+
+            public Builder mergeFrom(tapi_lsp.TapiLsp.TapiLspRuleSet other) {
+                if (other == tapi_lsp.TapiLsp.TapiLspRuleSet.getDefaultInstance())
+                    return this;
+                if (!other.getInputSip().isEmpty()) {
+                    inputSip_ = other.inputSip_;
+                    bitField0_ |= 0x00000001;
+                    onChanged();
+                }
+                if (!other.getOutputSip().isEmpty()) {
+                    outputSip_ = other.outputSip_;
+                    bitField0_ |= 0x00000002;
+                    onChanged();
+                }
+                if (!other.getUuid().isEmpty()) {
+                    uuid_ = other.uuid_;
+                    bitField0_ |= 0x00000004;
+                    onChanged();
+                }
+                if (!other.getBw().isEmpty()) {
+                    bw_ = other.bw_;
+                    bitField0_ |= 0x00000008;
+                    onChanged();
+                }
+                if (!other.getTenantUuid().isEmpty()) {
+                    tenantUuid_ = other.tenantUuid_;
+                    bitField0_ |= 0x00000010;
+                    onChanged();
+                }
+                if (!other.getLayerProtocolName().isEmpty()) {
+                    layerProtocolName_ = other.layerProtocolName_;
+                    bitField0_ |= 0x00000020;
+                    onChanged();
+                }
+                if (!other.getLayerProtocolQualifier().isEmpty()) {
+                    layerProtocolQualifier_ = other.layerProtocolQualifier_;
+                    bitField0_ |= 0x00000040;
+                    onChanged();
+                }
+                if (!other.getLowerFrequencyMhz().isEmpty()) {
+                    lowerFrequencyMhz_ = other.lowerFrequencyMhz_;
+                    bitField0_ |= 0x00000080;
+                    onChanged();
+                }
+                if (!other.getUpperFrequencyMhz().isEmpty()) {
+                    upperFrequencyMhz_ = other.upperFrequencyMhz_;
+                    bitField0_ |= 0x00000100;
+                    onChanged();
+                }
+                if (!other.linkUuidPath_.isEmpty()) {
+                    if (linkUuidPath_.isEmpty()) {
+                        linkUuidPath_ = other.linkUuidPath_;
+                        bitField0_ |= 0x00000200;
+                    } else {
+                        ensureLinkUuidPathIsMutable();
+                        linkUuidPath_.addAll(other.linkUuidPath_);
+                    }
+                    onChanged();
+                }
+                if (!other.getGranularity().isEmpty()) {
+                    granularity_ = other.granularity_;
+                    bitField0_ |= 0x00000400;
+                    onChanged();
+                }
+                if (!other.getGridType().isEmpty()) {
+                    gridType_ = other.gridType_;
+                    bitField0_ |= 0x00000800;
+                    onChanged();
+                }
+                if (!other.getDirection().isEmpty()) {
+                    direction_ = other.direction_;
+                    bitField0_ |= 0x00001000;
+                    onChanged();
+                }
+                if (!other.getCapacityUnit().isEmpty()) {
+                    capacityUnit_ = other.capacityUnit_;
+                    bitField0_ |= 0x00002000;
+                    onChanged();
+                }
+                if (!other.getCapacityValue().isEmpty()) {
+                    capacityValue_ = other.capacityValue_;
+                    bitField0_ |= 0x00004000;
+                    onChanged();
+                }
+                if (!other.getRouteObjectiveFunction().isEmpty()) {
+                    routeObjectiveFunction_ = other.routeObjectiveFunction_;
+                    bitField0_ |= 0x00008000;
+                    onChanged();
+                }
+                if (!other.getUrl().isEmpty()) {
+                    url_ = other.url_;
+                    bitField0_ |= 0x00010000;
+                    onChanged();
+                }
+                this.mergeUnknownFields(other.getUnknownFields());
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final boolean isInitialized() {
+                return true;
+            }
+
+            @java.lang.Override
+            public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {
+                if (extensionRegistry == null) {
+                    throw new java.lang.NullPointerException();
+                }
+                try {
+                    boolean done = false;
+                    while (!done) {
+                        int tag = input.readTag();
+                        switch(tag) {
+                            case 0:
+                                done = true;
+                                break;
+                            case 10:
+                                {
+                                    inputSip_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000001;
+                                    break;
+                                }
+                            // case 10
+                            case 18:
+                                {
+                                    outputSip_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000002;
+                                    break;
+                                }
+                            // case 18
+                            case 26:
+                                {
+                                    uuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000004;
+                                    break;
+                                }
+                            // case 26
+                            case 34:
+                                {
+                                    bw_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000008;
+                                    break;
+                                }
+                            // case 34
+                            case 42:
+                                {
+                                    tenantUuid_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000010;
+                                    break;
+                                }
+                            // case 42
+                            case 50:
+                                {
+                                    layerProtocolName_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000020;
+                                    break;
+                                }
+                            // case 50
+                            case 58:
+                                {
+                                    layerProtocolQualifier_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000040;
+                                    break;
+                                }
+                            // case 58
+                            case 66:
+                                {
+                                    lowerFrequencyMhz_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000080;
+                                    break;
+                                }
+                            // case 66
+                            case 74:
+                                {
+                                    upperFrequencyMhz_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000100;
+                                    break;
+                                }
+                            // case 74
+                            case 82:
+                                {
+                                    java.lang.String s = input.readStringRequireUtf8();
+                                    ensureLinkUuidPathIsMutable();
+                                    linkUuidPath_.add(s);
+                                    break;
+                                }
+                            // case 82
+                            case 90:
+                                {
+                                    granularity_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000400;
+                                    break;
+                                }
+                            // case 90
+                            case 98:
+                                {
+                                    gridType_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00000800;
+                                    break;
+                                }
+                            // case 98
+                            case 106:
+                                {
+                                    direction_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00001000;
+                                    break;
+                                }
+                            // case 106
+                            case 114:
+                                {
+                                    capacityUnit_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00002000;
+                                    break;
+                                }
+                            // case 114
+                            case 122:
+                                {
+                                    capacityValue_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00004000;
+                                    break;
+                                }
+                            // case 122
+                            case 130:
+                                {
+                                    routeObjectiveFunction_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00008000;
+                                    break;
+                                }
+                            // case 130
+                            case 138:
+                                {
+                                    url_ = input.readStringRequireUtf8();
+                                    bitField0_ |= 0x00010000;
+                                    break;
+                                }
+                            // case 138
+                            default:
+                                {
+                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+                                        // was an endgroup tag
+                                        done = true;
+                                    }
+                                    break;
+                                }
+                        }
+                        // switch (tag)
+                    }
+                    // while (!done)
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.unwrapIOException();
+                } finally {
+                    onChanged();
+                }
+                // finally
+                return this;
+            }
+
+            private int bitField0_;
+
+            private java.lang.Object inputSip_ = "";
+
+            /**
+             * string input_sip = 1;
+             * @return The inputSip.
+             */
+            public java.lang.String getInputSip() {
+                java.lang.Object ref = inputSip_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    inputSip_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string input_sip = 1;
+             * @return The bytes for inputSip.
+             */
+            public com.google.protobuf.ByteString getInputSipBytes() {
+                java.lang.Object ref = inputSip_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    inputSip_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string input_sip = 1;
+             * @param value The inputSip to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInputSip(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                inputSip_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string input_sip = 1;
+             * @return This builder for chaining.
+             */
+            public Builder clearInputSip() {
+                inputSip_ = getDefaultInstance().getInputSip();
+                bitField0_ = (bitField0_ & ~0x00000001);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string input_sip = 1;
+             * @param value The bytes for inputSip to set.
+             * @return This builder for chaining.
+             */
+            public Builder setInputSipBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                inputSip_ = value;
+                bitField0_ |= 0x00000001;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object outputSip_ = "";
+
+            /**
+             * string output_sip = 2;
+             * @return The outputSip.
+             */
+            public java.lang.String getOutputSip() {
+                java.lang.Object ref = outputSip_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    outputSip_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string output_sip = 2;
+             * @return The bytes for outputSip.
+             */
+            public com.google.protobuf.ByteString getOutputSipBytes() {
+                java.lang.Object ref = outputSip_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    outputSip_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string output_sip = 2;
+             * @param value The outputSip to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOutputSip(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                outputSip_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string output_sip = 2;
+             * @return This builder for chaining.
+             */
+            public Builder clearOutputSip() {
+                outputSip_ = getDefaultInstance().getOutputSip();
+                bitField0_ = (bitField0_ & ~0x00000002);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string output_sip = 2;
+             * @param value The bytes for outputSip to set.
+             * @return This builder for chaining.
+             */
+            public Builder setOutputSipBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                outputSip_ = value;
+                bitField0_ |= 0x00000002;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object uuid_ = "";
+
+            /**
+             * string uuid = 3;
+             * @return The uuid.
+             */
+            public java.lang.String getUuid() {
+                java.lang.Object ref = uuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    uuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string uuid = 3;
+             * @return The bytes for uuid.
+             */
+            public com.google.protobuf.ByteString getUuidBytes() {
+                java.lang.Object ref = uuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    uuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string uuid = 3;
+             * @param value The uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                uuid_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 3;
+             * @return This builder for chaining.
+             */
+            public Builder clearUuid() {
+                uuid_ = getDefaultInstance().getUuid();
+                bitField0_ = (bitField0_ & ~0x00000004);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string uuid = 3;
+             * @param value The bytes for uuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                uuid_ = value;
+                bitField0_ |= 0x00000004;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object bw_ = "";
+
+            /**
+             * string bw = 4;
+             * @return The bw.
+             */
+            public java.lang.String getBw() {
+                java.lang.Object ref = bw_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    bw_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string bw = 4;
+             * @return The bytes for bw.
+             */
+            public com.google.protobuf.ByteString getBwBytes() {
+                java.lang.Object ref = bw_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    bw_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string bw = 4;
+             * @param value The bw to set.
+             * @return This builder for chaining.
+             */
+            public Builder setBw(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                bw_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string bw = 4;
+             * @return This builder for chaining.
+             */
+            public Builder clearBw() {
+                bw_ = getDefaultInstance().getBw();
+                bitField0_ = (bitField0_ & ~0x00000008);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string bw = 4;
+             * @param value The bytes for bw to set.
+             * @return This builder for chaining.
+             */
+            public Builder setBwBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                bw_ = value;
+                bitField0_ |= 0x00000008;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object tenantUuid_ = "";
+
+            /**
+             * string tenant_uuid = 5;
+             * @return The tenantUuid.
+             */
+            public java.lang.String getTenantUuid() {
+                java.lang.Object ref = tenantUuid_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    tenantUuid_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string tenant_uuid = 5;
+             * @return The bytes for tenantUuid.
+             */
+            public com.google.protobuf.ByteString getTenantUuidBytes() {
+                java.lang.Object ref = tenantUuid_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    tenantUuid_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string tenant_uuid = 5;
+             * @param value The tenantUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTenantUuid(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                tenantUuid_ = value;
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string tenant_uuid = 5;
+             * @return This builder for chaining.
+             */
+            public Builder clearTenantUuid() {
+                tenantUuid_ = getDefaultInstance().getTenantUuid();
+                bitField0_ = (bitField0_ & ~0x00000010);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string tenant_uuid = 5;
+             * @param value The bytes for tenantUuid to set.
+             * @return This builder for chaining.
+             */
+            public Builder setTenantUuidBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                tenantUuid_ = value;
+                bitField0_ |= 0x00000010;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object layerProtocolName_ = "";
+
+            /**
+             * string layer_protocol_name = 6;
+             * @return The layerProtocolName.
+             */
+            public java.lang.String getLayerProtocolName() {
+                java.lang.Object ref = layerProtocolName_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    layerProtocolName_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string layer_protocol_name = 6;
+             * @return The bytes for layerProtocolName.
+             */
+            public com.google.protobuf.ByteString getLayerProtocolNameBytes() {
+                java.lang.Object ref = layerProtocolName_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    layerProtocolName_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string layer_protocol_name = 6;
+             * @param value The layerProtocolName to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLayerProtocolName(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                layerProtocolName_ = value;
+                bitField0_ |= 0x00000020;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string layer_protocol_name = 6;
+             * @return This builder for chaining.
+             */
+            public Builder clearLayerProtocolName() {
+                layerProtocolName_ = getDefaultInstance().getLayerProtocolName();
+                bitField0_ = (bitField0_ & ~0x00000020);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string layer_protocol_name = 6;
+             * @param value The bytes for layerProtocolName to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLayerProtocolNameBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                layerProtocolName_ = value;
+                bitField0_ |= 0x00000020;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object layerProtocolQualifier_ = "";
+
+            /**
+             * string layer_protocol_qualifier = 7;
+             * @return The layerProtocolQualifier.
+             */
+            public java.lang.String getLayerProtocolQualifier() {
+                java.lang.Object ref = layerProtocolQualifier_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    layerProtocolQualifier_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string layer_protocol_qualifier = 7;
+             * @return The bytes for layerProtocolQualifier.
+             */
+            public com.google.protobuf.ByteString getLayerProtocolQualifierBytes() {
+                java.lang.Object ref = layerProtocolQualifier_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    layerProtocolQualifier_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string layer_protocol_qualifier = 7;
+             * @param value The layerProtocolQualifier to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLayerProtocolQualifier(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                layerProtocolQualifier_ = value;
+                bitField0_ |= 0x00000040;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string layer_protocol_qualifier = 7;
+             * @return This builder for chaining.
+             */
+            public Builder clearLayerProtocolQualifier() {
+                layerProtocolQualifier_ = getDefaultInstance().getLayerProtocolQualifier();
+                bitField0_ = (bitField0_ & ~0x00000040);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string layer_protocol_qualifier = 7;
+             * @param value The bytes for layerProtocolQualifier to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLayerProtocolQualifierBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                layerProtocolQualifier_ = value;
+                bitField0_ |= 0x00000040;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object lowerFrequencyMhz_ = "";
+
+            /**
+             * string lower_frequency_mhz = 8;
+             * @return The lowerFrequencyMhz.
+             */
+            public java.lang.String getLowerFrequencyMhz() {
+                java.lang.Object ref = lowerFrequencyMhz_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    lowerFrequencyMhz_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string lower_frequency_mhz = 8;
+             * @return The bytes for lowerFrequencyMhz.
+             */
+            public com.google.protobuf.ByteString getLowerFrequencyMhzBytes() {
+                java.lang.Object ref = lowerFrequencyMhz_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    lowerFrequencyMhz_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string lower_frequency_mhz = 8;
+             * @param value The lowerFrequencyMhz to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLowerFrequencyMhz(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                lowerFrequencyMhz_ = value;
+                bitField0_ |= 0x00000080;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string lower_frequency_mhz = 8;
+             * @return This builder for chaining.
+             */
+            public Builder clearLowerFrequencyMhz() {
+                lowerFrequencyMhz_ = getDefaultInstance().getLowerFrequencyMhz();
+                bitField0_ = (bitField0_ & ~0x00000080);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string lower_frequency_mhz = 8;
+             * @param value The bytes for lowerFrequencyMhz to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLowerFrequencyMhzBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                lowerFrequencyMhz_ = value;
+                bitField0_ |= 0x00000080;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object upperFrequencyMhz_ = "";
+
+            /**
+             * string upper_frequency_mhz = 9;
+             * @return The upperFrequencyMhz.
+             */
+            public java.lang.String getUpperFrequencyMhz() {
+                java.lang.Object ref = upperFrequencyMhz_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    upperFrequencyMhz_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string upper_frequency_mhz = 9;
+             * @return The bytes for upperFrequencyMhz.
+             */
+            public com.google.protobuf.ByteString getUpperFrequencyMhzBytes() {
+                java.lang.Object ref = upperFrequencyMhz_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    upperFrequencyMhz_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string upper_frequency_mhz = 9;
+             * @param value The upperFrequencyMhz to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUpperFrequencyMhz(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                upperFrequencyMhz_ = value;
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string upper_frequency_mhz = 9;
+             * @return This builder for chaining.
+             */
+            public Builder clearUpperFrequencyMhz() {
+                upperFrequencyMhz_ = getDefaultInstance().getUpperFrequencyMhz();
+                bitField0_ = (bitField0_ & ~0x00000100);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string upper_frequency_mhz = 9;
+             * @param value The bytes for upperFrequencyMhz to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUpperFrequencyMhzBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                upperFrequencyMhz_ = value;
+                bitField0_ |= 0x00000100;
+                onChanged();
+                return this;
+            }
+
+            private com.google.protobuf.LazyStringArrayList linkUuidPath_ = com.google.protobuf.LazyStringArrayList.emptyList();
+
+            private void ensureLinkUuidPathIsMutable() {
+                if (!linkUuidPath_.isModifiable()) {
+                    linkUuidPath_ = new com.google.protobuf.LazyStringArrayList(linkUuidPath_);
+                }
+                bitField0_ |= 0x00000200;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @return A list containing the linkUuidPath.
+             */
+            public com.google.protobuf.ProtocolStringList getLinkUuidPathList() {
+                linkUuidPath_.makeImmutable();
+                return linkUuidPath_;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @return The count of linkUuidPath.
+             */
+            public int getLinkUuidPathCount() {
+                return linkUuidPath_.size();
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param index The index of the element to return.
+             * @return The linkUuidPath at the given index.
+             */
+            public java.lang.String getLinkUuidPath(int index) {
+                return linkUuidPath_.get(index);
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param index The index of the value to return.
+             * @return The bytes of the linkUuidPath at the given index.
+             */
+            public com.google.protobuf.ByteString getLinkUuidPathBytes(int index) {
+                return linkUuidPath_.getByteString(index);
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param index The index to set the value at.
+             * @param value The linkUuidPath to set.
+             * @return This builder for chaining.
+             */
+            public Builder setLinkUuidPath(int index, java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                ensureLinkUuidPathIsMutable();
+                linkUuidPath_.set(index, value);
+                bitField0_ |= 0x00000200;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param value The linkUuidPath to add.
+             * @return This builder for chaining.
+             */
+            public Builder addLinkUuidPath(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                ensureLinkUuidPathIsMutable();
+                linkUuidPath_.add(value);
+                bitField0_ |= 0x00000200;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param values The linkUuidPath to add.
+             * @return This builder for chaining.
+             */
+            public Builder addAllLinkUuidPath(java.lang.Iterable values) {
+                ensureLinkUuidPathIsMutable();
+                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, linkUuidPath_);
+                bitField0_ |= 0x00000200;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @return This builder for chaining.
+             */
+            public Builder clearLinkUuidPath() {
+                linkUuidPath_ = com.google.protobuf.LazyStringArrayList.emptyList();
+                bitField0_ = (bitField0_ & ~0x00000200);
+                ;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * repeated string link_uuid_path = 10;
+             * @param value The bytes of the linkUuidPath to add.
+             * @return This builder for chaining.
+             */
+            public Builder addLinkUuidPathBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                ensureLinkUuidPathIsMutable();
+                linkUuidPath_.add(value);
+                bitField0_ |= 0x00000200;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object granularity_ = "";
+
+            /**
+             * string granularity = 11;
+             * @return The granularity.
+             */
+            public java.lang.String getGranularity() {
+                java.lang.Object ref = granularity_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    granularity_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string granularity = 11;
+             * @return The bytes for granularity.
+             */
+            public com.google.protobuf.ByteString getGranularityBytes() {
+                java.lang.Object ref = granularity_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    granularity_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string granularity = 11;
+             * @param value The granularity to set.
+             * @return This builder for chaining.
+             */
+            public Builder setGranularity(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                granularity_ = value;
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string granularity = 11;
+             * @return This builder for chaining.
+             */
+            public Builder clearGranularity() {
+                granularity_ = getDefaultInstance().getGranularity();
+                bitField0_ = (bitField0_ & ~0x00000400);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string granularity = 11;
+             * @param value The bytes for granularity to set.
+             * @return This builder for chaining.
+             */
+            public Builder setGranularityBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                granularity_ = value;
+                bitField0_ |= 0x00000400;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object gridType_ = "";
+
+            /**
+             * string grid_type = 12;
+             * @return The gridType.
+             */
+            public java.lang.String getGridType() {
+                java.lang.Object ref = gridType_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    gridType_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string grid_type = 12;
+             * @return The bytes for gridType.
+             */
+            public com.google.protobuf.ByteString getGridTypeBytes() {
+                java.lang.Object ref = gridType_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    gridType_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string grid_type = 12;
+             * @param value The gridType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setGridType(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                gridType_ = value;
+                bitField0_ |= 0x00000800;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string grid_type = 12;
+             * @return This builder for chaining.
+             */
+            public Builder clearGridType() {
+                gridType_ = getDefaultInstance().getGridType();
+                bitField0_ = (bitField0_ & ~0x00000800);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string grid_type = 12;
+             * @param value The bytes for gridType to set.
+             * @return This builder for chaining.
+             */
+            public Builder setGridTypeBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                gridType_ = value;
+                bitField0_ |= 0x00000800;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object direction_ = "";
+
+            /**
+             * string direction = 13;
+             * @return The direction.
+             */
+            public java.lang.String getDirection() {
+                java.lang.Object ref = direction_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    direction_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string direction = 13;
+             * @return The bytes for direction.
+             */
+            public com.google.protobuf.ByteString getDirectionBytes() {
+                java.lang.Object ref = direction_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    direction_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string direction = 13;
+             * @param value The direction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDirection(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                direction_ = value;
+                bitField0_ |= 0x00001000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string direction = 13;
+             * @return This builder for chaining.
+             */
+            public Builder clearDirection() {
+                direction_ = getDefaultInstance().getDirection();
+                bitField0_ = (bitField0_ & ~0x00001000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string direction = 13;
+             * @param value The bytes for direction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setDirectionBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                direction_ = value;
+                bitField0_ |= 0x00001000;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object capacityUnit_ = "";
+
+            /**
+             * string capacity_unit = 14;
+             * @return The capacityUnit.
+             */
+            public java.lang.String getCapacityUnit() {
+                java.lang.Object ref = capacityUnit_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    capacityUnit_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string capacity_unit = 14;
+             * @return The bytes for capacityUnit.
+             */
+            public com.google.protobuf.ByteString getCapacityUnitBytes() {
+                java.lang.Object ref = capacityUnit_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    capacityUnit_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string capacity_unit = 14;
+             * @param value The capacityUnit to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCapacityUnit(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                capacityUnit_ = value;
+                bitField0_ |= 0x00002000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string capacity_unit = 14;
+             * @return This builder for chaining.
+             */
+            public Builder clearCapacityUnit() {
+                capacityUnit_ = getDefaultInstance().getCapacityUnit();
+                bitField0_ = (bitField0_ & ~0x00002000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string capacity_unit = 14;
+             * @param value The bytes for capacityUnit to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCapacityUnitBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                capacityUnit_ = value;
+                bitField0_ |= 0x00002000;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object capacityValue_ = "";
+
+            /**
+             * string capacity_value = 15;
+             * @return The capacityValue.
+             */
+            public java.lang.String getCapacityValue() {
+                java.lang.Object ref = capacityValue_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    capacityValue_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string capacity_value = 15;
+             * @return The bytes for capacityValue.
+             */
+            public com.google.protobuf.ByteString getCapacityValueBytes() {
+                java.lang.Object ref = capacityValue_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    capacityValue_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string capacity_value = 15;
+             * @param value The capacityValue to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCapacityValue(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                capacityValue_ = value;
+                bitField0_ |= 0x00004000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string capacity_value = 15;
+             * @return This builder for chaining.
+             */
+            public Builder clearCapacityValue() {
+                capacityValue_ = getDefaultInstance().getCapacityValue();
+                bitField0_ = (bitField0_ & ~0x00004000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string capacity_value = 15;
+             * @param value The bytes for capacityValue to set.
+             * @return This builder for chaining.
+             */
+            public Builder setCapacityValueBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                capacityValue_ = value;
+                bitField0_ |= 0x00004000;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object routeObjectiveFunction_ = "";
+
+            /**
+             * string route_objective_function = 16;
+             * @return The routeObjectiveFunction.
+             */
+            public java.lang.String getRouteObjectiveFunction() {
+                java.lang.Object ref = routeObjectiveFunction_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    routeObjectiveFunction_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string route_objective_function = 16;
+             * @return The bytes for routeObjectiveFunction.
+             */
+            public com.google.protobuf.ByteString getRouteObjectiveFunctionBytes() {
+                java.lang.Object ref = routeObjectiveFunction_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    routeObjectiveFunction_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string route_objective_function = 16;
+             * @param value The routeObjectiveFunction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setRouteObjectiveFunction(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                routeObjectiveFunction_ = value;
+                bitField0_ |= 0x00008000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string route_objective_function = 16;
+             * @return This builder for chaining.
+             */
+            public Builder clearRouteObjectiveFunction() {
+                routeObjectiveFunction_ = getDefaultInstance().getRouteObjectiveFunction();
+                bitField0_ = (bitField0_ & ~0x00008000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string route_objective_function = 16;
+             * @param value The bytes for routeObjectiveFunction to set.
+             * @return This builder for chaining.
+             */
+            public Builder setRouteObjectiveFunctionBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                routeObjectiveFunction_ = value;
+                bitField0_ |= 0x00008000;
+                onChanged();
+                return this;
+            }
+
+            private java.lang.Object url_ = "";
+
+            /**
+             * string url = 17;
+             * @return The url.
+             */
+            public java.lang.String getUrl() {
+                java.lang.Object ref = url_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    url_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * string url = 17;
+             * @return The bytes for url.
+             */
+            public com.google.protobuf.ByteString getUrlBytes() {
+                java.lang.Object ref = url_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
+                    url_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * string url = 17;
+             * @param value The url to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUrl(java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                url_ = value;
+                bitField0_ |= 0x00010000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string url = 17;
+             * @return This builder for chaining.
+             */
+            public Builder clearUrl() {
+                url_ = getDefaultInstance().getUrl();
+                bitField0_ = (bitField0_ & ~0x00010000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * string url = 17;
+             * @param value The bytes for url to set.
+             * @return This builder for chaining.
+             */
+            public Builder setUrlBytes(com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                url_ = value;
+                bitField0_ |= 0x00010000;
+                onChanged();
+                return this;
+            }
+
+            @java.lang.Override
+            public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.setUnknownFields(unknownFields);
+            }
+
+            @java.lang.Override
+            public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
+                return super.mergeUnknownFields(unknownFields);
+            }
+            // @@protoc_insertion_point(builder_scope:tapi_lsp.TapiLspRuleSet)
+        }
+
+        // @@protoc_insertion_point(class_scope:tapi_lsp.TapiLspRuleSet)
+        private static final tapi_lsp.TapiLsp.TapiLspRuleSet DEFAULT_INSTANCE;
+
+        static {
+            DEFAULT_INSTANCE = new tapi_lsp.TapiLsp.TapiLspRuleSet();
+        }
+
+        public static tapi_lsp.TapiLsp.TapiLspRuleSet getDefaultInstance() {
+            return DEFAULT_INSTANCE;
+        }
+
+        private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() {
+
+            @java.lang.Override
+            public TapiLspRuleSet parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {
+                Builder builder = newBuilder();
+                try {
+                    builder.mergeFrom(input, extensionRegistry);
+                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+                    throw e.setUnfinishedMessage(builder.buildPartial());
+                } catch (com.google.protobuf.UninitializedMessageException e) {
+                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+                } catch (java.io.IOException e) {
+                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
+                }
+                return builder.buildPartial();
+            }
+        };
+
+        public static com.google.protobuf.Parser parser() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public com.google.protobuf.Parser getParserForType() {
+            return PARSER;
+        }
+
+        @java.lang.Override
+        public tapi_lsp.TapiLsp.TapiLspRuleSet getDefaultInstanceForType() {
+            return DEFAULT_INSTANCE;
+        }
+    }
+
+    private static final com.google.protobuf.Descriptors.Descriptor internal_static_tapi_lsp_TapiLspRuleSet_descriptor;
+
+    private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_tapi_lsp_TapiLspRuleSet_fieldAccessorTable;
+
+    public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
+        return descriptor;
+    }
+
+    private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
+
+    static {
+        java.lang.String[] descriptorData = { "\n\016tapi_lsp.proto\022\010tapi_lsp\"\220\003\n\016TapiLspRu" + "leSet\022\021\n\tinput_sip\030\001 \001(\t\022\022\n\noutput_sip\030\002" + " \001(\t\022\014\n\004uuid\030\003 \001(\t\022\n\n\002bw\030\004 \001(\t\022\023\n\013tenant" + "_uuid\030\005 \001(\t\022\033\n\023layer_protocol_name\030\006 \001(\t" + "\022 \n\030layer_protocol_qualifier\030\007 \001(\t\022\033\n\023lo" + "wer_frequency_mhz\030\010 \001(\t\022\033\n\023upper_frequen" + "cy_mhz\030\t \001(\t\022\026\n\016link_uuid_path\030\n \003(\t\022\023\n\013" + "granularity\030\013 \001(\t\022\021\n\tgrid_type\030\014 \001(\t\022\021\n\t" + "direction\030\r \001(\t\022\025\n\rcapacity_unit\030\016 \001(\t\022\026" + "\n\016capacity_value\030\017 \001(\t\022 \n\030route_objectiv" + "e_function\030\020 \001(\t\022\013\n\003url\030\021 \001(\tb\006proto3" };
+        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {});
+        internal_static_tapi_lsp_TapiLspRuleSet_descriptor = getDescriptor().getMessageTypes().get(0);
+        internal_static_tapi_lsp_TapiLspRuleSet_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(internal_static_tapi_lsp_TapiLspRuleSet_descriptor, new java.lang.String[] { "InputSip", "OutputSip", "Uuid", "Bw", "TenantUuid", "LayerProtocolName", "LayerProtocolQualifier", "LowerFrequencyMhz", "UpperFrequencyMhz", "LinkUuidPath", "Granularity", "GridType", "Direction", "CapacityUnit", "CapacityValue", "RouteObjectiveFunction", "Url" });
+    }
+    // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index 8a7aeca638f2f405c37f1581dc6f769eaa940aab..820135c62bdac4f0114f9d23a03c0cad715fba50 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 905a409221c21205aba667ad34f7610681bd09c1
-    app.quarkus.io/build-timestamp: 2025-10-22 - 13:43:53 +0000
+    app.quarkus.io/commit-id: 011890de6d6852d8308c9774d504a002cbbeca55
+    app.quarkus.io/build-timestamp: 2025-11-11 - 19:21:22 +0000
     prometheus.io/scrape: "true"
     prometheus.io/path: /q/metrics
     prometheus.io/port: "8080"
@@ -21,14 +21,14 @@ spec:
       port: 443
       protocol: TCP
       targetPort: 8443
-    - name: http
-      port: 9192
-      protocol: TCP
-      targetPort: 8080
     - name: grpc
       port: 6060
       protocol: TCP
       targetPort: 6060
+    - name: http
+      port: 9192
+      protocol: TCP
+      targetPort: 8080
   selector:
     app.kubernetes.io/name: policyservice
   type: ClusterIP
@@ -37,8 +37,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: 905a409221c21205aba667ad34f7610681bd09c1
-    app.quarkus.io/build-timestamp: 2025-10-22 - 13:43:53 +0000
+    app.quarkus.io/commit-id: 011890de6d6852d8308c9774d504a002cbbeca55
+    app.quarkus.io/build-timestamp: 2025-11-11 - 19:21:22 +0000
     prometheus.io/scrape: "true"
     prometheus.io/path: /q/metrics
     prometheus.io/port: "8080"
@@ -46,8 +46,8 @@ metadata:
   labels:
     app: policyservice
     app.kubernetes.io/managed-by: quarkus
-    app.kubernetes.io/version: 0.1.0
     app.kubernetes.io/name: policyservice
+    app.kubernetes.io/version: 0.1.0
   name: policyservice
 spec:
   replicas: 1
@@ -57,8 +57,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: 905a409221c21205aba667ad34f7610681bd09c1
-        app.quarkus.io/build-timestamp: 2025-10-22 - 13:43:53 +0000
+        app.quarkus.io/commit-id: 011890de6d6852d8308c9774d504a002cbbeca55
+        app.quarkus.io/build-timestamp: 2025-11-11 - 19:21:22 +0000
         prometheus.io/scrape: "true"
         prometheus.io/path: /q/metrics
         prometheus.io/port: "8080"
@@ -66,8 +66,8 @@ spec:
       labels:
         app: policyservice
         app.kubernetes.io/managed-by: quarkus
-        app.kubernetes.io/version: 0.1.0
         app.kubernetes.io/name: policyservice
+        app.kubernetes.io/version: 0.1.0
     spec:
       containers:
         - env:
@@ -75,14 +75,14 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: SERVICE_SERVICE_HOST
-              value: serviceservice
+            - name: MONITORING_SERVICE_HOST
+              value: monitoringservice
             - name: CONTEXT_SERVICE_HOST
               value: contextservice
+            - name: SERVICE_SERVICE_HOST
+              value: serviceservice
             - name: KAFKA_BROKER_HOST
               value: kafka-service.kafka.svc.cluster.local
-            - name: MONITORING_SERVICE_HOST
-              value: monitoringservice
           image: labs.etsi.org:5050/tfs/controller/policy:0.1.0
           imagePullPolicy: Always
           livenessProbe:
@@ -100,12 +100,12 @@ spec:
             - containerPort: 8443
               name: https
               protocol: TCP
-            - containerPort: 8080
-              name: http
-              protocol: TCP
             - containerPort: 6060
               name: grpc
               protocol: TCP
+            - containerPort: 8080
+              name: http
+              protocol: TCP
           readinessProbe:
             failureThreshold: 3
             httpGet:
diff --git a/src/pytest.ini b/src/pytest.ini
new file mode 100644
index 0000000000000000000000000000000000000000..6dfc29442beb190e106033552af5910ffe6bfdc5
--- /dev/null
+++ b/src/pytest.ini
@@ -0,0 +1,18 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+[pytest]
+markers =
+    integration: tests that require real NETCONF devices or external infrastructure
diff --git a/src/qkd_app/Dockerfile b/src/qkd_app/Dockerfile
index e175fce7e5c8af7dc4d9f7565c0a71e58bb88089..b66fe482d234ae210c113fc67ea5bb2edae2d485 100644
--- a/src/qkd_app/Dockerfile
+++ b/src/qkd_app/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/qos_profile/Dockerfile b/src/qos_profile/Dockerfile
index 3f51eaa8df29df334bb4f0f6b4f1828141a4936c..eceaaa848ed69591a29ad1824cf0891635c30ab7 100644
--- a/src/qos_profile/Dockerfile
+++ b/src/qos_profile/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/service/Dockerfile b/src/service/Dockerfile
index 493094769a14969aadca50f7a1b0902fe8ce0750..d0315a3cb97cb014d418d723822777d3d29bd693 100644
--- a/src/service/Dockerfile
+++ b/src/service/Dockerfile
@@ -28,9 +28,9 @@ ENV PYTHONUNBUFFERED=0
 #     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/service/service/service_handler_api/FilterFields.py b/src/service/service/service_handler_api/FilterFields.py
index b431dbc58a7036fecc9d3a30479117dcf4618a40..473efa3e0f3fc1a0845974fcf4f58d8dfd65127d 100644
--- a/src/service/service/service_handler_api/FilterFields.py
+++ b/src/service/service/service_handler_api/FilterFields.py
@@ -31,8 +31,9 @@ SERVICE_TYPE_VALUES = {
     ServiceTypeEnum.SERVICETYPE_QKD,
     ServiceTypeEnum.SERVICETYPE_INT,
     ServiceTypeEnum.SERVICETYPE_ACL,
-    ServiceTypeEnum.SERVICETYPE_IPOWDM,
     ServiceTypeEnum.SERVICETYPE_IP_LINK,
+    ServiceTypeEnum.SERVICETYPE_IPOWDM,
+    ServiceTypeEnum.SERVICETYPE_TAPI_LSP,
 }
 
 DEVICE_DRIVER_VALUES = {
@@ -57,6 +58,7 @@ DEVICE_DRIVER_VALUES = {
     DeviceDriverEnum.DEVICEDRIVER_RYU,
     DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX,
     DeviceDriverEnum.DEVICEDRIVER_OPENROADM,
+    DeviceDriverEnum.DEVICEDRIVER_RESTCONF_OPENCONFIG,
 }
 
 # Map allowed filter fields to allowed values per Filter field. If no restriction (free text) None is specified
diff --git a/src/service/service/service_handler_api/ServiceHandlerFactory.py b/src/service/service/service_handler_api/ServiceHandlerFactory.py
index a4497ac528518b40b30428c75ddd430954f7e291..f998fe07246be834ac154105e836713fb4ef29ae 100644
--- a/src/service/service/service_handler_api/ServiceHandlerFactory.py
+++ b/src/service/service/service_handler_api/ServiceHandlerFactory.py
@@ -15,7 +15,7 @@
 import logging, operator
 from enum import Enum
 from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Set, Tuple
-from common.proto.context_pb2 import Device, Service
+from common.proto.context_pb2 import Device, DeviceDriverEnum, Service
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from .Exceptions import (
     UnsatisfiedFilterException, UnsupportedServiceHandlerClassException, UnsupportedFilterFieldException,
@@ -114,30 +114,19 @@ def get_service_handler_class(
     service_handler_factory : ServiceHandlerFactory, service : Service,
     device_and_drivers: Dict[str, Tuple[Device, Set[int]]]
 ) -> Optional['_ServiceHandler']:
-
     str_service_key = grpc_message_to_json_string(service.service_id)
-    LOGGER.debug('Selecting service handler for service(%s)...', str(service.service_config.config_rules))
     # Checks if the service is of type ipowdm
     if 'ipowdm' in str(service.service_config.config_rules):
-        ipowdm_device_uuid = service.service_config.config_rules[0].ipowdm.endpoint_id.device_id.device_uuid.uuid
-        for device, _ in device_and_drivers.values():
-            if device.name == ipowdm_device_uuid:
-                LOGGER.debug('Device(%s) supported drivers: %s', device.name, device.device_drivers)
-                common_device_drivers = device.device_drivers
+        common_device_drivers = [DeviceDriverEnum.DEVICEDRIVER_IETF_L3VPN]
     # Checks if the service is of type tapi_lsp
     elif 'tapi_lsp' in str(service.service_config.config_rules):
-        tapi_lsp_device_uuid = service.service_config.config_rules[0].tapi_lsp.endpoint_id.device_id.device_uuid.uuid
-        LOGGER.debug('tapi_lsp_device_uuid: %s', tapi_lsp_device_uuid)
-        for device in connection_devices.values():
-            if device.name == tapi_lsp_device_uuid:
-
-                LOGGER.debug('Device(%s) supported drivers: %s', device.name, device.device_drivers)
-                common_device_drivers = device.device_drivers
+        common_device_drivers = [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API]
     else:
         common_device_drivers = get_common_device_drivers([
-        device_drivers
-        for _,device_drivers in device_and_drivers.values()
+            device_drivers
+            for _,device_drivers in device_and_drivers.values()
         ])
+    LOGGER.debug('common_device_drivers={:s}'.format(str(common_device_drivers)))
 
     filter_fields = {
         FilterFieldEnum.SERVICE_TYPE.value  : service.service_type,     # must be supported
diff --git a/src/service/service/service_handler_api/SettingsHandler.py b/src/service/service/service_handler_api/SettingsHandler.py
index 7637a2b822a7a31ad497111e8c45f00cbfee4d24..cbcf13f5fdb1473f7cfe6c1c9ae43e92f8aecb2b 100644
--- a/src/service/service/service_handler_api/SettingsHandler.py
+++ b/src/service/service/service_handler_api/SettingsHandler.py
@@ -47,6 +47,13 @@ class SettingsHandler:
             ACL_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/index[{:d}]/acl_ruleset[{:s}]'
             key_or_path = ACL_KEY_TEMPLATE.format(device_uuid, endpoint_name,endpoint_index, acl_ruleset_name)
             value = grpc_message_to_json(config_rule.acl)
+        elif kind == 'ip_link':
+            device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid
+            endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid
+            endpoint_name, endpoint_index = extract_endpoint_index(endpoint_uuid)
+            IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/subindex[{:d}]/ip_link'
+            key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_name, endpoint_index)
+            value = config_rule.ip_link
         elif kind == 'ipowdm':
             device_uuid = config_rule.ipowdm.endpoint_id.device_id.device_uuid.uuid
             endpoint_uuid = config_rule.ipowdm.endpoint_id.endpoint_uuid.uuid
@@ -54,13 +61,14 @@ class SettingsHandler:
             ipowdm_key_template = '/device[{:s}]/endpoint[{:s}]/index[{:d}]/ipowdm'
             key_or_path = ipowdm_key_template.format(device_uuid, endpoint_name, endpoint_index)
             value = grpc_message_to_json(config_rule.ipowdm)
-        elif kind == 'ip_link':
-            device_uuid = config_rule.ip_link.endpoint_id.device_id.device_uuid.uuid
-            endpoint_uuid = config_rule.ip_link.endpoint_id.endpoint_uuid.uuid
+        elif kind == 'tapi_lsp':
+            device_uuid = config_rule.tapi_lsp.endpoint_id.device_id.device_uuid.uuid
+            endpoint_uuid = config_rule.tapi_lsp.endpoint_id.endpoint_uuid.uuid
             endpoint_name, endpoint_index = extract_endpoint_index(endpoint_uuid)
-            IP_LINK_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/subindex[{:d}]/ip_link'
-            key_or_path = IP_LINK_KEY_TEMPLATE.format(device_uuid, endpoint_name, endpoint_index)
-            value = config_rule.ip_link
+            TAPI_LSP_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/subindex[{:d}]/tapi_lsp'
+            key_or_path = TAPI_LSP_KEY_TEMPLATE.format(device_uuid, endpoint_name, endpoint_index)
+            value = grpc_message_to_json(config_rule.tapi_lsp)
+
         else:
             MSG = 'Unsupported Kind({:s}) in ConfigRule({:s})'
             LOGGER.warning(MSG.format(str(kind), grpc_message_to_json_string(config_rule)))
@@ -173,6 +181,40 @@ class SettingsHandler:
                     ipowdms.append((res_key, res_value))
         return ipowdms
 
+    def get_endpoint_tapi_lsp(self, device : Device, endpoint : EndPoint) -> List [Tuple]:
+        device_keys   = device.device_id.device_uuid.uuid,       device.name
+        endpoint_keys = endpoint.endpoint_id.endpoint_uuid.uuid, endpoint.name
+        tapi_lsps = []
+        LOGGER.debug('Getting TAPI LSPs for device(%s) ', device_keys)
+        for device_key in device_keys:
+            for endpoint_key in endpoint_keys:
+                endpoint_settings_uri = '/device[{:s}]/endpoint[{:s}]'.format(device_key, endpoint_key)
+                endpoint_settings = self.get(endpoint_settings_uri)
+                if endpoint_settings is None: continue
+                TAPI_LSP_KEY_TEMPLATE = '/device[{:s}]/endpoint[{:s}]/'.format(device_key, endpoint_key)
+
+                results = dump_subtree(endpoint_settings)
+                LOGGER.debug('Dumped subtree results: %s', results)
+                for res_key, res_value in results:
+                    LOGGER.debug('Checking res_key %s', res_key)
+                    LOGGER.debug('Checking res_value %s', res_value)
+
+                    if not res_key.startswith(TAPI_LSP_KEY_TEMPLATE):
+                        LOGGER.debug('Skipping res_key %s not starting with %s', res_key, TAPI_LSP_KEY_TEMPLATE)
+                        continue
+                    if not "tapi_lsp" in res_key:
+                        LOGGER.debug('Skipping res_key %s not containing tapi_lsp', res_key)
+                        continue
+                    setinterface_index = extract_index(res_value)
+                    LOGGER.debug('setinterface_index = %d', setinterface_index)
+                    if not 'subindex[{:d}]'.format(setinterface_index) in res_key:
+                        LOGGER.debug('Skipping res_key %s not containing subindex[%d]', res_key, setinterface_index)
+                        continue
+                    tapi_lsps.append((res_key, res_value))
+        LOGGER.debug('TAPI LSPs for device(%s) = %s', device_keys, tapi_lsps)
+        return tapi_lsps
+
+
     def set(self, key_or_path : Union[str, List[str]], value : Any) -> None:
         set_subnode_value(self.__resolver, self.__config, key_or_path, value)
 
diff --git a/src/service/service/service_handler_api/Tools.py b/src/service/service/service_handler_api/Tools.py
index 78563355f6ef19d6a908a375b669575719cc11ce..c86fbd842c03f0d6876a031df7fcbcb56ee03893 100644
--- a/src/service/service/service_handler_api/Tools.py
+++ b/src/service/service/service_handler_api/Tools.py
@@ -68,9 +68,8 @@ def extract_endpoint_index(endpoint_name : str, default_index=0) -> Tuple[str, i
     if index is not None: index = int(index)
     return endpoint_name, index
 
-def extract_index(res_value : str) ->  int:
-    res_value = str(grpc_message_to_json(res_value,use_integers_for_enums=True))
-    endpoint  = res_value.split("'endpoint_uuid': {'uuid': '")
+def extract_index(res_value : Any) ->  int:
+    endpoint  = res_value['endpoint_id']['endpoint_uuid']['uuid']
     endpoint  = endpoint[1].split("'}")
     _ , index = extract_endpoint_index(endpoint[0])
     return index
diff --git a/src/service/service/service_handlers/__init__.py b/src/service/service/service_handlers/__init__.py
index cd51912c0d312432687ebb456da481dc98013523..b8875d3426159a7d17da777fc53da334363b287a 100644
--- a/src/service/service/service_handlers/__init__.py
+++ b/src/service/service/service_handlers/__init__.py
@@ -198,5 +198,11 @@ SERVICE_HANDLERS = [
             FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_IPOWDM,
             FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED],
             }
-        ])
+        ]),
+    (Tapi_LSPServiceHandler, [
+        {
+            FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_TAPI_LSP,
+            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API],
+        }
+    ])
 ]
diff --git a/src/service/service/service_handlers/ipowdm/ConfigRules.py b/src/service/service/service_handlers/ipowdm/ConfigRules.py
index e36dd7babaae96b0b0fd8060a08e504fc8195e55..7f48c6071e12f20a5d43f644c9209e003f86e6fa 100644
--- a/src/service/service/service_handlers/ipowdm/ConfigRules.py
+++ b/src/service/service/service_handlers/ipowdm/ConfigRules.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/service/service/service_handlers/ipowdm/IpowdmServiceHandler.py b/src/service/service/service_handlers/ipowdm/IpowdmServiceHandler.py
index 191ba33745ad77485d1472efd674f388a3565ebb..eab9a977ed964fcf789b8abc67c39ba2ba15bde3 100644
--- a/src/service/service/service_handlers/ipowdm/IpowdmServiceHandler.py
+++ b/src/service/service/service_handlers/ipowdm/IpowdmServiceHandler.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/service/service/service_handlers/ipowdm/__init__.py b/src/service/service/service_handlers/ipowdm/__init__.py
index 6242c89c7fa17bc5b6cc44328d8ce58438721d45..7363515f07a52d996229bcbd72932ce1423258d7 100644
--- a/src/service/service/service_handlers/ipowdm/__init__.py
+++ b/src/service/service/service_handlers/ipowdm/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2025 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/service/service/service_handlers/l3nm_ryu/L3NMRyuServiceHandler.py b/src/service/service/service_handlers/l3nm_ryu/L3NMRyuServiceHandler.py
index 4a7ad333b3ee9113c191596b1929e1e920f38448..e3de3553d6f108352326fcae7f3ff41524b68d90 100644
--- a/src/service/service/service_handlers/l3nm_ryu/L3NMRyuServiceHandler.py
+++ b/src/service/service/service_handlers/l3nm_ryu/L3NMRyuServiceHandler.py
@@ -24,7 +24,6 @@ from service.service.service_handler_api._ServiceHandler import _ServiceHandler
 from service.service.service_handler_api.SettingsHandler import SettingsHandler
 from service.service.task_scheduler.TaskExecutor import TaskExecutor
 
-logging.basicConfig(level=logging.DEBUG)  
 LOGGER = logging.getLogger(__name__)
 
 METRICS_POOL = MetricsPool('Service', 'Handler', labels={'handler': 'l3nm_ryu'})
diff --git a/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_config.py b/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_config.py
index 5ec1bc489478749267f773e4950748879f88ba74..e251c8a9e6ae54d30715a284a93a0e00ac312d9e 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_config.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_config.py
@@ -22,12 +22,8 @@ SD-Fabric repo: https://github.com/stratum/fabric-tna
 SD-Fabric docs: https://docs.sd-fabric.org/master/index.html
 """
 
-import logging
-
 from service.service.service_handlers.p4_fabric_tna_commons.p4_fabric_tna_commons import *
 
-LOGGER = logging.getLogger(__name__)
-
 # ACL service handler settings
 ACL = "acl"
 ACTION = "action"
diff --git a/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_service_handler.py b/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_service_handler.py
index ae22bed057e3a5808e937ac8b4285a4e0aea42d8..0b09825da0af8a63f76a2c5d1f88b72d42e76954 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_service_handler.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_acl/p4_fabric_tna_acl_service_handler.py
@@ -84,8 +84,7 @@ class P4FabricACLServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Provision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Provision service configuration")
 
         visited = set()
         results = []
@@ -94,17 +93,17 @@ class P4FabricACLServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             try:
                 # Check if this port is part of the ACL configuration
                 _ = self._get_switch_port_in_port_map(device_name, port_id)
             except Exception:
-                LOGGER.warning("Switch {} endpoint {} is not part of the ACL configuration".format(device_name, port_id))
+                LOGGER.warning(f"Switch {device_name} endpoint {port_id} is not part of the ACL configuration")
                 results.append(False)
                 continue
 
@@ -129,15 +128,14 @@ class P4FabricACLServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to insert ACL rules on device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to insert ACL rules on device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Installed {}/{} ACL rules on device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Installed {applied_rules}/{actual_rules} ACL rules on device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -169,8 +167,7 @@ class P4FabricACLServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Deprovision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Deprovision service configuration")
 
         visited = set()
         results = []
@@ -179,17 +176,17 @@ class P4FabricACLServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             try:
                 # Check if this port is part of the ACL configuration
                 _ = self._get_switch_port_in_port_map(device_name, port_id)
             except Exception as ex:
-                LOGGER.warning("Switch {} endpoint {} is not part of the ACL configuration".format(device_name, port_id))
+                LOGGER.warning(f"Switch {device_name} endpoint {port_id} is not part of the ACL configuration")
                 results.append(False)
                 continue
 
@@ -214,15 +211,14 @@ class P4FabricACLServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to delete ACL rules from device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to delete ACL rules from device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Deleted {}/{} ACL rules from device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Deleted {applied_rules}/{actual_rules} ACL rules from device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -333,37 +329,36 @@ class P4FabricACLServiceHandler(_ServiceHandler):
 
         try:
             self.__settings = self.__settings_handler.get('/settings')
-            LOGGER.info("{} with settings: {}".format(self.__service_label, self.__settings))
+            LOGGER.info(f"{self.__service_label} with settings: {self.__settings}")
         except Exception as ex:
-            LOGGER.error("Failed to retrieve service settings: {}".format(ex))
+            LOGGER.error(f"Failed to retrieve service settings: {ex}")
             raise Exception(ex)
 
     def _parse_settings(self):
         try:
             switch_info = self.__settings.value[SWITCH_INFO]
         except Exception as ex:
-            LOGGER.error("Failed to parse service settings: {}".format(ex))
+            LOGGER.error(f"Failed to parse service settings: {ex}")
             raise Exception(ex)
         assert isinstance(switch_info, list), "Switch info object must be a list"
 
         for switch in switch_info:
             for switch_name, sw_info in switch.items():
                 assert switch_name, "Invalid P4 switch name"
-                assert isinstance(sw_info, dict), "Switch {} info must be a map with arch, dpid, and fwd_list items)"
+                assert isinstance(sw_info, dict), f"Switch {switch_name} info must be a map with arch, dpid, and fwd_list items)"
                 assert sw_info[ARCH] in SUPPORTED_TARGET_ARCH_LIST, \
-                    "Switch {} - Supported P4 architectures are: {}".format(switch_name, ','.join(SUPPORTED_TARGET_ARCH_LIST))
+                    f"Switch {switch_name} - Supported P4 architectures are: {','.join(SUPPORTED_TARGET_ARCH_LIST)}"
                 switch_dpid = sw_info[DPID]
-                assert switch_dpid > 0, "Switch {} - P4 switch dataplane ID must be a positive integer".format(switch_name, sw_info[DPID])
+                assert switch_dpid > 0, f"Switch {switch_name} - P4 switch dataplane ID {sw_info[DPID]} must be a positive integer"
 
                 # Access Control list
                 acl = sw_info[ACL]
                 assert isinstance(acl, list),\
-                    "Switch {} access control list must be a list with port_id, [ipv4_dst/src, trn_post_dst/src], and action items)".\
-                        format(switch_name)
+                    f"Switch {switch_name} access control list must be a list with port_id, [ipv4_dst/src, trn_post_dst/src], and action items)"
                 for acl_entry in acl:
-                    LOGGER.info("ACL entry: {}".format(acl_entry))
+                    LOGGER.info(f"ACL entry: {acl_entry}")
                     port_id = acl_entry[PORT_ID]
-                    assert port_id >= 0, "Switch {} - Invalid P4 switch port ID".format(switch_name)
+                    assert port_id >= 0, f"Switch {switch_name} - Invalid P4 switch port ID"
 
                     # Prepare the port map
                     if switch_name not in self.__port_map:
@@ -380,35 +375,35 @@ class P4FabricACLServiceHandler(_ServiceHandler):
                     ipv4_src = ""
                     if IPV4_SRC in acl_entry:
                         ipv4_src = acl_entry[IPV4_SRC]
-                        assert chk_address_ipv4(ipv4_src), "Invalid source IPv4 address {}".format(ipv4_dst)
+                        assert chk_address_ipv4(ipv4_src), f"Invalid source IPv4 address {ipv4_src}"
                         map_entry[IPV4_SRC] = ipv4_src
 
                     ipv4_dst = ""
                     if IPV4_DST in acl_entry:
                         ipv4_dst = acl_entry[IPV4_DST]
-                        assert chk_address_ipv4(ipv4_dst), "Invalid destination IPv4 address {}".format(ipv4_dst)
+                        assert chk_address_ipv4(ipv4_dst), f"Invalid destination IPv4 address {ipv4_dst}"
                         map_entry[IPV4_DST] = ipv4_dst
 
                     ipv4_prefix_len = -1
                     if ipv4_src or ipv4_dst:
                         ipv4_prefix_len = acl_entry[IPV4_PREFIX_LEN]
-                        assert chk_prefix_len_ipv4(ipv4_prefix_len), "Invalid IPv4 address prefix length {}".format(ipv4_prefix_len)
+                        assert chk_prefix_len_ipv4(ipv4_prefix_len), f"Invalid IPv4 address prefix length {ipv4_prefix_len}"
                         map_entry[IPV4_PREFIX_LEN] = ipv4_prefix_len
 
                     trn_port_src = -1
                     if TRN_PORT_SRC in acl_entry:
                         trn_port_src = acl_entry[TRN_PORT_SRC]
-                        assert chk_transport_port(trn_port_src), "Invalid source transport port {}".format(trn_port_src)
+                        assert chk_transport_port(trn_port_src), f"Invalid source transport port {trn_port_src}"
                         map_entry[TRN_PORT_SRC] = trn_port_src
 
                     trn_port_dst = -1
                     if TRN_PORT_DST in acl_entry:
                         trn_port_dst = acl_entry[TRN_PORT_DST]
-                        assert chk_transport_port(trn_port_dst), "Invalid destination transport port {}".format(trn_port_dst)
+                        assert chk_transport_port(trn_port_dst), f"Invalid destination transport port {trn_port_dst}"
                         map_entry[TRN_PORT_DST] = trn_port_dst
 
                     action = acl_entry[ACTION]
-                    assert is_valid_acl_action(action), "Valid actions are: {}".format(','.join(ACTION_LIST))
+                    assert is_valid_acl_action(action), f"Valid actions are: {','.join(ACTION_LIST)}"
 
                     # Retrieve entry from the port map
                     switch_port_entry = self._get_switch_port_in_port_map(switch_name, port_id)
@@ -419,22 +414,22 @@ class P4FabricACLServiceHandler(_ServiceHandler):
                 self.__switch_info[switch_name] = sw_info
 
     def _print_settings(self):
-        LOGGER.info("--------------- {} settings ---------------".format(self.__service.name))
+        LOGGER.info(f"--------------- {self.__service.name} settings ---------------")
         LOGGER.info("--- Topology info")
         for switch_name, switch_info in self.__switch_info.items():
-            LOGGER.info("\t Device {}".format(switch_name))
-            LOGGER.info("\t\t| Target P4 architecture: {}".format(switch_info[ARCH]))
-            LOGGER.info("\t\t|          Data plane ID: {}".format(switch_info[DPID]))
-            LOGGER.info("\t\t|               Port map: {}".format(self.__port_map[switch_name]))
+            LOGGER.info(f"\t Device {switch_name}")
+            LOGGER.info(f"\t\t| Target P4 architecture: {switch_info[ARCH]}")
+            LOGGER.info(f"\t\t|          Data plane ID: {switch_info[DPID]}")
+            LOGGER.info(f"\t\t|               Port map: {self.__port_map[switch_name]}")
         LOGGER.info("-------------------------------------------------------")
 
     def _get_switch_port_in_port_map(self, switch_name : str, port_id : int) -> Dict:
         assert switch_name, "A valid switch name must be used as a key to the port map"
         assert port_id > 0, "A valid switch port ID must be used as a key to a switch's port map"
         switch_entry = self.__port_map[switch_name]
-        assert switch_entry, "Switch {} does not exist in the port map".format(switch_name)
+        assert switch_entry, f"Switch {switch_name} does not exist in the port map"
         port_key = PORT_PREFIX + str(port_id)
-        assert switch_entry[port_key], "Port with ID {} does not exist in the switch map".format(port_id)
+        assert switch_entry[port_key], f"Port with ID {port_id} does not exist in the switch map"
 
         return switch_entry[port_key]
 
diff --git a/src/service/service/service_handlers/p4_fabric_tna_commons/p4_fabric_tna_commons.py b/src/service/service/service_handlers/p4_fabric_tna_commons/p4_fabric_tna_commons.py
index ab3bc28582ef340bc57f6842ba2ea6b6209a11ba..b003ceef8528b2bfb6bdcb19d206eba818277808 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_commons/p4_fabric_tna_commons.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_commons/p4_fabric_tna_commons.py
@@ -366,7 +366,7 @@ def rules_set_up_port(
             action=action
         )
     )
-    LOGGER.debug("Port configured:{}".format(port))
+    LOGGER.debug(f"Port configured:{port}")
 
     return rules_list
 
@@ -678,8 +678,7 @@ def rules_set_up_report_mirror_flow(
     rules_list = []
 
     for i, mirror_id in enumerate(report_mirror_id_list):
-        LOGGER.debug("Mirror ID:{} - Recirculation port: {}".format(
-            mirror_id, recirculation_port_list[i]))
+        LOGGER.debug(f"Mirror ID:{mirror_id} - Recirculation port: {recirculation_port_list[i]}")
         rules_list.extend(
             rules_set_up_clone_session(
                 session_id=mirror_id,
@@ -836,7 +835,7 @@ def apply_rules(
 
     # Provision rules one-by-one
     for i, json_config_rule in enumerate(json_config_rules):
-        LOGGER.debug("Applying rule #{}: {}".format(i, json_config_rule))
+        LOGGER.debug(f"Applying rule #{i}: {json_config_rule}")
         try:
             # Cleanup the rules of this particular object
             del device_obj.device_config.config_rules[:]
@@ -853,11 +852,11 @@ def apply_rules(
 
             applied_rules += 1
         except Exception as ex:
-            LOGGER.error("Error while applying rule #{}: {}".format(i, ex))
+            LOGGER.error(f"Error while applying rule #{i}: {ex}")
             failed_rules += 1
             raise Exception(ex)
 
-    LOGGER.debug("Batch rules: {}/{} applied".format(applied_rules, total_rules))
+    LOGGER.debug(f"Batch rules: {applied_rules}/{total_rules} applied")
 
     return applied_rules, failed_rules
 
@@ -876,7 +875,7 @@ def cache_rule(
     else:
         assert True, "Invalid rule configuration action"
 
-    assert rule_no > 0, "Invalid rule identifier to configure table {}".format(table_name)
+    assert rule_no > 0, f"Invalid rule identifier to configure table {table_name}"
 
     return rule_no
 
@@ -889,8 +888,8 @@ def add_rule_to_map(table_name : str) -> int:
 
     # Get a new valid rule index
     new_index = find_minimum_available_rule_index(RULE_ENTRY_MAP[table_name])
-    LOGGER.debug("Minimum available rule index for table {} is: {}".format(table_name, new_index))
-    assert new_index > 0, "Invalid rule index for table {}".format(table_name)
+    LOGGER.debug(f"Minimum available rule index for table {table_name} is: {new_index}")
+    assert new_index > 0, f"Invalid rule index for table {table_name}"
 
     # New entry
     new_rule_entry = table_name+"["+str(new_index)+"]"
@@ -903,7 +902,7 @@ def add_rule_to_map(table_name : str) -> int:
 
 def delete_rule_from_map(table_name : str) -> int:
     if table_name not in RULE_ENTRY_MAP:
-        LOGGER.error("Table {} has no entries".format(table_name))
+        LOGGER.error(f"Table {table_name} has no entries")
         return -1
 
     # Current number of rules
@@ -958,4 +957,4 @@ def find_minimum_available_rule_index(rule_entry_list : List) -> int:
 
 def print_rule_map() -> None:
     for k in RULE_ENTRY_MAP.keys():
-        LOGGER.info("Table {} entries: {}".format(k, RULE_ENTRY_MAP[k]))
+        LOGGER.info(f"Table {k} entries: {RULE_ENTRY_MAP[k]}")
diff --git a/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_config.py b/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_config.py
index c7d84889f55d630b6daa9247e9fad336ee1ca63a..da5d6db070278b1e607bee6d92198aa4c5ddf677 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_config.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_config.py
@@ -22,7 +22,6 @@ SD-Fabric repo: https://github.com/stratum/fabric-tna
 SD-Fabric docs: https://docs.sd-fabric.org/master/index.html
 """
 
-import logging
 from typing import List, Tuple
 from common.proto.context_pb2 import ConfigActionEnum
 from common.tools.object_factory.ConfigRule import json_config_rule
@@ -30,8 +29,6 @@ from common.type_checkers.Checkers import chk_address_ipv4, chk_transport_port
 
 from service.service.service_handlers.p4_fabric_tna_commons.p4_fabric_tna_commons import *
 
-LOGGER = logging.getLogger(__name__)
-
 # INT service handler settings
 INT_COLLECTOR_INFO = "int_collector_info"
 INT_REPORT_MIRROR_ID_LIST = "int_report_mirror_id_list"
@@ -135,8 +132,6 @@ def rules_set_up_int_recirculation_ports(
             )
         )
 
-    LOGGER.debug("INT recirculation ports configured:{}".format(recirculation_port_list))
-
     return rules_list
 
 def rules_set_up_int_report_flow(
diff --git a/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_service_handler.py b/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_service_handler.py
index 6c27a47dedbd70916a1cb93d253a579748ae809a..5cc6e24c8af7eab80f7830cf160304939564800e 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_service_handler.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_int/p4_fabric_tna_int_service_handler.py
@@ -97,8 +97,7 @@ class P4FabricINTServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Provision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Provision service configuration")
 
         visited = set()
         results = []
@@ -109,8 +108,7 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             # Skip already visited devices
             if device.name in visited:
                 continue
-            LOGGER.info("Device {} - Setting up In-band Network Telemetry (INT) configuration".format(
-                device.name))
+            LOGGER.info(f"Device {device.name} - Setting up In-band Network Telemetry (INT) configuration")
 
             rules = []
             actual_rules = -1
@@ -126,15 +124,14 @@ class P4FabricINTServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to insert INT rules on device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to insert INT rules on device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Installed {}/{} INT rules on device {}".format(
-                    applied_rules, actual_rules, device.name))
+                LOGGER.info(f"Installed {applied_rules}/{actual_rules} INT rules on device {device.name}")
                 results.append(True)
 
             # You should no longer visit this device again
@@ -165,8 +162,7 @@ class P4FabricINTServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Deprovision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Deprovision service configuration")
 
         visited = set()
         results = []
@@ -177,8 +173,7 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             # Skip already visited devices
             if device.name in visited:
                 continue
-            LOGGER.info("Device {} - Removing In-band Network Telemetry (INT) configuration".format(
-                device.name))
+            LOGGER.info(f"Device {device.name} - Removing In-band Network Telemetry (INT) configuration")
 
             rules = []
             actual_rules = -1
@@ -191,15 +186,14 @@ class P4FabricINTServiceHandler(_ServiceHandler):
                 applied_rules, failed_rules = apply_rules(
                 task_executor=self.__task_executor, device_obj=device, json_config_rules=rules)
             except Exception as ex:
-                LOGGER.error("Failed to delete INT rules from device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to delete INT rules from device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Deleted {}/{} INT rules from device {}".format(
-                    applied_rules, actual_rules, device.name))
+                LOGGER.info(f"Deleted {applied_rules}/{actual_rules} INT rules from device {device.name}")
                 results.append(True)
 
             # You should no longer visit this device again
@@ -317,9 +311,9 @@ class P4FabricINTServiceHandler(_ServiceHandler):
 
         try:
             self.__settings = self.__settings_handler.get('/settings')
-            LOGGER.info("{} with settings: {}".format(self.__service_label, self.__settings))
+            LOGGER.info(f"{self.__service_label} with settings: {self.__settings}")
         except Exception as ex:
-            LOGGER.error("Failed to retrieve service settings: {}".format(ex))
+            LOGGER.error(f"Failed to retrieve service settings: {ex}")
             raise Exception(ex)
 
     def _parse_settings(self):
@@ -327,32 +321,31 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             switch_info = self.__settings.value[SWITCH_INFO]
             assert isinstance(switch_info, list), "Switch info object must be a list"
         except Exception as ex:
-            LOGGER.error("Failed to parse service settings: {}".format(ex))
+            LOGGER.error(f"Failed to parse service settings: {ex}")
             raise Exception(ex)
 
         for switch in switch_info:
             for switch_name, sw_info in switch.items():
                 try:
                     assert switch_name, "Invalid P4 switch name"
-                    assert isinstance(sw_info, dict), "Switch {} info must be a map with arch, dpid, mac, ip, and int_port items)"
+                    assert isinstance(sw_info, dict), f"Switch {switch_name} info must be a map with arch, dpid, mac, ip, and int_port items)"
                     assert sw_info[ARCH] in SUPPORTED_TARGET_ARCH_LIST, \
-                        "Switch {} - Supported P4 architectures are: {}".format(switch_name, ','.join(SUPPORTED_TARGET_ARCH_LIST))
-                    assert sw_info[DPID] > 0, "Switch {} - P4 switch dataplane ID must be a positive integer".format(switch_name, sw_info[DPID])
-                    assert chk_address_mac(sw_info[MAC]), "Switch {} - Invalid source Ethernet address".format(switch_name)
-                    assert chk_address_ipv4(sw_info[IP]), "Switch {} - Invalid source IP address".format(switch_name)
-                    assert isinstance(sw_info[PORT_INT], dict), "Switch {} - INT port object must be a map with port_id and port_type items".format(switch_name)
-                    assert sw_info[PORT_INT][PORT_ID] >= 0, "Switch {} - Invalid P4 switch port ID".format(switch_name)
-                    assert sw_info[PORT_INT][PORT_TYPE] in PORT_TYPES_STR_VALID, "Switch {} - Valid P4 switch port types are: {}".format(
-                        switch_name, ','.join(PORT_TYPES_STR_VALID))
+                        f"Switch {switch_name} - Supported P4 architectures are: {','.join(SUPPORTED_TARGET_ARCH_LIST)}"
+                    assert sw_info[DPID] > 0, f"Switch {switch_name} - P4 switch dataplane ID {sw_info[DPID]} must be a positive integer"
+                    assert chk_address_mac(sw_info[MAC]), f"Switch {switch_name} - Invalid source Ethernet address"
+                    assert chk_address_ipv4(sw_info[IP]), f"Switch {switch_name} - Invalid source IP address"
+                    assert isinstance(sw_info[PORT_INT], dict), f"Switch {switch_name} - INT port object must be a map with port_id and port_type items"
+                    assert sw_info[PORT_INT][PORT_ID] >= 0, f"Switch {switch_name} - Invalid P4 switch port ID"
+                    assert sw_info[PORT_INT][PORT_TYPE] in PORT_TYPES_STR_VALID, f"Switch {switch_name} - Valid P4 switch port types are: {','.join(PORT_TYPES_STR_VALID)}"
                     if arch_tna(sw_info[ARCH]):
                         sw_info[RECIRCULATION_PORT_LIST] = RECIRCULATION_PORTS_TNA
                         sw_info[INT_REPORT_MIRROR_ID_LIST] = INT_REPORT_MIRROR_ID_LIST_TNA
                     else:
                         sw_info[RECIRCULATION_PORT_LIST] = RECIRCULATION_PORTS_V1MODEL
                         sw_info[INT_REPORT_MIRROR_ID_LIST] = INT_REPORT_MIRROR_ID_LIST_V1MODEL
-                    assert isinstance(sw_info[RECIRCULATION_PORT_LIST], list), "Switch {} - Recirculation ports must be described as a list".format(switch_name)
+                    assert isinstance(sw_info[RECIRCULATION_PORT_LIST], list), f"Switch {switch_name} - Recirculation ports must be described as a list"
                 except Exception as ex:
-                    LOGGER.error("Failed to parse switch {} information".format(switch_name))
+                    LOGGER.error(f"Failed to parse switch {switch_name} information")
                     return
                 self.__switch_info[switch_name] = sw_info
 
@@ -376,44 +369,41 @@ class P4FabricINTServiceHandler(_ServiceHandler):
                 self.__int_vlan_id = self.__int_collector_info[VLAN_ID]
                 assert chk_vlan_id(self.__int_vlan_id), "Invalid VLAN ID for INT"
             else:
-                LOGGER.warning("No or invalid INT VLAN ID is provided. Default VLAN ID is set to {} (No VLAN)".\
-                               format(self.__int_vlan_id))
+                LOGGER.warning(f"No or invalid INT VLAN ID is provided. Default VLAN ID is set to {self.__int_vlan_id} (No VLAN)")
 
             if self.__int_collector_info[DURATION_SEC] > 0:
                 self.__int_collector_duration_s = self.__int_collector_info[DURATION_SEC]
             else:
-                LOGGER.warning("No or invalid INT collection duration is provided. Default duration is set to {} seconds".\
-                               format(self.__int_collector_duration_s))
+                LOGGER.warning(f"No or invalid INT collection duration is provided. Default duration is set to {self.__int_collector_duration_s} seconds")
 
             if self.__int_collector_info[INTERVAL_SEC] > 0:
                 self.__int_collector_interval_s = self.__int_collector_info[INTERVAL_SEC]
             else:
-                LOGGER.warning("No or invalid INT collection interval is provided. Default interval is set to {} seconds".\
-                               format(self.__int_collector_interval_s))
+                LOGGER.warning(f"No or invalid INT collection interval is provided. Default interval is set to {self.__int_collector_interval_s} seconds")
         except Exception as ex:
             LOGGER.error("Failed to parse INT collector information")
             return
 
     def _print_settings(self):
-        LOGGER.info("-------------------- {} settings --------------------".format(self.__service.name))
+        LOGGER.info(f"-------------------- {self.__service.name} settings --------------------")
         LOGGER.info("--- Topology info")
         for switch_name, switch_info in self.__switch_info.items():
-            LOGGER.info("\t Device {}".format(switch_name))
-            LOGGER.info("\t\t|  Target P4 architecture: {}".format(switch_info[ARCH]))
-            LOGGER.info("\t\t|           Data plane ID: {}".format(switch_info[DPID]))
-            LOGGER.info("\t\t|      Source MAC address: {}".format(switch_info[MAC]))
-            LOGGER.info("\t\t|      Source  IP address: {}".format(switch_info[IP]))
-            LOGGER.info("\t\t|           INT port   ID: {}".format(switch_info[PORT_INT][PORT_ID]))
-            LOGGER.info("\t\t|           INT port type: {}".format(switch_info[PORT_INT][PORT_TYPE]))
-            LOGGER.info("\t\t| Recirculation port list: {}".format(switch_info[RECIRCULATION_PORT_LIST]))
-            LOGGER.info("\t\t|   Report mirror ID list: {}".format(switch_info[INT_REPORT_MIRROR_ID_LIST]))
-        LOGGER.info("--- INT collector interface: {}".format(self.__int_collector_iface))
-        LOGGER.info("--- INT collector       MAC: {}".format(self.__int_collector_mac))
-        LOGGER.info("--- INT collector        IP: {}".format(self.__int_collector_ip))
-        LOGGER.info("--- INT collector      port: {}".format(self.__int_collector_port))
-        LOGGER.info("--- INT             VLAN ID: {}".format(self.__int_vlan_id))
-        LOGGER.info("--- INT collector  duration: {} sec".format(self.__int_collector_duration_s))
-        LOGGER.info("--- INT collector  interval: {} sec".format(self.__int_collector_interval_s))
+            LOGGER.info(f"\t Device {switch_name}")
+            LOGGER.info(f"\t\t|  Target P4 architecture: {switch_info[ARCH]}")
+            LOGGER.info(f"\t\t|           Data plane ID: {switch_info[DPID]}")
+            LOGGER.info(f"\t\t|      Source MAC address: {switch_info[MAC]}")
+            LOGGER.info(f"\t\t|      Source  IP address: {switch_info[IP]}")
+            LOGGER.info(f"\t\t|           INT port   ID: {switch_info[PORT_INT][PORT_ID]}")
+            LOGGER.info(f"\t\t|           INT port type: {switch_info[PORT_INT][PORT_TYPE]}")
+            LOGGER.info(f"\t\t| Recirculation port list: {switch_info[RECIRCULATION_PORT_LIST]}")
+            LOGGER.info(f"\t\t|   Report mirror ID list: {switch_info[INT_REPORT_MIRROR_ID_LIST]}")
+        LOGGER.info(f"--- INT collector interface: {self.__int_collector_iface}")
+        LOGGER.info(f"--- INT collector       MAC: {self.__int_collector_mac}")
+        LOGGER.info(f"--- INT collector        IP: {self.__int_collector_ip}")
+        LOGGER.info(f"--- INT collector      port: {self.__int_collector_port}")
+        LOGGER.info(f"--- INT             VLAN ID: {self.__int_vlan_id}")
+        LOGGER.info(f"--- INT collector  duration: {self.__int_collector_duration_s} sec")
+        LOGGER.info(f"--- INT collector  interval: {self.__int_collector_interval_s} sec")
         LOGGER.info("-----------------------------------------------------------------")
 
     def _create_rules(self, device_obj : Device, action : ConfigActionEnum): # type: ignore
@@ -529,11 +519,11 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             # Get the context
             ctx_id = response.context_ids[0].context_uuid.uuid
             assert ctx_id, "Cannot create INT collector with invalid context ID"
-            LOGGER.debug("Context ID: {}".format(ctx_id))
+            LOGGER.debug(f"Context ID: {ctx_id}")
 
             service_id = self.__service.service_id.service_uuid.uuid
             assert service_id, "Cannot create INT collector with invalid service ID"
-            LOGGER.debug("Service ID: {}".format(service_id))
+            LOGGER.debug(f"Service ID: {service_id}")
 
             # Get a service endpoint
             svc_endpoints = self.__service.service_endpoint_ids[0]
@@ -542,14 +532,14 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             # Get a P4 device associated with this endpoint
             dev_id = svc_endpoints.device_id.device_uuid.uuid
             assert dev_id, "Cannot create INT collector with invalid device ID"
-            LOGGER.debug("Device ID: {}".format(dev_id))
+            LOGGER.debug(f"Device ID: {dev_id}")
 
             # Get the endpoint ID
             ep_id = svc_endpoints.endpoint_uuid.uuid
             assert ep_id, "Cannot create INT collector with invalid endpoint ID"
-            LOGGER.debug("Endpoint ID: {}".format(ep_id))
+            LOGGER.debug(f"Endpoint ID: {ep_id}")
         except Exception as ex:
-            LOGGER.error("Failed to retrieve context for starting the INT collector: {}".format(ex))
+            LOGGER.error(f"Failed to retrieve context for starting the INT collector: {ex}")
             raise ex
 
         return ctx_id, service_id, dev_id, ep_id
@@ -558,8 +548,8 @@ class P4FabricINTServiceHandler(_ServiceHandler):
         ctx_id = service_id = dev_id = ep_id = None
         try:
             ctx_id, service_id, dev_id, ep_id = self._retrieve_context_for_int_collector()
-        except Exception:
-            LOGGER.error("INT collector cannot be initialized due to missing information")
+        except Exception as ex:
+            LOGGER.error(f"INT collector cannot be initialized: Failed to retrieve context {ex}")
             return
 
         # Create a "virtual" INT KPI associated with this context and P4 dataplane
@@ -575,9 +565,9 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             # Set this new KPI
             kpi_manager_client = KpiManagerClient()
             kpi_id_int: KpiId = kpi_manager_client.SetKpiDescriptor(kpi_descriptor_int) # type: ignore
-            LOGGER.debug("INT KPI ID: {}".format(kpi_id_int))
+            LOGGER.debug(f"INT KPI ID: {kpi_id_int}")
         except Exception:
-            LOGGER.error("INT collector cannot be initialized due to failed KPI initialization")
+            LOGGER.error(f"INT collector cannot be initialized: Failed to initialize KPI {ex}")
             return
 
         # Initialize an INT collector object
@@ -591,13 +581,19 @@ class P4FabricINTServiceHandler(_ServiceHandler):
             collect_int.int_collector.transport_port = self.__int_collector_port
             collect_int.int_collector.service_id = service_id
             collect_int.int_collector.context_id = ctx_id
-            LOGGER.info("INT Collector: {}".format(str(collect_int)))
+            LOGGER.info(f"INT Collector: {str(collect_int)}")
+        except Exception as ex:
+            LOGGER.error(f"INT collector cannot be initialized: Failed to create collector object {ex}")
+            return
 
+        # Start the INT collector
+        c_id = None
+        try:
             telemetry_frontend_client = TelemetryFrontendClient()
-            collect_id: CollectorId = telemetry_frontend_client.StartCollector(collect_int) # type: ignore
-            assert collect_id.uuid, "INT collector failed to start"
-        except Exception:
-            LOGGER.error("INT collector cannot be initialized")
+            c_id: CollectorId = telemetry_frontend_client.StartCollector(collect_int) # type: ignore
+            assert c_id.collector_id.uuid, "INT collector failed to start"
+        except Exception as ex:
+            LOGGER.error(f"INT collector cannot be initialized: Failed to start the collector {ex}")
             return
 
-        LOGGER.info("INT collector with ID {} is successfully invoked".format(collect_id))
+        LOGGER.info(f"INT collector with ID {c_id.collector_id.uuid} is successfully invoked")
diff --git a/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_config.py b/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_config.py
index 4ed29ff0c4318e822e581ed7a4e742ee95ab6d02..0fd1b7101f7f74809c118b6a2cee3e7c265e6c03 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_config.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_config.py
@@ -21,13 +21,10 @@ SD-Fabric repo: https://github.com/stratum/fabric-tna
 SD-Fabric docs: https://docs.sd-fabric.org/master/index.html
 """
 
-import logging
 from common.proto.context_pb2 import ConfigActionEnum
 
 from service.service.service_handlers.p4_fabric_tna_commons.p4_fabric_tna_commons import *
 
-LOGGER = logging.getLogger(__name__)
-
 # L2 simple service handler settings
 FORWARDING_LIST = "fwd_list"
 HOST_MAC = "host_mac"
diff --git a/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_service_handler.py b/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_service_handler.py
index c89af771db4c7cdc15495f1c08f035350f965296..aa8bd6209dec3be2dee3b7146a61f926e3d2f7c8 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_service_handler.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_l2_simple/p4_fabric_tna_l2_simple_service_handler.py
@@ -83,8 +83,7 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Provision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Provision service configuration")
 
         visited = set()
         results = []
@@ -93,11 +92,11 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             dev_port_key = device_name + "-" + PORT_PREFIX + str(port_id)
 
@@ -120,15 +119,14 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to insert L2 rules on device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to insert L2 rules on device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Installed {}/{} L2 rules on device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Installed {applied_rules}/{actual_rules} L2 rules on device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -160,8 +158,7 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Deprovision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Deprovision service configuration")
 
         visited = set()
         results = []
@@ -170,11 +167,11 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             dev_port_key = device_name + "-" + PORT_PREFIX + str(port_id)
 
@@ -197,15 +194,14 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to delete L2 rules from device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to delete L2 rules from device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Deleted {}/{} L2 rules from device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Deleted {applied_rules}/{actual_rules} L2 rules from device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -316,40 +312,39 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
 
         try:
             self.__settings = self.__settings_handler.get('/settings')
-            LOGGER.info("{} with settings: {}".format(self.__service_label, self.__settings))
+            LOGGER.info(f"{self.__service_label} with settings: {self.__settings}")
         except Exception as ex:
-            LOGGER.error("Failed to retrieve service settings: {}".format(ex))
+            LOGGER.error(f"Failed to retrieve service settings: {ex}")
             raise Exception(ex)
 
     def _parse_settings(self):
         try:
             switch_info = self.__settings.value[SWITCH_INFO]
         except Exception as ex:
-            LOGGER.error("Failed to parse service settings: {}".format(ex))
+            LOGGER.error(f"Failed to parse service settings: {ex}")
             raise Exception(ex)
         assert isinstance(switch_info, list), "Switch info object must be a list"
 
         for switch in switch_info:
             for switch_name, sw_info in switch.items():
                 assert switch_name, "Invalid P4 switch name"
-                assert isinstance(sw_info, dict), "Switch {} info must be a map with arch, dpid, and fwd_list items)"
+                assert isinstance(sw_info, dict), f"Switch {switch_name} info must be a map with arch, dpid, and fwd_list items)"
                 assert sw_info[ARCH] in SUPPORTED_TARGET_ARCH_LIST, \
-                    "Switch {} - Supported P4 architectures are: {}".format(switch_name, ','.join(SUPPORTED_TARGET_ARCH_LIST))
+                    f"Switch {switch_name} - Supported P4 architectures are: {','.join(SUPPORTED_TARGET_ARCH_LIST)}"
                 switch_dpid = sw_info[DPID]
-                assert switch_dpid > 0, "Switch {} - P4 switch dataplane ID must be a positive integer".format(switch_name, sw_info[DPID])
+                assert switch_dpid > 0, f"Switch {switch_name} - P4 switch dataplane ID {sw_info[DPID]} must be a positive integer"
 
                 # Port list
                 port_list = sw_info[PORT_LIST]
                 assert isinstance(port_list, list), \
-                    "Switch {} port list must be a list with port_id, port_type, and vlan_id items".format(switch_name)
+                    f"Switch {switch_name} port list must be a list with port_id, port_type, and vlan_id items"
                 for port in port_list:
                     port_id = port[PORT_ID]
-                    assert port_id >= 0, "Switch {} - Invalid P4 switch port ID".format(switch_name)
+                    assert port_id >= 0, f"Switch {switch_name} - Invalid P4 switch port ID"
                     port_type = port[PORT_TYPE]
-                    assert port_type in PORT_TYPES_STR_VALID, "Switch {} - Valid P4 switch port types are: {}".format(
-                        switch_name, ','.join(PORT_TYPES_STR_VALID))
+                    assert port_type in PORT_TYPES_STR_VALID, f"Switch {switch_name} - Valid P4 switch port types are: {','.join(PORT_TYPES_STR_VALID)}"
                     vlan_id = port[VLAN_ID]
-                    assert chk_vlan_id(vlan_id), "Switch {} - Invalid VLAN ID for port {}".format(switch_name, port_id)
+                    assert chk_vlan_id(vlan_id), f"Switch {switch_name} - Invalid VLAN ID for port {port_id}"
 
                     if switch_name not in self.__port_map:
                         self.__port_map[switch_name] = {}
@@ -363,38 +358,38 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
 
                 # Forwarding list
                 fwd_list = sw_info[FORWARDING_LIST]
-                assert isinstance(fwd_list, list), "Switch {} forwarding list must be a list".format(switch_name)
+                assert isinstance(fwd_list, list), f"Switch {switch_name} forwarding list must be a list"
                 for fwd_entry in fwd_list:
                     port_id = fwd_entry[PORT_ID]
-                    assert port_id >= 0, "Invalid port ID: {}".format(port_id)
+                    assert port_id >= 0, f"Invalid port ID: {port_id}"
                     host_mac = fwd_entry[HOST_MAC]
-                    assert chk_address_mac(host_mac), "Invalid host MAC address {}".format(host_mac)
+                    assert chk_address_mac(host_mac), f"Invalid host MAC address {host_mac}"
 
                     # Retrieve entry from the port map
                     switch_port_entry = self._get_switch_port_in_port_map(switch_name, port_id)
 
                     host_facing_port = self._is_host_facing_port(switch_name, port_id)
-                    LOGGER.info("Switch {} - Port {}: Is host facing: {}".format(switch_name, port_id, "True" if host_facing_port else "False"))
+                    LOGGER.info(f"Switch {switch_name} - Port {port_id}: Is host facing: {"True" if host_facing_port else "False"}")
                     switch_port_entry[FORWARDING_LIST].append(host_mac)
                 self.__switch_info[switch_name] = sw_info
 
     def _print_settings(self):
-        LOGGER.info("--------------- {} settings ---------------".format(self.__service.name))
+        LOGGER.info(f"--------------- {self.__service.name} settings ---------------")
         LOGGER.info("--- Topology info")
         for switch_name, switch_info in self.__switch_info.items():
-            LOGGER.info("\t Device {}".format(switch_name))
-            LOGGER.info("\t\t| Target P4 architecture: {}".format(switch_info[ARCH]))
-            LOGGER.info("\t\t|          Data plane ID: {}".format(switch_info[DPID]))
-            LOGGER.info("\t\t|               Port map: {}".format(self.__port_map[switch_name]))
+            LOGGER.info(f"\t Device {switch_name}")
+            LOGGER.info(f"\t\t| Target P4 architecture: {switch_info[ARCH]}")
+            LOGGER.info(f"\t\t|          Data plane ID: {switch_info[DPID]}")
+            LOGGER.info(f"\t\t|               Port map: {self.__port_map[switch_name]}")
         LOGGER.info("-------------------------------------------------------")
 
     def _get_switch_port_in_port_map(self, switch_name : str, port_id : int) -> Dict:
         assert switch_name, "A valid switch name must be used as a key to the port map"
         assert port_id > 0, "A valid switch port ID must be used as a key to a switch's port map"
         switch_entry = self.__port_map[switch_name]
-        assert switch_entry, "Switch {} does not exist in the port map".format(switch_name)
+        assert switch_entry, f"Switch {switch_name} does not exist in the port map"
         port_key = PORT_PREFIX + str(port_id)
-        assert switch_entry[port_key], "Port with ID {} does not exist in the switch map".format(port_id)
+        assert switch_entry[port_key], f"Port with ID {port_id} does not exist in the switch map"
 
         return switch_entry[port_key]
 
@@ -417,7 +412,7 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
         dev_name = device_obj.name
 
         host_facing_port = self._is_host_facing_port(dev_name, port_id)
-        LOGGER.info("\t | Service endpoint is host facing: {}".format("True" if host_facing_port else "False"))
+        LOGGER.info(f"\t | Service endpoint is host facing: {"True" if host_facing_port else "False"}")
 
         rules  = []
 
@@ -441,7 +436,7 @@ class P4FabricL2SimpleServiceHandler(_ServiceHandler):
 
         fwd_list = self._get_fwd_list_of_switch_port(switch_name=dev_name, port_id=port_id)
         for mac in fwd_list:
-            LOGGER.info("Switch {} - Port {} - Creating rule for host MAC: {}".format(dev_name, port_id, mac))
+            LOGGER.info(f"Switch {dev_name} - Port {port_id} - Creating rule for host MAC: {mac}")
             try:
                 ### Bridging rules
                 rules += rules_set_up_fwd_bridging(
diff --git a/src/service/service/service_handlers/p4_fabric_tna_l3/p4_fabric_tna_l3_service_handler.py b/src/service/service/service_handlers/p4_fabric_tna_l3/p4_fabric_tna_l3_service_handler.py
index a9225d58156243b7700da6e186dcebd7d541f384..4f6927829a20defb0fd02fcadf03794f64fa6794 100644
--- a/src/service/service/service_handlers/p4_fabric_tna_l3/p4_fabric_tna_l3_service_handler.py
+++ b/src/service/service/service_handlers/p4_fabric_tna_l3/p4_fabric_tna_l3_service_handler.py
@@ -81,8 +81,7 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Provision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Provision service configuration")
 
         visited = set()
         results = []
@@ -91,11 +90,11 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             dev_port_key = device_name + "-" + PORT_PREFIX + str(port_id)
 
@@ -118,15 +117,14 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to insert L3 rules on device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to insert L3 rules on device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Installed {}/{} ACL rules on device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Installed {applied_rules}/{actual_rules} ACL rules on device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -158,8 +156,7 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
         chk_type('endpoints', endpoints, list)
         if len(endpoints) == 0: return []
 
-        LOGGER.info("{} - Deprovision service configuration".format(
-            self.__service_label))
+        LOGGER.info(f"{self.__service_label} - Deprovision service configuration")
 
         visited = set()
         results = []
@@ -168,11 +165,11 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
             device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
             device_name = device.name
 
-            LOGGER.info("Device {}".format(device_name))
-            LOGGER.info("\t | Service endpoint UUID: {}".format(endpoint_uuid))
+            LOGGER.info(f"Device {device_name}")
+            LOGGER.info(f"\t | Service endpoint UUID: {endpoint_uuid}")
 
             port_id = find_port_id_in_endpoint_list(device.device_endpoints, endpoint_uuid)
-            LOGGER.info("\t | Service port ID: {}".format(port_id))
+            LOGGER.info(f"\t | Service port ID: {port_id}")
 
             dev_port_key = device_name + "-" + PORT_PREFIX + str(port_id)
 
@@ -195,15 +192,14 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
                     json_config_rules=rules
                 )
             except Exception as ex:
-                LOGGER.error("Failed to delete L3 rules from device {} due to {}".format(device.name, ex))
+                LOGGER.error(f"Failed to delete L3 rules from device {device.name} due to {ex}")
                 results.append(ex)
             finally:
                 rules.clear()
 
             # Ensure correct status
             if (failed_rules == 0) and (applied_rules == actual_rules):
-                LOGGER.info("Deleted {}/{} L3 rules from device {} and port {}".format(
-                    applied_rules, actual_rules, device_name, port_id))
+                LOGGER.info(f"Deleted {applied_rules}/{actual_rules} L3 rules from device {device_name} and port {port_id}")
                 results.append(True)
 
             # You should no longer visit this device port again
@@ -314,38 +310,37 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
 
         try:
             self.__settings = self.__settings_handler.get('/settings')
-            LOGGER.info("{} with settings: {}".format(self.__service_label, self.__settings))
+            LOGGER.info(f"{self.__service_label} with settings: {self.__settings}")
         except Exception as ex:
-            LOGGER.error("Failed to retrieve service settings: {}".format(ex))
+            LOGGER.error(f"Failed to retrieve service settings: {ex}")
             raise Exception(ex)
 
     def _parse_settings(self):
         try:
             switch_info = self.__settings.value[SWITCH_INFO]
         except Exception as ex:
-            LOGGER.error("Failed to parse service settings: {}".format(ex))
+            LOGGER.error(f"Failed to parse service settings: {ex}")
             raise Exception(ex)
         assert isinstance(switch_info, list), "Switch info object must be a list"
 
         for switch in switch_info:
             for switch_name, sw_info in switch.items():
                 assert switch_name, "Invalid P4 switch name"
-                assert isinstance(sw_info, dict), "Switch {} info must be a map with arch, dpid, and fwd_list items)"
+                assert isinstance(sw_info, dict), f"Switch {switch_name} info must be a map with arch, dpid, and fwd_list items)"
                 assert sw_info[ARCH] in SUPPORTED_TARGET_ARCH_LIST, \
-                    "Switch {} - Supported P4 architectures are: {}".format(switch_name, ','.join(SUPPORTED_TARGET_ARCH_LIST))
+                    f"Switch {switch_name} - Supported P4 architectures are: {','.join(SUPPORTED_TARGET_ARCH_LIST)}"
                 switch_dpid = sw_info[DPID]
-                assert switch_dpid > 0, "Switch {} - P4 switch dataplane ID must be a positive integer".format(switch_name, sw_info[DPID])
+                assert switch_dpid > 0, f"Switch {switch_name} - P4 switch dataplane ID {sw_info[DPID]} must be a positive integer"
 
                 # Port list
                 port_list = sw_info[PORT_LIST]
                 assert isinstance(port_list, list),\
-                    "Switch {} port list must be a list with port_id and port_type items".format(switch_name)
+                    f"Switch {switch_name} port list must be a list with port_id and port_type items"
                 for port in port_list:
                     port_id = port[PORT_ID]
-                    assert port_id >= 0, "Switch {} - Invalid P4 switch port ID".format(switch_name)
+                    assert port_id >= 0, f"Switch {switch_name} - Invalid P4 switch port ID"
                     port_type = port[PORT_TYPE]
-                    assert port_type in PORT_TYPES_STR_VALID, "Switch {} - Valid P4 switch port types are: {}".format(
-                        switch_name, ','.join(PORT_TYPES_STR_VALID))
+                    assert port_type in PORT_TYPES_STR_VALID, f"Switch {switch_name} - Valid P4 switch port types are: {','.join(PORT_TYPES_STR_VALID)}"
 
                     if switch_name not in self.__port_map:
                         self.__port_map[switch_name] = {}
@@ -358,18 +353,18 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
 
                 # Routing list
                 routing_list = sw_info[ROUTING_LIST]
-                assert isinstance(routing_list, list), "Switch {} routing list must be a list".format(switch_name)
+                assert isinstance(routing_list, list), f"Switch {switch_name} routing list must be a list"
                 for rt_entry in routing_list:
                     port_id = rt_entry[PORT_ID]
-                    assert port_id >= 0, "Invalid port ID: {}".format(port_id)
+                    assert port_id >= 0, f"Invalid port ID: {port_id}"
                     ipv4_dst = rt_entry[IPV4_DST]
-                    assert chk_address_ipv4(ipv4_dst), "Invalid destination IPv4 address {}".format(ipv4_dst)
+                    assert chk_address_ipv4(ipv4_dst), f"Invalid destination IPv4 address {ipv4_dst}"
                     ipv4_prefix_len = rt_entry[IPV4_PREFIX_LEN]
-                    assert chk_prefix_len_ipv4(ipv4_prefix_len), "Invalid IPv4 address prefix length {}".format(ipv4_prefix_len)
+                    assert chk_prefix_len_ipv4(ipv4_prefix_len), f"Invalid IPv4 address prefix length {ipv4_prefix_len}"
                     mac_src = rt_entry[MAC_SRC]
-                    assert chk_address_mac(mac_src), "Invalid source MAC address {}".format(mac_src)
+                    assert chk_address_mac(mac_src), f"Invalid source MAC address {mac_src}"
                     mac_dst = rt_entry[MAC_DST]
-                    assert chk_address_mac(mac_dst), "Invalid destination MAC address {}".format(mac_dst)
+                    assert chk_address_mac(mac_dst), f"Invalid destination MAC address {mac_dst}"
 
                     # Retrieve entry from the port map
                     switch_port_entry = self._get_switch_port_in_port_map(switch_name, port_id)
@@ -387,22 +382,22 @@ class P4FabricL3ServiceHandler(_ServiceHandler):
                 self.__switch_info[switch_name] = sw_info
 
     def _print_settings(self):
-        LOGGER.info("--------------- {} settings ---------------".format(self.__service.name))
+        LOGGER.info(f"--------------- {self.__service.name} settings ---------------")
         LOGGER.info("--- Topology info")
         for switch_name, switch_info in self.__switch_info.items():
-            LOGGER.info("\t Device {}".format(switch_name))
-            LOGGER.info("\t\t| Target P4 architecture: {}".format(switch_info[ARCH]))
-            LOGGER.info("\t\t|          Data plane ID: {}".format(switch_info[DPID]))
-            LOGGER.info("\t\t|               Port map: {}".format(self.__port_map[switch_name]))
+            LOGGER.info(f"\t Device {switch_name}")
+            LOGGER.info(f"\t\t| Target P4 architecture: {switch_info[ARCH]}")
+            LOGGER.info(f"\t\t|          Data plane ID: {switch_info[DPID]}")
+            LOGGER.info(f"\t\t|               Port map: {self.__port_map[switch_name]}")
         LOGGER.info("-------------------------------------------------------")
 
     def _get_switch_port_in_port_map(self, switch_name : str, port_id : int) -> Dict:
         assert switch_name, "A valid switch name must be used as a key to the port map"
         assert port_id > 0, "A valid switch port ID must be used as a key to a switch's port map"
         switch_entry = self.__port_map[switch_name]
-        assert switch_entry, "Switch {} does not exist in the port map".format(switch_name)
+        assert switch_entry, f"Switch {switch_name} does not exist in the port map"
         port_key = PORT_PREFIX + str(port_id)
-        assert switch_entry[port_key], "Port with ID {} does not exist in the switch map".format(port_id)
+        assert switch_entry[port_key], f"Port with ID {port_id} does not exist in the switch map"
 
         return switch_entry[port_key]
 
diff --git a/src/service/service/service_handlers/tapi_lsp/ConfigRules.py b/src/service/service/service_handlers/tapi_lsp/ConfigRules.py
new file mode 100644
index 0000000000000000000000000000000000000000..d5b4431f9853423a2aad247b91d3f3baac3e7871
--- /dev/null
+++ b/src/service/service/service_handlers/tapi_lsp/ConfigRules.py
@@ -0,0 +1,58 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from typing import Any, Dict, List, Optional, Tuple
+from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
+from service.service.service_handler_api.AnyTreeTools import TreeNode
+LOGGER = logging.getLogger(__name__)
+
+def get_value(field_name : str, *containers, default=None) -> Optional[Any]:
+    if len(containers) == 0: raise Exception('No containers specified')
+    for container in containers:
+        if field_name not in container: continue
+        return container[field_name]
+    return default
+
+def setup_config_rules(
+    endpoint_name : str,  endpoint_tapi_lsp : List [Tuple]
+) -> List[Dict]:
+
+    json_config_rules = [
+    ]
+
+    for res_key, res_value in endpoint_tapi_lsp:
+        json_config_rules.append(
+               {'action': 1, 'tapi_lsp': res_value}
+            )
+
+    return json_config_rules
+
+def teardown_config_rules(
+    service_uuid : str, connection_uuid : str, device_uuid : str, endpoint_uuid : str, endpoint_name : str,
+    service_settings : TreeNode, device_settings : TreeNode, endpoint_settings : TreeNode
+) -> List[Dict]:
+
+    if service_settings  is None: return []
+    if device_settings   is None: return []
+    if endpoint_settings is None: return []
+
+    json_settings          : Dict = service_settings.value
+    json_device_settings   : Dict = device_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
+
+    settings = (json_settings, json_endpoint_settings, json_device_settings)
+
+    json_config_rules = []
+    return json_config_rules
diff --git a/src/service/service/service_handlers/tapi_lsp/Tapi_LSPServiceHandler.py b/src/service/service/service_handlers/tapi_lsp/Tapi_LSPServiceHandler.py
new file mode 100644
index 0000000000000000000000000000000000000000..31a526fb62af726daea2ec7cea667ac4b9118ea7
--- /dev/null
+++ b/src/service/service/service_handlers/tapi_lsp/Tapi_LSPServiceHandler.py
@@ -0,0 +1,191 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json, logging
+from typing import Any, List, Optional, Tuple, Union
+from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.proto.context_pb2 import ConfigRule, DeviceId, Service
+from common.tools.object_factory.Device import json_device_id
+from common.type_checkers.Checkers import chk_type
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
+from service.service.service_handler_api._ServiceHandler import _ServiceHandler
+from service.service.service_handler_api.SettingsHandler import SettingsHandler
+from service.service.task_scheduler.TaskExecutor import TaskExecutor
+from .ConfigRules import setup_config_rules, teardown_config_rules
+from context.client.ContextClient import ContextClient
+
+
+LOGGER = logging.getLogger(__name__)
+
+METRICS_POOL = MetricsPool('Service', 'Handler', labels={'handler': 'l3nm_openconfig'})
+
+ContextClient = ContextClient()
+
+class Tapi_LSPServiceHandler(_ServiceHandler):
+    def __init__(   # pylint: disable=super-init-not-called
+        self, service : Service, task_executor : TaskExecutor, **settings
+    ) -> None:
+        self.__service = service
+        self.__task_executor = task_executor
+        self.__settings_handler = SettingsHandler(service.service_config, **settings)
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetEndpoint(
+        self, endpoints: List[Tuple[str, str, Optional[str]]], connection_uuid: Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+        chk_type('endpoints', endpoints, list)
+        endpoints = set(endpoints)  # Remove duplicates
+        LOGGER.debug("[SetEndpoint] Called with endpoints: %s", endpoints)
+        LOGGER.debug("[SetEndpoint] Connection UUID: %s", connection_uuid)
+
+        if len(endpoints) == 0:
+            LOGGER.warning("[SetEndpoint] No endpoints to process.")
+            return []
+
+        results = []
+        for endpoint in endpoints:
+            LOGGER.debug("[SetEndpoint] Processing endpoint tuple: %s", endpoint)
+            try:
+                device_uuid, endpoint_uuid = get_device_endpoint_uuids(endpoint)
+                LOGGER.debug("[SetEndpoint] Device UUID: %s | Endpoint UUID: %s", device_uuid, endpoint_uuid)
+
+                device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                device_name = str(device_obj.name).upper().strip()
+                LOGGER.debug("[SetEndpoint] Device name: %s", device_name)
+
+                if "OPTICAL" not in device_name:
+                    LOGGER.debug("[SetEndpoint] Skipping non-optical device: %s", device_name)
+                    continue
+
+                endpoint_obj = get_endpoint_matching(device_obj, endpoint_uuid)
+                endpoint_tapi_lsp = self.__settings_handler.get_endpoint_tapi_lsp(device_obj, endpoint_obj)
+                LOGGER.debug("[SetEndpoint] Endpoint TAPI LSP data: %s", endpoint_tapi_lsp)
+
+                endpoint_name = endpoint_obj.name
+                LOGGER.debug("[SetEndpoint] Endpoint name: %s", endpoint_name)
+
+                json_config_rules = setup_config_rules(endpoint_name, endpoint_tapi_lsp)
+                LOGGER.debug("[SetEndpoint] Generated json_config_rules: %s", json_config_rules)
+                if 'DELETE' in str(json_config_rules):
+                    LOGGER.debug("[SetEndpoint] Config rules contain DELETE operation.")
+                    # ContextClient.RemoveService()
+
+                if len(json_config_rules) > 0:
+                    LOGGER.info("[SetEndpoint] Applying %d config rules to device %s", len(json_config_rules), device_uuid)
+                    del device_obj.device_config.config_rules[:]
+                    json_config_rule = json_config_rules[0]
+                    LOGGER.debug("[SetEndpoint] Adding config rule: %s", json_config_rule)
+                    device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+
+                    self.__task_executor.configure_device(device_obj)
+                    LOGGER.info("[SetEndpoint] Configuration sent for Optical Controller %s", device_uuid)
+                else:
+                    LOGGER.warning("[SetEndpoint] No config rules generated for endpoint %s", endpoint_uuid)
+
+                results.append(True)
+
+            except Exception as e:  # pylint: disable=broad-except
+                LOGGER.exception('[SetEndpoint] Unable to SetEndpoint(%s)', str(endpoint))
+                results.append(e)
+
+        LOGGER.debug("[SetEndpoint] Final results: %s", results)
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteEndpoint(
+        self, endpoints : List[Tuple[str, str, Optional[str]]], connection_uuid : Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+        chk_type('endpoints', endpoints, list)
+        if len(endpoints) == 0: return []
+
+        service_uuid = self.__service.service_id.service_uuid.uuid
+        settings = self.__settings_handler.get('/settings')
+
+        results = []
+        for endpoint in endpoints:
+            try:
+                device_uuid, endpoint_uuid = get_device_endpoint_uuids(endpoint)
+
+                device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                device_settings = self.__settings_handler.get_device_settings(device_obj)
+                endpoint_obj = get_endpoint_matching(device_obj, endpoint_uuid)
+                endpoint_settings = self.__settings_handler.get_endpoint_settings(device_obj, endpoint_obj)
+                endpoint_name = endpoint_obj.name
+
+                json_config_rules = teardown_config_rules(
+                    service_uuid, connection_uuid, device_uuid, endpoint_uuid, endpoint_name,
+                    settings, device_settings, endpoint_settings)
+
+                if len(json_config_rules) > 0:
+                    del device_obj.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device_obj)
+
+                results.append(True)
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to DeleteEndpoint({:s})'.format(str(endpoint)))
+                results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[SetConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[DeleteConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                resource_value = json.loads(resource[1])
+                self.__settings_handler.set(resource[0], resource_value)
+                results.append(True)
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to SetConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                self.__settings_handler.delete(resource[0])
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to DeleteConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
diff --git a/src/service/tests/qkd/test_functional_bootstrap.py b/src/service/tests/qkd/test_functional_bootstrap.py
index daf35f0de5c56697f0380d1f32056a918bcba691..80db786d7f96842a528af8a4941326e0bc6577fd 100644
--- a/src/service/tests/qkd/test_functional_bootstrap.py
+++ b/src/service/tests/qkd/test_functional_bootstrap.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/simap_connector/Dockerfile b/src/simap_connector/Dockerfile
index 35dd3abfb9235df271fc74207e8076d68d80d36a..f9f1da6604f8a18b8405a4778befa23d0c9fa930 100644
--- a/src/simap_connector/Dockerfile
+++ b/src/simap_connector/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/slice/Dockerfile b/src/slice/Dockerfile
index 2d41444687578c5781e749cc584b13e027259481..54fcc06e28318689039af182d34d7b2e166831d1 100644
--- a/src/slice/Dockerfile
+++ b/src/slice/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/telemetry/backend/Config.py b/src/telemetry/backend/Config.py
index 73c37610dcc7ba6e76760b567f699a8be575b3e3..02f864a105348b5132f2203a898fe2cdeb08e9b8 100644
--- a/src/telemetry/backend/Config.py
+++ b/src/telemetry/backend/Config.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/Dockerfile b/src/telemetry/backend/Dockerfile
index ac7f6ccd1336b5ea1c3f0932b8a1c29d4c66d08d..d595eed942a45337d2fa1fedf599e322d4f4b028 100644
--- a/src/telemetry/backend/Dockerfile
+++ b/src/telemetry/backend/Dockerfile
@@ -43,9 +43,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 RUN python3 -m pip install --upgrade scapy
 
 # Get common Python packages
diff --git a/src/telemetry/backend/Tools.py b/src/telemetry/backend/Tools.py
index 1b047834cbe7a9586dc1c6f1c4b181db4a06b9c0..b4f8523e6fd0b7f05c6b97f0f3822bf7a98d3f7e 100644
--- a/src/telemetry/backend/Tools.py
+++ b/src/telemetry/backend/Tools.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/ErrorMessages.py b/src/telemetry/backend/service/ErrorMessages.py
index 317de8cf600b387340dfe72788c63334b5c2ba50..2a15a75de6594db3cd602d738973fd77ef7ff527 100644
--- a/src/telemetry/backend/service/ErrorMessages.py
+++ b/src/telemetry/backend/service/ErrorMessages.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/HelperMethods.py b/src/telemetry/backend/service/HelperMethods.py
index db56c9a76c2eefa1fc929ae73d05ca531ac21415..2d57917c1e89ede7bc04ad53944066f8016c1209 100644
--- a/src/telemetry/backend/service/HelperMethods.py
+++ b/src/telemetry/backend/service/HelperMethods.py
@@ -16,15 +16,17 @@ import uuid
 import logging
 from .collector_api._Collector               import _Collector
 from .collector_api.DriverInstanceCache      import get_driver
+from .collectors.int_collector.INTCollector  import INTCollector
 from common.proto.kpi_manager_pb2            import KpiId
 from common.tools.context_queries.Device     import get_device
 from common.tools.context_queries.EndPoint   import get_endpoint_names
+from typing import List, Tuple, Optional
 
 LOGGER = logging.getLogger(__name__)
 
 def get_subscription_parameters(
         kpi_id : str, kpi_manager_client, context_client, duration, interval
-        ) -> list[tuple] | None:
+        ) -> Optional[List[Tuple]]:
     """
     Method to get subscription parameters based on KPI ID.
     Returns a list of tuples with subscription parameters.
@@ -60,19 +62,18 @@ def get_subscription_parameters(
         raise Exception(f"KPI ID: {kpi_id} - Device not found for KPI descriptor.")
     endpoints = device.device_endpoints
 
-    # LOGGER.info(f"Device for KPI ID: {kpi_id} - {endpoints}")
-    # LOGGER.info(f"--------------------")
+    LOGGER.debug(f"Device for KPI ID: {kpi_id} - {endpoints}")
     endpointsIds = [endpoint_id.endpoint_id for endpoint_id in endpoints]
-    # for endpoint_id in endpoints:
-    #     LOGGER.info(f"Endpoint UUID: {endpoint_id.endpoint_id}")
+    for endpoint_id in endpoints:
+        LOGGER.debug(f"Endpoint UUID: {endpoint_id.endpoint_id}")
         
     # Getting endpoint names
     device_names, endpoint_data = get_endpoint_names(
         context_client = context_client,
         endpoint_ids   = endpointsIds
     )
-    # LOGGER.info(f"Device names: {device_names}")
-    # LOGGER.info(f"Endpoint data: {endpoint_data}")
+    LOGGER.debug(f"Device names: {device_names}")
+    LOGGER.debug(f"Endpoint data: {endpoint_data}")
 
     subscriptions = []
     sub_id = None
@@ -93,9 +94,8 @@ def get_subscription_parameters(
         )
     return subscriptions
 
-
 def get_collector_by_kpi_id(kpi_id: str, kpi_manager_client, context_client, driver_instance_cache
-                            ) -> _Collector | None:
+                            ) -> Optional[_Collector]:
     """
     Method to get a collector instance based on KPI ID.
     Preconditions:
@@ -109,21 +109,67 @@ def get_collector_by_kpi_id(kpi_id: str, kpi_manager_client, context_client, dri
     LOGGER.info(f"Getting collector for KPI ID: {kpi_id}")
     kpi_id_obj = KpiId()
     kpi_id_obj.kpi_id.uuid = kpi_id              # pyright: ignore[reportAttributeAccessIssue]
-    kpi_descriptor     = kpi_manager_client.GetKpiDescriptor(kpi_id_obj)
-    # LOGGER.info(f"KPI Descriptor: {kpi_descriptor}")
+    kpi_descriptor = kpi_manager_client.GetKpiDescriptor(kpi_id_obj)
     if not kpi_descriptor:
         raise Exception(f"KPI ID: {kpi_id} - Descriptor not found.")
     
-    # device_uuid       = kpi_descriptor.device_id.device_uuid.uuid
-    device = get_device( context_client       = context_client,
-                         device_uuid          = kpi_descriptor.device_id.device_uuid.uuid,
-                         include_config_rules = True,
-                         include_components   = False,
-                         )
+    device_uuid = kpi_descriptor.device_id.device_uuid.uuid
+    device = get_device(
+        context_client       = context_client,
+        device_uuid          = device_uuid,
+        include_config_rules = True,
+        include_components   = False,
+    )
 
     # Getting device collector (testing)
     collector : _Collector = get_driver(driver_instance_cache, device)
     if collector is None:
         raise Exception(f"KPI ID: {kpi_id} - Collector not found for device {device.device_uuid.uuid}.")
-    # LOGGER.info(f"Collector for KPI ID: {kpi_id} - {collector.__class__.__name__}")
     return collector
+
+def get_node_level_int_collector(collector_id: str, kpi_id: str, address: str, interface: str, port: int,
+            service_id: str, context_id: str) -> Optional[_Collector]:
+    """
+    Method to instantiate an in-band network telemetry collector at a node level.
+    Such a collector binds to a physical/virtual interface of a node, expecting
+    packets from one or more switches.
+    Every packet contains multiple KPIs, therefore this collector is not bound to
+    a single KPI.
+    Returns:
+        - Collector instance if found, otherwise None.
+    Raises:
+        - Exception if the KPI ID is not found or the collector cannot be created.
+    """
+
+    LOGGER.debug(f"INT collector         ID: {collector_id}")
+    LOGGER.debug(f"INT collector    address: {address}")
+    LOGGER.debug(f"INT collector       port: {port}")
+    LOGGER.debug(f"INT collector  interface: {interface}")
+    LOGGER.debug(f"INT collector     kpi_id: {kpi_id}")
+    LOGGER.debug(f"INT collector service_id: {service_id}")
+    LOGGER.debug(f"INT collector context_id: {context_id}")
+    # Initialize an INT collector
+    try:
+        collector : _Collector = INTCollector(
+            address=address,
+            port=port,
+            collector_id=collector_id,
+            interface=interface,
+            kpi_id=kpi_id,
+            service_id=service_id,
+            context_id=context_id
+        )
+    except Exception as ex:
+        LOGGER.exception(f"Failed to create INT Collector object on node {address}, {interface}:{port}")
+
+    connected = False
+    if not collector:
+        return None
+    LOGGER.info(f"Collector for KPI ID: {kpi_id} - {collector.__class__.__name__}")
+
+    try:
+        connected = collector.Connect()
+    except Exception as ex:
+        LOGGER.exception(f"Failed to connect INT Collector on node {address}, {interface}:{port}")
+
+    return collector if connected else None
diff --git a/src/telemetry/backend/service/TelemetryBackendService.py b/src/telemetry/backend/service/TelemetryBackendService.py
index 28b0c39890f4e9a677d4218a4d06a920ec375cc4..d4e99f300b2450259e7f64c2745a96d88513e57b 100755
--- a/src/telemetry/backend/service/TelemetryBackendService.py
+++ b/src/telemetry/backend/service/TelemetryBackendService.py
@@ -17,7 +17,7 @@ import time
 import logging
 import threading
 
-from .HelperMethods   import get_collector_by_kpi_id, get_subscription_parameters
+from .HelperMethods   import get_collector_by_kpi_id, get_subscription_parameters, get_node_level_int_collector
 from common.Constants import ServiceNameEnum
 from common.Settings  import get_service_port_grpc
 from confluent_kafka  import Consumer as KafkaConsumer
@@ -26,12 +26,8 @@ from confluent_kafka  import Producer as KafkaProducer
 from datetime         import datetime, timezone
 from typing           import Any, Dict
 
-from .collector_api._Collector               import _Collector
-from .collector_api.DriverInstanceCache      import DriverInstanceCache, get_driver
-from .collectors.emulated.EmulatedCollector  import EmulatedCollector
+from .collector_api.DriverInstanceCache      import DriverInstanceCache
 from common.method_wrappers.Decorator        import MetricsPool
-from common.proto.kpi_manager_pb2            import KpiId
-from common.tools.context_queries.Device     import get_device
 from common.tools.kafka.Variables            import KafkaConfig, KafkaTopic
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from context.client.ContextClient            import ContextClient
@@ -56,7 +52,6 @@ class TelemetryBackendService(GenericGrpcService):
                                             'auto.offset.reset'  : 'latest'})
         self.driver_instance_cache = driver_instance_cache
         self.device_collector      = None
-        self.collector             = None           # This should be replaced with device_collector (later to be removed)
         self.context_client        = ContextClient()
         self.kpi_manager_client    = KpiManagerClient()
         self.active_jobs = {}
@@ -84,40 +79,40 @@ class TelemetryBackendService(GenericGrpcService):
                         f"Subscribed topic {receive_msg.topic()} does not exist or topic does not have any messages.")
                     continue
                 else:
-                    LOGGER.error("Consumer error: {}".format(receive_msg.error()))
+                    LOGGER.error(f"Consumer error: {receive_msg.error()}")
                     break
             try: 
                 collector = json.loads(receive_msg.value().decode('utf-8'))
                 collector_id = receive_msg.key().decode('utf-8')
-                LOGGER.debug('Recevied Collector: {:} - {:}'.format(collector_id, collector))
+                LOGGER.debug(f"Received Collector: {collector_id} - {collector}")
 
                 duration = collector.get('duration', 0)
                 if duration == -1 and collector['interval'] == -1:
                     self.TerminateCollector(collector_id)
                 else:
-                    LOGGER.info("Received Collector ID: {:} - Scheduling...".format(collector_id))
+                    LOGGER.info(f"Received Collector ID: {collector_id} - Scheduling...")
                     if collector_id not in self.active_jobs:
                         stop_event = threading.Event()
                         self.active_jobs[collector_id] = stop_event
                         threading.Thread(target=self.GenericCollectorHandler,
-                                         args=(
-                                             collector_id,
-                                             collector['kpi_id'],
-                                             duration,
-                                             collector['interval'],
-                                             collector['interface'],      # for INT collector
-                                             collector['transport_port'], # for INT collector
-                                             collector['service_id'],     # for INT collector
-                                             collector['context_id'],     # for INT collector
-                                             stop_event
-                                         )).start()
+                                        args=(
+                                            collector_id,
+                                            collector['kpi_id'],
+                                            duration,
+                                            collector['interval'],
+                                            collector['interface'],      # for INT collector
+                                            collector['transport_port'], # for INT collector
+                                            collector['service_id'],     # for INT collector
+                                            collector['context_id'],     # for INT collector
+                                            stop_event
+                                        )).start()
                         # Stop the Collector after the given duration
                         if duration > 0:
                             def stop_after_duration(completion_time, stop_event):
                                 time.sleep(completion_time)
                                 if not stop_event.is_set():
                                     LOGGER.warning(
-                                        f"Execution duration ({completion_time}) completed of Collector: {collector_id}")
+                                        f"Execution duration ({completion_time}) completed for Collector: {collector_id}")
                                     self.TerminateCollector(collector_id)
 
                             duration_thread = threading.Thread(
@@ -126,66 +121,60 @@ class TelemetryBackendService(GenericGrpcService):
                             )
                             duration_thread.start()
                     else:
-                        LOGGER.warning("Collector ID: {:} - Already scheduled or running".format(collector_id))
+                        LOGGER.warning(f"Collector ID: {collector_id} - Already scheduled or running")
             except Exception as e:
                 LOGGER.warning(
-                    "Unable to consume message from topic: {:}. ERROR: {:}".format(KafkaTopic.TELEMETRY_REQUEST.value, e))
+                    f"Unable to consume message from topic: {KafkaTopic.TELEMETRY_REQUEST.value}. ERROR: {e}")
 
-    def GenericCollectorHandler(self, collector_id, kpi_id, duration, interval, interface , port , service_id , context_id , stop_event ):
+    def GenericCollectorHandler(self, collector_id, kpi_id, duration, interval, interface, port, service_id, context_id, stop_event):
         """
         Method to handle collector request.
         """
-        # CONFIRM: The method (get_collector_by_kpi_id) is working correctly. testcase in integration tests.
-        self.device_collector = get_collector_by_kpi_id(
-            kpi_id, self.kpi_manager_client, self.context_client, self.driver_instance_cache)
+
+        # INT collector invocation
+        if interface:
+            self.device_collector = get_node_level_int_collector(
+                collector_id=collector_id,
+                kpi_id=kpi_id,
+                address="127.0.0.1",
+                interface=interface,
+                port=port,
+                service_id=service_id,
+                context_id=context_id
+            )
+            return
+        # Rest of the collectors
+        else:
+            self.device_collector = get_collector_by_kpi_id(
+                kpi_id, self.kpi_manager_client, self.context_client, self.driver_instance_cache)
 
         if not self.device_collector:
             LOGGER.warning(f"KPI ID: {kpi_id} - Collector not found. Skipping...")
             raise Exception(f"KPI ID: {kpi_id} - Collector not found.")
-        LOGGER.info(("----- Number done -----"))
 
-        # CONFIRM: The method (get_subscription_parameters) is working correctly. testcase in telemetery backend tests.
+        # CONFIRM: The method (get_subscription_parameters) is working correctly. testcase in telemetry backend tests
         resource_to_subscribe = get_subscription_parameters(
             kpi_id, self.kpi_manager_client, self.context_client, duration, interval
         )
         if not resource_to_subscribe:
             LOGGER.warning(f"KPI ID: {kpi_id} - Resource to subscribe not found. Skipping...")
             raise Exception(f"KPI ID: {kpi_id} - Resource to subscribe not found.")
-        LOGGER.info("------ Number done 2 -----")
 
         responses = self.device_collector.SubscribeState(resource_to_subscribe)
-
         for status in responses:
             if isinstance(status, Exception):
                 LOGGER.error(f"Subscription failed for KPI ID: {kpi_id} - Error: {status}")
                 raise status
             else:
                 LOGGER.info(f"Subscription successful for KPI ID: {kpi_id} - Status: {status}")
-        LOGGER.info("------ Number done 3 -----")
 
         for samples in self.device_collector.GetState(duration=duration, blocking=True):
             LOGGER.info(f"KPI ID: {kpi_id} - Samples: {samples}")
             self.GenerateKpiValue(collector_id, kpi_id, samples)
 
-        LOGGER.info("------ Number done 4 -----")
-        self.device_collector.Disconnect()
-        # TODO: Stop_event should be managed here is this method because there will be no more specific collector.
-
-# --- START: Kept for INT compatibility, to be removed later ---
-    def INTCollectorHandler(self, subscription, duration, collector_id, kpi_id, interface, port, service_id, context_id , stop_event):
-        self.collector = INTCollector(
-            collector_id=collector_id ,
-            address="127.0.0.1",
-            interface=interface,
-            port=port,
-            kpi_id=kpi_id,
-            service_id=service_id,
-            context_id=context_id
-        )
-        self.collector.Connect()
+        # TODO: Stop_event should be managed in this method because there will be no more specific collector
         if stop_event.is_set():
-            self.collector.Disconnect()
-# --- END: Kept for INT compatibility, to be removed later ---
+            self.device_collector.Disconnect()
 
     def GenerateKpiValue(self, collector_id: str, kpi_id: str, measured_kpi_value: Any):
         """
@@ -207,25 +196,24 @@ class TelemetryBackendService(GenericGrpcService):
 
     def delivery_callback(self, err, msg):
         if err: 
-            LOGGER.error('Message delivery failed: {:s}'.format(str(err)))
+            LOGGER.error(f"Message delivery failed: {str(err)}")
 
     def TerminateCollector(self, job_id):
         LOGGER.debug("Terminating collector backend...")
         try:
             if job_id not in self.active_jobs:
-                self.logger.warning(f"No active jobs found for {job_id}. It might have already terminated.")
+                self.logger.warning(f"No active jobs found for {job_id}. It might have already been terminated.")
             else:
                 LOGGER.info(f"Terminating job: {job_id}")
                 stop_event = self.active_jobs.pop(job_id, None)
                 if stop_event:
                     stop_event.set()
                     LOGGER.info(f"Job {job_id} terminated.")
-                    if self.collector.UnsubscribeState(job_id):
+                    if self.device_collector.UnsubscribeState(job_id):
                         LOGGER.info(f"Unsubscribed from collector: {job_id}")
                     else:
                         LOGGER.warning(f"Failed to unsubscribe from collector: {job_id}")
                 else:
                     LOGGER.warning(f"Job {job_id} not found in active jobs.")
         except:
-            LOGGER.exception("Error terminating job: {:}".format(job_id))
-
+            LOGGER.exception(f"Error terminating job: {job_id}")
diff --git a/src/telemetry/backend/service/collector_api/DriverFactory.py b/src/telemetry/backend/service/collector_api/DriverFactory.py
index fd11ca125fd4198ed3cf2643b42e44fac5fea0aa..23d4c86bd563f838b34919388cd98ed2be999fff 100644
--- a/src/telemetry/backend/service/collector_api/DriverFactory.py
+++ b/src/telemetry/backend/service/collector_api/DriverFactory.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/collector_api/DriverInstanceCache.py b/src/telemetry/backend/service/collector_api/DriverInstanceCache.py
index 13d43db131e1ca27e5dc28453cdd434886d47f69..7500bc688f96573fa02772e3da8275b9be76443c 100644
--- a/src/telemetry/backend/service/collector_api/DriverInstanceCache.py
+++ b/src/telemetry/backend/service/collector_api/DriverInstanceCache.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/collector_api/Exceptions.py b/src/telemetry/backend/service/collector_api/Exceptions.py
index 8bc607d955c1b60576f28ad743e47a754eba3acd..1871fc2e0fbc0ff930b3d65003ffcbfc2c21cb25 100644
--- a/src/telemetry/backend/service/collector_api/Exceptions.py
+++ b/src/telemetry/backend/service/collector_api/Exceptions.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/collector_api/FilterFields.py b/src/telemetry/backend/service/collector_api/FilterFields.py
index b1d2cb3144f85f9e8db35c39808accc0d3c386a5..103a77105c5915e2ee4de5a3b4c1818916104bff 100644
--- a/src/telemetry/backend/service/collector_api/FilterFields.py
+++ b/src/telemetry/backend/service/collector_api/FilterFields.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/telemetry/backend/service/collectors/__init__.py b/src/telemetry/backend/service/collectors/__init__.py
index 1e07dc43fab0d52b3c6584eb168d0f7e3f991b29..6b45dcd41c19bb64d4ff4b26ba1ca5972d5b26f6 100644
--- a/src/telemetry/backend/service/collectors/__init__.py
+++ b/src/telemetry/backend/service/collectors/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -34,8 +34,6 @@ COLLECTORS.append(
         },
     ]))
 
-# TODO: Import for gNMI OpenConfig Collector ...
-
 if LOAD_ALL_DEVICE_DRIVERS:
     from .gnmi_oc.GnmiOpenConfigCollector import GNMIOpenConfigCollector # pylint: disable=wrong-import-position
     COLLECTORS.append(
@@ -49,7 +47,7 @@ if LOAD_ALL_DEVICE_DRIVERS:
     )
 
 if LOAD_ALL_DEVICE_DRIVERS:
-    from ...collectors.intcollector.INTCollector import INTCollector # pylint: disable=wrong-import-position
+    from .int_collector.INTCollector import INTCollector # pylint: disable=wrong-import-position
     COLLECTORS.append(
         (INTCollector, [
             {
@@ -58,4 +56,3 @@ if LOAD_ALL_DEVICE_DRIVERS:
             }
         ])
     )
-
diff --git a/src/telemetry/backend/service/collectors/gnmi_oc/GnmiOpenConfigCollector.py b/src/telemetry/backend/service/collectors/gnmi_oc/GnmiOpenConfigCollector.py
index 44b1691352262f3b02f6e7cffa0dc1fc7259c551..31cdce39a0c079bb3c853276421a390d9947e7ab 100644
--- a/src/telemetry/backend/service/collectors/gnmi_oc/GnmiOpenConfigCollector.py
+++ b/src/telemetry/backend/service/collectors/gnmi_oc/GnmiOpenConfigCollector.py
@@ -14,6 +14,7 @@
 
 
 import logging, pytz, queue
+from common.Settings import get_log_level
 from datetime import datetime
 from typing import Dict, Optional, Tuple, List, Union, Any, Iterator
 from pygnmi.client import gNMIclient
@@ -22,7 +23,7 @@ from .PathMapper import PathMapper
 from .SubscriptionNew import Subscription
 
 logging.basicConfig(
-    level=logging.DEBUG,
+    level=get_log_level(),
     format="%(asctime)s %(levelname)8s [%(name)s - %(funcName)s()]: %(message)s",
 )
 
@@ -32,7 +33,7 @@ class GNMIOpenConfigCollector(_Collector):
     =========================
     Lightweight wrapper around *pygnmi* with subscribe / get / unsubscribe helpers.
     """
-    def __init__(self, address: str = '', port: int = -1, **setting ) -> None:
+    def __init__(self, address: str = '', port: int = -1, **setting) -> None:
         
         super().__init__('gNMI_openconfig_collector', address, port, **setting)
         self._subscriptions : Dict[str, Subscription] = {}
diff --git a/src/telemetry/backend/service/collectors/gnmi_oc/SubscriptionNew.py b/src/telemetry/backend/service/collectors/gnmi_oc/SubscriptionNew.py
index e34b2e4729e673faa8992b87dee67b1dfce8c86c..cbf0ebf424b6e6a9e4310d838250c9586b8459f3 100644
--- a/src/telemetry/backend/service/collectors/gnmi_oc/SubscriptionNew.py
+++ b/src/telemetry/backend/service/collectors/gnmi_oc/SubscriptionNew.py
@@ -41,7 +41,7 @@ class Subscription:
         metric_queue:          Queue,
         mode:                  str        = "stream",
         sample_interval_ns:    int        = 10_000_000_000,
-        heartbeat_interval_ns: int | None = None,  # ← NEW
+        heartbeat_interval_ns: Optional[int] = None,  # ← NEW
         encoding:              str        = "json_ietf",
         on_update:             Optional[Callable[[dict], None]] = None,
     ) -> None:
@@ -82,7 +82,7 @@ class Subscription:
         path_list: List[str],
         mode: str,
         sample_interval_ns: int,
-        heartbeat_interval_ns: int | None,
+        heartbeat_interval_ns: Optional[int],
         encoding: str,
         on_update: Optional[Callable[[dict], None]],
     ) -> None:  # pragma: no cover
diff --git a/src/telemetry/backend/collectors/intcollector/INTCollector.py b/src/telemetry/backend/service/collectors/int_collector/INTCollector.py
similarity index 56%
rename from src/telemetry/backend/collectors/intcollector/INTCollector.py
rename to src/telemetry/backend/service/collectors/int_collector/INTCollector.py
index 9d89827f4eecbbb80a092763488f87296acffb5a..7f945efe9a5deedaf1cb44a112d50764fa015188 100644
--- a/src/telemetry/backend/collectors/intcollector/INTCollector.py
+++ b/src/telemetry/backend/service/collectors/int_collector/INTCollector.py
@@ -20,24 +20,23 @@ from apscheduler.schedulers.background import BackgroundScheduler
 from apscheduler.jobstores.memory import MemoryJobStore
 from apscheduler.executors.pool import ThreadPoolExecutor
 from datetime import datetime
-from telemetry.backend.collector_api._Collector import _Collector
+from telemetry.backend.service.collector_api._Collector import _Collector
 
 from scapy.all import *
 import struct
 import socket
 import ipaddress
 
-from .INTCollectorCommon import IntDropReport, IntLocalReport, IntFixedReport, FlowInfo
+from .INTCollectorCommon import IntDropReport, IntLocalReport, IntFixedReport, FlowInfo, IPPacket, UDPPacket
 from common.proto.kpi_manager_pb2 import KpiId, KpiDescriptor
 from confluent_kafka import Producer as KafkaProducer
 from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
 from uuid import uuid4
-from typing import Dict
+from typing import Dict, List, Tuple
 from datetime import datetime, timezone
 import json
 
 from kpi_manager.client.KpiManagerClient import KpiManagerClient
-from common.proto.analytics_frontend_pb2 import Analyzer, AnalyzerId
 from context.client.ContextClient import ContextClient
 from analytics.frontend.client.AnalyticsFrontendClient import AnalyticsFrontendClient
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
@@ -46,50 +45,68 @@ import logging
 
 LOGGER = logging.getLogger(__name__)
 
-class INTCollector(_Collector):
+DEF_SW_NUM = 10
 
-    last_packet_time = time.time() # Track last packet time
+class INTCollector(_Collector):
 
-    max_idle_time = 5  # for how long we tolerate inactivity
-    sniff_timeout = 3   # how often we stop sniffing to check for inactivity
+    last_packet_time = 0.0 # Track the timestamp of the last packet
+    max_idle_time = 5      # For how long we tolerate inactivity
+    sniff_timeout = 3      # How often we stop sniffing to check for inactivity
 
     """
-    INTCollector is a class that simulates a network collector for testing purposes.
-    It provides functionalities to manage configurations, state subscriptions, and synthetic data generation.
+    INTCollector spawns a packet sniffer at the interface of the Telemetry service,
+    which is mapped to the interface of the TFS host.
+    INT packets arriving there are:
+    - picked up by the INT collector
+    - parsed, and
+    - telemetry KPI metric values are extracted and reported to Kafka as KPIDescriptors
     """
-    def __init__(self, collector_id: str , address: str, interface: str, port: str, kpi_id: str, service_id: str, context_id: str, **settings):
-        super().__init__('int_collector', address, port, **settings)
-        self._out_samples    = queue.Queue()                # Queue to hold synthetic state samples
-        self._scheduler      = BackgroundScheduler(daemon=True)
+
+    def __init__(self, address: str, port: int, **settings) -> None:
+        super().__init__('INTCollector', address, port, **settings)
+        self.collector_id = settings.pop('collector_id', None)
+        self.interface = settings.pop('interface', None)
+        self.kpi_id = settings.pop('kpi_id', None)
+        self.service_id = settings.pop('service_id', None)
+        self.context_id = settings.pop('context_id', None)
+
+        if any(item is None for item in [
+                self.collector_id, self.interface, self.kpi_id, self.service_id, self.context_id]):
+            LOGGER.error("INT collector not instantiated properly: Bad input")
+            return
+
+        self._out_samples = queue.Queue()
+        self._scheduler   = BackgroundScheduler(daemon=True)
         self._scheduler.configure(
             jobstores = {'default': MemoryJobStore()},
             executors = {'default': ThreadPoolExecutor(max_workers=1)},
             timezone  = pytz.utc
         )
         self.kafka_producer = KafkaProducer({'bootstrap.servers': KafkaConfig.get_kafka_address()})
-        self.collector_id    = collector_id
-        self.interface    = interface
         self.kpi_manager_client = KpiManagerClient()
         self.analytics_frontend_client = AnalyticsFrontendClient()
         self.context_client = ContextClient()
-        self.kpi_id     = kpi_id
-        self.service_id = service_id
-        self.context_id = context_id
         self.table = {}
-        self.connected = False          # To track connection state
-        LOGGER.info("INT Collector initialized")
+        self.connected = False
+        LOGGER.info("=== INT Collector initialized")
 
     def Connect(self) -> bool:
+        LOGGER.info("=== INT Collector Connect()")
         LOGGER.info(f"Connecting to {self.interface}:{self.port}")
-        self.connected = True
 
-        self._scheduler.add_job(self.sniff_with_restarts_on_idle, id=self.kpi_id ,args=[self.interface , self.port , self.service_id, self.context_id])
+        self._scheduler.add_job(
+            self.sniff_with_restarts_on_idle,
+            id=self.kpi_id,
+            args=[self.interface, self.port, self.service_id]
+        )
 
         self._scheduler.start()
+        self.connected = True
         LOGGER.info(f"Successfully connected to {self.interface}:{self.port}")
         return True
 
     def Disconnect(self) -> bool:
+        LOGGER.info("=== INT Collector Disconnect()")
         LOGGER.info(f"Disconnecting from {self.interface}:{self.port}")
         if not self.connected:
             LOGGER.warning("INT Collector is not connected. Nothing to disconnect.")
@@ -102,14 +119,54 @@ class INTCollector(_Collector):
         LOGGER.info(f"Successfully disconnected from {self.interface}:{self.port}")
         return True
 
+    def require_connection(self):
+        if not self.connected:
+            raise RuntimeError("INT collector is not connected. Please connect before performing operations.")
+
+    def SubscribeState(self, subscriptions: List[Tuple[str, dict, float, float, str, int, str, str]]) -> bool:
+        LOGGER.info("=== INT Collector SubscribeState()")
+        self.require_connection()
+        try:
+            _, _, _, _, interface, port, service_id, _ = subscriptions
+        except:
+            LOGGER.exception(f"Invalid subscription format: {subscriptions}")
+            return False
+
+        if self.kpi_id:
+            self._scheduler.add_job(
+                self.sniff_with_restarts_on_idle,
+                id=self.kpi_id,
+                args=[interface, port, service_id]
+            )
+
+        return True
+
+    def UnsubscribeState(self, resource_key: str) -> bool:
+        LOGGER.info("=== INT Collector UnsubscribeState()")
+        self.require_connection()
+        try: 
+            # Check if job exists
+            job_ids = [job.id for job in self._scheduler.get_jobs() if resource_key in job.id]
+            if not job_ids:
+                LOGGER.warning(f"No active jobs found for {resource_key}. It might have already been terminated.")
+                return False
+            for job_id in job_ids:
+                self._scheduler.remove_job(job_id)
+            LOGGER.info(f"Unsubscribed from {resource_key} with job IDs: {job_ids}")
+            return True
+        except:
+            LOGGER.exception(f"Failed to unsubscribe from {resource_key}")
+            return False
+
     def on_idle_timeout(self):
-        LOGGER.info(f"Sniffer idle for more than {self.max_idle_time} seconds.")
+        LOGGER.info(f"=== INT Collector IDLE() - No INT packets arrived during the last {self.max_idle_time}")
         LOGGER.debug(f"last_packet_time {self.last_packet_time} seconds.")
 
+        # Report a zero value for the P4 switch KPIs
         values = [0]
-        for sw_id in range(1, 6):
+        for sw_id in range(1, DEF_SW_NUM+1):
             sw = self.table.get(sw_id)
-            self.overwrite_switch_values(sw , values)
+            self.overwrite_switch_values(sw, values)
 
     def overwrite_switch_values(self, switch, values):
         if not switch:
@@ -122,38 +179,52 @@ class INTCollector(_Collector):
         for key, value in switch.items():
             self.send_message_to_kafka(key, value)
 
-    def process_packet(self , packet, port, service_id , context_id):
-        # global last_packet_time
+    def process_packet(self, packet, port, service_id):
+        LOGGER.debug("=== INT Collector Packet-In()")
+        LOGGER.debug(packet)
 
-        # Check for IP layer
+        # Check for IP header
         if IP not in packet:
             return None
         ip_layer = packet[IP]
-        # ip_pkt = IPPacket(ip_layer[:20])
-        # ip_pkt.show()
 
-        # Check for UDP
+        # IP parsing
+        try:
+            ihl = ip_layer.ihl * 4
+            raw_ip = bytes(ip_layer)
+            ip_pkt = IPPacket(raw_ip[:ihl]) # exclude options if any
+            src_ip_str = str(ipaddress.IPv4Address(ip_pkt.ip_src))
+            dst_ip_str = str(ipaddress.IPv4Address(ip_pkt.ip_dst))
+            # ip_pkt.show()
+        except Exception as ex:
+            LOGGER.exception(f"Failed to parse IP packet: {ex}")
+            return None
+
+        LOGGER.debug(f"ip src: {src_ip_str}")
+        LOGGER.debug(f"ip dst: {dst_ip_str}")
+        LOGGER.debug(f"ip-proto: {ip_pkt.ip_proto}")
+
+        # Check for UDP header
         if UDP not in ip_layer:
             return None
         udp_layer = ip_layer[UDP]
 
-        # Only the INT port
+        # We care about datagrams arriving on the INT port
         if udp_layer.dport != port:
+            LOGGER.warning(f"Expected UDP INT packet on port {udp_layer.dport}. Received packet on port {port}")
             return None
-        # udp_dgram = UDPPacket(bytes(udp_layer))
-        # udp_dgram.show()
 
-        src_ip = socket.ntohl(struct.unpack(' 0, "Egress timestamp must be > ingress timestamp"
+            assert lat > 0, f"Egress timestamp must be > ingress timestamp. Got a diff: {lat}"
             # local_report.show()
 
         # Create flow info
         flow_info = FlowInfo(
-            src_ip=src_ip,
-            dst_ip=dst_ip,
+            src_ip=ip_pkt.ip_src,
+            dst_ip=ip_pkt.ip_dst,
             src_port=udp_layer.sport,
             dst_port=udp_layer.dport,
             ip_proto=ip_layer.proto,
@@ -201,25 +274,26 @@ class INTCollector(_Collector):
         )
         LOGGER.debug(f"Flow info: {flow_info}")
 
-        self.create_descriptors_and_send_to_kafka(flow_info , service_id , context_id)
-
+        self.create_descriptors_and_send_to_kafka(flow_info, service_id)
         self.last_packet_time = time.time()
+
         return flow_info
 
-    def set_kpi_descriptor(self , kpi_uuid , service_id , device_id , endpoint_id , sample_type):
+    def set_kpi_descriptor(self, kpi_uuid, service_id, sample_type):
         kpi_descriptor = KpiDescriptor()
         kpi_descriptor.kpi_sample_type = sample_type
         kpi_descriptor.service_id.service_uuid.uuid = service_id
-        # kpi_descriptor.device_id.device_uuid.uuid = device_id
-        # kpi_descriptor.endpoint_id.endpoint_uuid.uuid = endpoint_id
         kpi_descriptor.kpi_id.kpi_id.uuid = kpi_uuid
 
-        kpi_id: KpiId = self.kpi_manager_client.SetKpiDescriptor(kpi_descriptor)
+        try:
+            kpi_id: KpiId = self.kpi_manager_client.SetKpiDescriptor(kpi_descriptor)
+        except Exception as ex:
+            LOGGER.exception(f"Failed to set KPI descriptor {kpi_uuid}: {ex}")
 
         return kpi_id
 
-    def create_descriptors_and_send_to_kafka(self, flow_info , service_id , context_id):
-        LOGGER.debug(f"PACKET FROM SWITCH: {flow_info.switch_id} LATENCY: {flow_info.hop_latency}")
+    def create_descriptors_and_send_to_kafka(self, flow_info, service_id):
+        LOGGER.debug(f"Packet from switch: {flow_info.switch_id} with latency: {flow_info.hop_latency}")
         if(self.table.get(flow_info.switch_id) == None):
             seq_num_kpi_id     = str(uuid4())
             ingress_ts_kpi_id  = str(uuid4())
@@ -241,14 +315,14 @@ class INTCollector(_Collector):
             LOGGER.debug(f"is_drop_kpi_id     for switch {flow_info.switch_id}: {is_drop_kpi_id}")
             LOGGER.debug(f"sw_lat_kpi_id      for switch {flow_info.switch_id}: {sw_lat_kpi_id}")
 
-            seq_num_kpi           = self.set_kpi_descriptor(seq_num_kpi_id,     service_id ,'', '', KpiSampleType.KPISAMPLETYPE_INT_SEQ_NUM)
-            ingress_timestamp_kpi = self.set_kpi_descriptor(ingress_ts_kpi_id,  service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_TS_ING)
-            egress_timestamp_kpi  = self.set_kpi_descriptor(egress_ts_kpi_id,   service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_TS_EGR)
-            hop_latency_kpi       = self.set_kpi_descriptor(hop_lat_kpi_id,     service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT)
-            ingress_port_id_kpi   = self.set_kpi_descriptor(ing_port_id_kpi_id, service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_PORT_ID_ING)
-            egress_port_id_kpi    = self.set_kpi_descriptor(egr_port_id_kpi_id, service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_PORT_ID_EGR)
-            queue_occup_kpi       = self.set_kpi_descriptor(queue_occup_kpi_id, service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_QUEUE_OCCUP)
-            is_drop_kpi           = self.set_kpi_descriptor(is_drop_kpi_id,     service_id, '', '', KpiSampleType.KPISAMPLETYPE_INT_IS_DROP)
+            seq_num_kpi           = self.set_kpi_descriptor(seq_num_kpi_id,     service_id ,KpiSampleType.KPISAMPLETYPE_INT_SEQ_NUM)
+            ingress_timestamp_kpi = self.set_kpi_descriptor(ingress_ts_kpi_id,  service_id, KpiSampleType.KPISAMPLETYPE_INT_TS_ING)
+            egress_timestamp_kpi  = self.set_kpi_descriptor(egress_ts_kpi_id,   service_id, KpiSampleType.KPISAMPLETYPE_INT_TS_EGR)
+            hop_latency_kpi       = self.set_kpi_descriptor(hop_lat_kpi_id,     service_id, KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT)
+            ingress_port_id_kpi   = self.set_kpi_descriptor(ing_port_id_kpi_id, service_id, KpiSampleType.KPISAMPLETYPE_INT_PORT_ID_ING)
+            egress_port_id_kpi    = self.set_kpi_descriptor(egr_port_id_kpi_id, service_id, KpiSampleType.KPISAMPLETYPE_INT_PORT_ID_EGR)
+            queue_occup_kpi       = self.set_kpi_descriptor(queue_occup_kpi_id, service_id, KpiSampleType.KPISAMPLETYPE_INT_QUEUE_OCCUP)
+            is_drop_kpi           = self.set_kpi_descriptor(is_drop_kpi_id,     service_id, KpiSampleType.KPISAMPLETYPE_INT_IS_DROP)
 
             # Set a dedicated KPI descriptor for every switch
             sw_lat_kpi = None
@@ -259,10 +333,10 @@ class INTCollector(_Collector):
                 KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT_SW07, KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT_SW08,
                 KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT_SW09, KpiSampleType.KPISAMPLETYPE_INT_HOP_LAT_SW10
             ]
-            for i, sw_id in enumerate(range(1, 11)):
+            for i, sw_id in enumerate(range(1, DEF_SW_NUM+1)):
                 if flow_info.switch_id == sw_id:
-                    LOGGER.debug(f"SET KPI : seq_num_kpi_id for switch {flow_info.switch_id}: {sw_lat_kpi_id}")
-                    sw_lat_kpi = self.set_kpi_descriptor(sw_lat_kpi_id, service_id, '', '', sw_sample_types[i])
+                    LOGGER.debug(f"Set latency KPI for switch {flow_info.switch_id}: {sw_lat_kpi_id}")
+                    sw_lat_kpi = self.set_kpi_descriptor(sw_lat_kpi_id, service_id, sw_sample_types[i])
 
             # Gather keys and values
             keys   = [
@@ -310,48 +384,67 @@ class INTCollector(_Collector):
             switch = self.table.get(flow_info.switch_id)
 
             # Overwrite values using zip
-            self.overwrite_switch_values(switch , values)
+            self.overwrite_switch_values(switch, values)
 
-    def send_message_to_kafka(self , kpi_id , measured_kpi_value):
+    def send_message_to_kafka(self, kpi_id, measured_kpi_value):
+        LOGGER.debug("=== INT Collector Kafka Writer()")
         producer = self.kafka_producer
         kpi_value: Dict = {
             "time_stamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
             "kpi_id": kpi_id,
             "kpi_value": measured_kpi_value
         }
-        producer.produce(
-            KafkaTopic.VALUE.value,
-            key=self.collector_id,
-            value=json.dumps(kpi_value),
-            callback=self.delivery_callback
-        )
-        producer.flush()
-        LOGGER.debug(f"Message with kpi_id: {kpi_id} was send to kafka!")
+        try:
+            producer.produce(
+                KafkaTopic.VALUE.value,
+                key=self.collector_id,
+                value=json.dumps(kpi_value),
+                callback=self.delivery_callback
+            )
+            producer.flush()
+        except Exception as ex:
+            LOGGER.error(f"Message with kpi_id: {kpi_id} is NOT sent to kafka!")
+            LOGGER.exception(f"{ex}")
+            return
+        LOGGER.debug(f"Message with kpi_id: {kpi_id} is sent to kafka!")
 
-    def packet_callback(self, packet, port , service_id,context_id):
-        flow_info = self.process_packet(packet , port , service_id, context_id)
+    def packet_callback(self, packet, port, service_id):
+        flow_info = self.process_packet(packet, port, service_id)
         if flow_info:
             LOGGER.debug(f"Flow info: {flow_info}")
 
-    def sniff_with_restarts_on_idle(self, interface, port, service_id , context_id):
+    def sniff_with_restarts_on_idle(self, interface, port, service_id):
+        LOGGER.info("=== INT Collector Sniffer Start")
         while True:
             # Run sniff for a short period to periodically check for idle timeout
-            sniff(
-                iface=interface,
-                filter=f"udp port {port}",
-                prn=lambda pkt: self.packet_callback(pkt, port, service_id , context_id),
-                timeout=self.sniff_timeout
-            )
+            try:
+                sniff( # type: ignore
+                    iface=interface,
+                    filter=f"udp port {port}",
+                    prn=lambda pkt: self.packet_callback(pkt, port, service_id),
+                    timeout=self.sniff_timeout
+                )
+            except Exception as ex:
+                LOGGER.exception(ex)
+                self.Disconnect()
 
             if not self.connected:
                 break
 
             # Check if idle period has been exceeded
             now = time.time()
+            LOGGER.debug(f"Time now: {self.epoch_to_day_time(now)}")
+            LOGGER.debug(f"Time last pkt: {self.epoch_to_day_time(self.last_packet_time)}")
+            diff = now - self.last_packet_time
+            assert diff > 0, f"Time diff: {diff} sec must be positive"
             if (now - self.last_packet_time) > self.max_idle_time:
                 self.on_idle_timeout()
                 self.last_packet_time = now  # Reset timer after action
+        LOGGER.info("=== INT Collector Sniffer End")
 
     def delivery_callback(self, err, msg):
         if err:
-            LOGGER.error('Message delivery failed: {:s}'.format(str(err)))
+            LOGGER.error(f"Kafka message delivery failed: {str(err)}")
+
+    def epoch_to_day_time(self, ep_time : float):
+        return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ep_time))
diff --git a/src/telemetry/backend/collectors/intcollector/INTCollectorCommon.py b/src/telemetry/backend/service/collectors/int_collector/INTCollectorCommon.py
similarity index 74%
rename from src/telemetry/backend/collectors/intcollector/INTCollectorCommon.py
rename to src/telemetry/backend/service/collectors/int_collector/INTCollectorCommon.py
index baed12fd29f4707f187c9e3d2377fe29b4f034ad..a8ce410680aabb87192e8d907cbaf25c12436245 100644
--- a/src/telemetry/backend/collectors/intcollector/INTCollectorCommon.py
+++ b/src/telemetry/backend/service/collectors/int_collector/INTCollectorCommon.py
@@ -35,7 +35,7 @@ class IPPacket(Packet):
     ]
 
 class UDPPacket(Packet):
-    name = "UDPPacket"
+    name = "UDPDatagram"
     fields_desc = [
         BitField("udp_port_src", 0, 16),
         BitField("udp_port_dst", 0, 16),
@@ -43,37 +43,6 @@ class UDPPacket(Packet):
         BitField("udp_csum", 0, 16)
     ]
 
-"""
-    Private source repo: https://github.com/SNVLab-WUT/int-collector/blob/main/collector/BPFCollector_v0_5.c
-    fabric-tna repo: https://github.com/stratum/fabric-tna/blob/main/p4src/shared/header.p4
-
-    Little Endian order
-        BitField("nproto", 0, 4),
-        BitField("ver", 0, 4),
-        BitField("rsvd1", 0, 5),
-        BitField("f", 0, 1),
-        BitField("q", 0, 1),
-        BitField("d", 0, 1),
-        BitField("hw_id", 0, 6),
-        BitField("rsvd2", 0, 10),
-
-        BitField("queue_id", 0, 8),
-        BitField("queue_occupancy", 0, 24),
-
-    Big Endian order
-        BitField("ver", 0, 4),
-        BitField("nproto", 0, 4),
-        BitField("d", 0, 1),
-        BitField("q", 0, 1),
-        BitField("f", 0, 1),
-        BitField("rsvd1", 0, 5),
-        BitField("rsvd2", 0, 10),
-        BitField("hw_id", 0, 6),
-
-        BitField("queue_occupancy", 0, 24),
-        BitField("queue_id", 0, 8),
-"""
-
 class IntFixedReport(Packet):
     name = "IntFixedReport"
     fields_desc = [
diff --git a/src/telemetry/backend/service/collectors/int_collector/__init__.py b/src/telemetry/backend/service/collectors/int_collector/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..7363515f07a52d996229bcbd72932ce1423258d7
--- /dev/null
+++ b/src/telemetry/backend/service/collectors/int_collector/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/telemetry/database/TelemetryModel.py b/src/telemetry/database/TelemetryModel.py
index 8238d47c6aeff033cbd7e63b05b9cc88f1768d55..6eaf4180577d76a94a1ebde6b057fd4c0d442bf8 100644
--- a/src/telemetry/database/TelemetryModel.py
+++ b/src/telemetry/database/TelemetryModel.py
@@ -18,7 +18,6 @@ from sqlalchemy import Column, String, Float
 from sqlalchemy.orm import registry
 from common.proto import telemetry_frontend_pb2
 
-logging.basicConfig(level=logging.INFO)
 LOGGER = logging.getLogger(__name__)
 
 # Create a base class for declarative models
diff --git a/src/telemetry/frontend/Dockerfile b/src/telemetry/frontend/Dockerfile
index dc90b7d164dbaaf8249d36628fc60eee88bb8034..b758a3f6c1d68f20ce72fd4820d227276ed5a404 100644
--- a/src/telemetry/frontend/Dockerfile
+++ b/src/telemetry/frontend/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ecoc22/Dockerfile b/src/tests/ecoc22/Dockerfile
index 3a7f9155bf2620fb4f9026cf621640ef5346f8c3..57a39950c4059c07efb8d333bc33690aa71c002a 100644
--- a/src/tests/ecoc22/Dockerfile
+++ b/src/tests/ecoc22/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/eucnc24/Dockerfile b/src/tests/eucnc24/Dockerfile
index 9e1ab4d0ae265dc2179c574b7f7e45cba100fe82..cde6358c755f605764ded46268557a9482996c4b 100644
--- a/src/tests/eucnc24/Dockerfile
+++ b/src/tests/eucnc24/Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ofc22/Dockerfile b/src/tests/ofc22/Dockerfile
index 07b18df0fff67adae4f8cfcf089fb9349fa00f9f..5fbf129223688e02933575c9fe65891e2c586bb7 100644
--- a/src/tests/ofc22/Dockerfile
+++ b/src/tests/ofc22/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ofc24/Dockerfile b/src/tests/ofc24/Dockerfile
index 67dbf52ca70c7fb95602768cebf4236fca402f97..ceb872e2a5f788d7e246ef1d61b1fb54ca6f92d6 100644
--- a/src/tests/ofc24/Dockerfile
+++ b/src/tests/ofc24/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ofc24/refresh_op.sh b/src/tests/ofc24/refresh_op.sh
index 3a8fca7f9d3a8d9568b62a309b62d941b887704b..e3e68fa5e573b2ef6d5afa4c62ad4f7da1e86c17 100644
--- a/src/tests/ofc24/refresh_op.sh
+++ b/src/tests/ofc24/refresh_op.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/tests/ofc25-camara-agg-net-controller/Dockerfile b/src/tests/ofc25-camara-agg-net-controller/Dockerfile
index d6aedac80a3b9da9a8c39278ec35bcec3dc5c198..ccab9299e4c52ff606882e6a2475679c37f5d0e7 100644
--- a/src/tests/ofc25-camara-agg-net-controller/Dockerfile
+++ b/src/tests/ofc25-camara-agg-net-controller/Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ofc25-camara-e2e-controller/Dockerfile b/src/tests/ofc25-camara-e2e-controller/Dockerfile
index cdd1b16d1f845a9294df01ea32517f64507108c3..bfb557dcc4faa63f97989f4b2b2ab5e3c26d283a 100644
--- a/src/tests/ofc25-camara-e2e-controller/Dockerfile
+++ b/src/tests/ofc25-camara-e2e-controller/Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ofc25/Dockerfile b/src/tests/ofc25/Dockerfile
index a887e7e27f6cea484cfe9943f7c0fda72205dcef..a93d1d2d84d79620914229f4ac33932d9ec3433e 100644
--- a/src/tests/ofc25/Dockerfile
+++ b/src/tests/ofc25/Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0's==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/p4-fabric-tna/descriptors/topology.json b/src/tests/p4-fabric-tna/descriptors/topology.json
index 619060e9e00bd589ea988d2cda77f177615b85a0..a8cc72ae28280fd89870465d6fa80e2030e5092d 100644
--- a/src/tests/p4-fabric-tna/descriptors/topology.json
+++ b/src/tests/p4-fabric-tna/descriptors/topology.json
@@ -104,7 +104,7 @@
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "sw1/3==tfs-sdn-controller/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "sw1/3==tfs-sdn-controller/mgmt"}}, "link_type": "LINKTYPE_VIRTUAL", "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "sw1"}},                "endpoint_uuid": {"uuid": "3"}},
                 {"device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, "endpoint_uuid": {"uuid": "mgmt"}}
             ]
diff --git a/src/tests/qkd_end2end/Dockerfile b/src/tests/qkd_end2end/Dockerfile
index 4486522b6d335d8ce0ef4cb84bb0a1e070636d3c..89b0a2fd106b622569d85f7a47d883f7be217875 100644
--- a/src/tests/qkd_end2end/Dockerfile
+++ b/src/tests/qkd_end2end/Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/ryu-openflow/Test.Dockerfile b/src/tests/ryu-openflow/Test.Dockerfile
index 3564e3f2d64c22ecd6dca3bec4d3660f60abaa7d..ea3d4bec3ea99f5f3d007095171da895ef9ceb1c 100644
--- a/src/tests/ryu-openflow/Test.Dockerfile
+++ b/src/tests/ryu-openflow/Test.Dockerfile
@@ -23,9 +23,9 @@ RUN apt-get --yes --quiet --quiet update && \
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/tools/firewall_agent/DeploymentSet.yaml b/src/tests/tools/firewall_agent/DeploymentSet.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f23b33f26c4a4d63c23d20a0c06e75160cc1354e
--- /dev/null
+++ b/src/tests/tools/firewall_agent/DeploymentSet.yaml
@@ -0,0 +1,73 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: firewall-agent
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: firewall-agent
+  template:
+    metadata:
+      labels:
+        app: firewall-agent
+    spec:
+      hostNetwork: true               # like --network host
+      dnsPolicy: ClusterFirstWithHostNet
+      containers:
+        - name: firewall-agent
+          image: firewall-agent:dev
+          #image: localhost:32000/tfs/firewall-agent:dev
+          imagePullPolicy: Always
+          securityContext:
+            capabilities:
+              add: ["NET_ADMIN"]      # like --cap-add=NET_ADMIN
+            # privileged: true        # uncomment if your code needs full net admin / sysctl
+          ports:
+            - containerPort: 8888     # container listens on 8888 on the host now
+              hostPort: 8888          # optional, but makes it explicit
+          readinessProbe:
+            httpGet:
+              path: /restconf/data
+              port: 8888
+            initialDelaySeconds: 5
+            timeoutSeconds: 1
+          livenessProbe:
+            httpGet:
+              path: /restconf/data
+              port: 8888
+            initialDelaySeconds: 5
+            timeoutSeconds: 1
+## Service not needed as pod is directly exposed on host network
+#---
+#apiVersion: v1
+#kind: Service
+#metadata:
+#  name: firewall-agent
+#  labels:
+#    app: firewall-agent
+#spec:
+#  type: NodePort
+#  selector:
+#    app: firewall-agent
+#  ports:
+#    - name: mgmt
+#      protocol: TCP
+#      port: 8888
+#      targetPort: 8888
+#      nodePort: 30888
diff --git a/src/tests/tools/firewall_agent/Dockerfile b/src/tests/tools/firewall_agent/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..3207a5fff7f0140414f480ba1ebe2cfb5b44fcc8
--- /dev/null
+++ b/src/tests/tools/firewall_agent/Dockerfile
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+FROM python:3.11-slim
+
+ENV PYTHONUNBUFFERED=0
+
+RUN apt-get --yes --quiet --quiet update && \
+    apt-get --yes --quiet --quiet install --no-install-recommends libxtables-dev iptables gcc libc6-dev python3-nftables && \
+    apt-get clean -y && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /app
+COPY requirements.txt ./
+RUN pip install --no-cache-dir -r requirements.txt
+COPY firewall_agent ./firewall_agent
+
+EXPOSE 8888
+CMD ["python", "-m", "firewall_agent.app"]
diff --git a/src/tests/tools/firewall_agent/README.md b/src/tests/tools/firewall_agent/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2f07034de861091f89d23d02e21161fb7eb493cf
--- /dev/null
+++ b/src/tests/tools/firewall_agent/README.md
@@ -0,0 +1,6 @@
+# Firewall Agent
+
+This repository contains a simple RESTCONF/OpenConfig firewall agent and a test deployment that demonstrates ACL behavior using two minimal HTTP servers.
+
+__NOTE: TO BE COMPLETED__
+
diff --git a/src/tests/tools/firewall_agent/docs/Docs-and-Commands.md b/src/tests/tools/firewall_agent/docs/Docs-and-Commands.md
new file mode 100644
index 0000000000000000000000000000000000000000..2c133c875f897457ade5438f9803c8c052ceeb37
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/Docs-and-Commands.md
@@ -0,0 +1,1009 @@
+# Docs and Commands
+
+- Ref: https://ral-arturo.org/2020/11/22/python-nftables-tutorial.html
+- Ref: https://www.netfilter.org/projects/nftables/manpage.html
+- Ref: https://wiki.nftables.org/wiki-nftables/index.php/Quick_reference-nftables_in_10_minutes
+
+- Note: table and chain can have comment as well.
+
+## Example Commands:
+
+```bash
+sudo nft --interactive --handle
+
+# WORKS to block traffic, but weird as external facing port is 30435, not 85
+insert rule ip filter FORWARD iifname "enp0s3" tcp dport 85 drop
+
+# WORKS to block/allow traffic by external facing port 30435
+add table ip filter
+add chain ip filter PREROUTING { type filter hook prerouting priority raw; policy accept; }
+add rule ip filter PREROUTING tcp dport 30435 reject
+insert rule ip filter PREROUTING ip saddr 10.0.2.2/32 tcp dport 30435 accept
+insert rule ip filter PREROUTING ip saddr 10.0.2.10/32 tcp dport 30435 accept
+
+list chain ip filter PREROUTING
+table ip filter {
+        chain PREROUTING { # handle 30
+                type filter hook prerouting priority raw; policy accept;
+                ip saddr 10.0.2.10 tcp dport 30435 accept # handle 34
+                ip saddr 10.0.2.2 tcp dport 30435 accept # handle 33
+                tcp dport 30435 reject # handle 31
+        }
+}
+
+delete rule ip filter PREROUTING handle 34
+delete rule ip filter PREROUTING handle 33
+delete rule ip filter PREROUTING handle 31
+
+
+# =============================
+
+sudo nft add table ip filter
+sudo nft add chain ip filter input  {type filter hook input priority filter ; policy accept; }
+sudo nft add chain ip filter output {type filter hook output priority filter; policy accept; }
+
+# Example options
+#sudo nft add rule ip filter input
+#    iifname lo
+#    oifname lo
+#    ip saddr 0.0.0.0/0
+#    ip daddr 192.168.0.10/32
+#    tcp sport 12345
+#    tcp dport 80
+#    accept/drop/reject
+#    comment "my-rule-name"
+
+sudo nft add rule ip filter input iifname enp0s3 ip saddr 0.0.0.0/0 ip daddr 192.168.0.10/32 tcp sport 12345 tcp dport 80 accept comment "my-rule-in-test"
+sudo nft add rule ip filter output oifname enp0s3 ip daddr 0.0.0.0/0 ip saddr 192.168.0.10/32 tcp dport 80 tcp sport 12345 drop comment "my-rule-out-test"
+```
+
+
+## Running code:
+
+```python
+import json
+import nftables
+
+nft = nftables.Nftables()
+nft.set_json_output(True)
+rc, output, error = nft.cmd("list ruleset")
+print(json.loads(output))
+```
+
+Retrieves in `output`:
+
+```json
+{
+    "nftables": [
+        {
+            "metainfo": {
+                "version": "1.1.3",
+                "release_name": "Commodore Bullmoose #4",
+                "json_schema_version": 1
+            }
+        },
+        {
+            "table": {
+                "family": "ip",
+                "name": "nat",
+                "handle": 1
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "nat",
+                "name": "DOCKER",
+                "handle": 1
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "nat",
+                "name": "PREROUTING",
+                "handle": 6,
+                "type": "nat",
+                "hook": "prerouting",
+                "prio": -100,
+                "policy": "accept"
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "nat",
+                "name": "OUTPUT",
+                "handle": 8,
+                "type": "nat",
+                "hook": "output",
+                "prio": -100,
+                "policy": "accept"
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "nat",
+                "name": "POSTROUTING",
+                "handle": 10,
+                "type": "nat",
+                "hook": "postrouting",
+                "prio": 100,
+                "policy": "accept"
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "nat",
+                "chain": "DOCKER",
+                "handle": 14,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "iifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "return": null
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "nat",
+                "chain": "PREROUTING",
+                "handle": 7,
+                "expr": [
+                    {
+                        "xt": {
+                            "type": "match",
+                            "name": "addrtype"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 2,
+                            "bytes": 88
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "nat",
+                "chain": "OUTPUT",
+                "handle": 9,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "!=",
+                            "left": {
+                                "payload": {
+                                    "protocol": "ip",
+                                    "field": "daddr"
+                                }
+                            },
+                            "right": {
+                                "prefix": {
+                                    "addr": "127.0.0.0",
+                                    "len": 8
+                                }
+                            }
+                        }
+                    },
+                    {
+                        "xt": {
+                            "type": "match",
+                            "name": "addrtype"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 12,
+                            "bytes": 720
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "nat",
+                "chain": "POSTROUTING",
+                "handle": 13,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "!=",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "payload": {
+                                    "protocol": "ip",
+                                    "field": "saddr"
+                                }
+                            },
+                            "right": {
+                                "prefix": {
+                                    "addr": "172.17.0.0",
+                                    "len": 16
+                                }
+                            }
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 74,
+                            "bytes": 4651
+                        }
+                    },
+                    {
+                        "xt": {
+                            "type": "target",
+                            "name": "MASQUERADE"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "table": {
+                "family": "ip",
+                "name": "filter",
+                "handle": 2
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER",
+                "handle": 1
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-FORWARD",
+                "handle": 2
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-BRIDGE",
+                "handle": 3
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-CT",
+                "handle": 4
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-ISOLATION-STAGE-1",
+                "handle": 5
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-ISOLATION-STAGE-2",
+                "handle": 6
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "FORWARD",
+                "handle": 7,
+                "type": "filter",
+                "hook": "forward",
+                "prio": 0,
+                "policy": "accept"
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "DOCKER-USER",
+                "handle": 18
+            }
+        },
+        {
+            "chain": {
+                "family": "ip",
+                "table": "filter",
+                "name": "INPUT",
+                "handle": 26,
+                "type": "filter",
+                "hook": "input",
+                "prio": 0,
+                "policy": "accept"
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER",
+                "handle": 21,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "!=",
+                            "left": {
+                                "meta": {
+                                    "key": "iifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "drop": null
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 11,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 188597,
+                            "bytes": 246896440
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-CT"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 10,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 68171,
+                            "bytes": 3005971
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-ISOLATION-STAGE-1"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 9,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 68171,
+                            "bytes": 3005971
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-BRIDGE"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 20,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "iifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 68171,
+                            "bytes": 3005971
+                        }
+                    },
+                    {
+                        "accept": null
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-BRIDGE",
+                "handle": 23,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-CT",
+                "handle": 22,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "xt": {
+                            "type": "match",
+                            "name": "conntrack"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 120426,
+                            "bytes": 243890469
+                        }
+                    },
+                    {
+                        "accept": null
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-ISOLATION-STAGE-1",
+                "handle": 24,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "iifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "match": {
+                            "op": "!=",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 68171,
+                            "bytes": 3005971
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-ISOLATION-STAGE-2"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "DOCKER-ISOLATION-STAGE-2",
+                "handle": 25,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "meta": {
+                                    "key": "oifname"
+                                }
+                            },
+                            "right": "docker0"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "drop": null
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "FORWARD",
+                "handle": 19,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 188597,
+                            "bytes": 246896440
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-USER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "FORWARD",
+                "handle": 8,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 188597,
+                            "bytes": 246896440
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-FORWARD"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip",
+                "table": "filter",
+                "chain": "INPUT",
+                "handle": 27,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "==",
+                            "left": {
+                                "payload": {
+                                    "protocol": "ip",
+                                    "field": "saddr"
+                                }
+                            },
+                            "right": "9.9.9.9"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "drop": null
+                    }
+                ]
+            }
+        },
+        {
+            "table": {
+                "family": "ip6",
+                "name": "nat",
+                "handle": 3
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "nat",
+                "name": "DOCKER",
+                "handle": 1
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "nat",
+                "name": "PREROUTING",
+                "handle": 2,
+                "type": "nat",
+                "hook": "prerouting",
+                "prio": -100,
+                "policy": "accept"
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "nat",
+                "name": "OUTPUT",
+                "handle": 4,
+                "type": "nat",
+                "hook": "output",
+                "prio": -100,
+                "policy": "accept"
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "nat",
+                "chain": "PREROUTING",
+                "handle": 3,
+                "expr": [
+                    {
+                        "xt": {
+                            "type": "match",
+                            "name": "addrtype"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "nat",
+                "chain": "OUTPUT",
+                "handle": 5,
+                "expr": [
+                    {
+                        "match": {
+                            "op": "!=",
+                            "left": {
+                                "payload": {
+                                    "protocol": "ip6",
+                                    "field": "daddr"
+                                }
+                            },
+                            "right": "::1"
+                        }
+                    },
+                    {
+                        "xt": {
+                            "type": "match",
+                            "name": "addrtype"
+                        }
+                    },
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "table": {
+                "family": "ip6",
+                "name": "filter",
+                "handle": 4
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER",
+                "handle": 1
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-FORWARD",
+                "handle": 2
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-BRIDGE",
+                "handle": 3
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-CT",
+                "handle": 4
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-ISOLATION-STAGE-1",
+                "handle": 5
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-ISOLATION-STAGE-2",
+                "handle": 6
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "FORWARD",
+                "handle": 7,
+                "type": "filter",
+                "hook": "forward",
+                "prio": 0,
+                "policy": "accept"
+            }
+        },
+        {
+            "chain": {
+                "family": "ip6",
+                "table": "filter",
+                "name": "DOCKER-USER",
+                "handle": 12
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 11,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-CT"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 10,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-ISOLATION-STAGE-1"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "filter",
+                "chain": "DOCKER-FORWARD",
+                "handle": 9,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-BRIDGE"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "filter",
+                "chain": "FORWARD",
+                "handle": 13,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-USER"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "rule": {
+                "family": "ip6",
+                "table": "filter",
+                "chain": "FORWARD",
+                "handle": 8,
+                "expr": [
+                    {
+                        "counter": {
+                            "packets": 0,
+                            "bytes": 0
+                        }
+                    },
+                    {
+                        "jump": {
+                            "target": "DOCKER-FORWARD"
+                        }
+                    }
+                ]
+            }
+        }
+    ]
+}
+```
diff --git a/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh b/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh
new file mode 100755
index 0000000000000000000000000000000000000000..30f02e67edd7c0ae617149ec1fa5aeee2636ab80
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+cd openconfig
+
+pyang -f tree -o ../openconfig-components.tree \
+    platform/openconfig-platform-common.yang \
+    platform/openconfig-platform-types.yang \
+    platform/openconfig-platform.yang \
+    system/openconfig-alarm-types.yang \
+    types/openconfig-types.yang \
+    types/openconfig-yang-types.yang
+
+pyang -f tree -o ../openconfig-interfaces.tree \
+    interfaces/openconfig-if-aggregate.yang \
+    interfaces/openconfig-if-ethernet.yang \
+    interfaces/openconfig-if-ip.yang \
+    interfaces/openconfig-interfaces.yang \
+    openconfig-extensions.yang \
+    openconfig-transport/openconfig-transport-types.yang \
+    platform/openconfig-platform-types.yang \
+    types/openconfig-inet-types.yang \
+    types/openconfig-types.yang \
+    types/openconfig-yang-types.yang \
+    vlan/openconfig-vlan-types.yang \
+    vlan/openconfig-vlan.yang
+
+pyang -f tree -o ../openconfig-acl.tree \
+    acl/openconfig-acl.yang \
+    acl/openconfig-icmpv4-types.yang \
+    acl/openconfig-icmpv6-types.yang \
+    acl/openconfig-packet-match-types.yang \
+    acl/openconfig-packet-match.yang \
+    defined-sets/openconfig-defined-sets.yang \
+    interfaces/openconfig-interfaces.yang \
+    mpls/openconfig-mpls-types.yang \
+    openconfig-transport/openconfig-transport-types.yang \
+    platform/openconfig-platform-types.yang \
+    types/openconfig-inet-types.yang \
+    types/openconfig-types.yang \
+    types/openconfig-yang-types.yang
diff --git a/src/tests/tools/firewall_agent/docs/yang/ietf/iana-if-type.yang b/src/tests/tools/firewall_agent/docs/yang/ietf/iana-if-type.yang
new file mode 100644
index 0000000000000000000000000000000000000000..7bfee36478edc7c65677cfe48b2630bffff791cb
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/ietf/iana-if-type.yang
@@ -0,0 +1,1619 @@
+module iana-if-type {
+  namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
+  prefix ianaift;
+
+  import ietf-interfaces {
+    prefix if;
+  }
+
+  organization "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA 90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     ";
+  description
+    "This YANG module defines YANG identities for IANA-registered
+     interface types.
+
+     This YANG module is maintained by IANA and reflects the
+     'ifType definitions' registry.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana&iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7224;
+     see the RFC itself for full legal notices.";
+  reference
+    "IANA 'ifType definitions' registry.
+     ";
+
+  revision 2017-01-19 {
+    description
+      "Registered ifType 289.";
+  }
+
+  revision 2016-11-23 {
+    description
+      "Registered ifTypes 283-288.";
+  }
+
+  revision 2016-06-09 {
+    description
+      "Registered ifType 282.";
+  }
+  revision 2016-05-03 {
+    description
+      "Registered ifType 281.";
+  }
+  revision 2015-06-12 {
+    description
+      "Corrected formatting issue.";
+  }  
+  revision 2014-09-24 {
+    description
+      "Registered ifType 280.";
+  }
+  revision 2014-09-19 {
+    description
+      "Registered ifType 279.";
+  }
+  revision 2014-07-03 {
+    description
+      "Registered ifTypes 277-278.";
+  }
+  revision 2014-05-19 {
+    description
+      "Updated the contact address.";
+  }
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7224: IANA Interface Type YANG Module";
+  }
+
+  identity iana-interface-type {
+    base if:interface-type;
+    description
+      "This identity is used as a base for all interface types
+       defined in the 'ifType definitions' registry.";
+  }
+
+  identity other {
+    base iana-interface-type;
+  }
+  identity regular1822 {
+    base iana-interface-type;
+  }
+  identity hdh1822 {
+    base iana-interface-type;
+  }
+  identity ddnX25 {
+    base iana-interface-type;
+  }
+  identity rfc877x25 {
+    base iana-interface-type;
+    reference
+      "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
+  }
+  identity ethernetCsmacd {
+    base iana-interface-type;
+    description
+      "For all Ethernet-like interfaces, regardless of speed,
+       as per RFC 3635.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity iso88023Csmacd {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity iso88024TokenBus {
+    base iana-interface-type;
+  }
+  identity iso88025TokenRing {
+    base iana-interface-type;
+  }
+  identity iso88026Man {
+    base iana-interface-type;
+  }
+  identity starLan {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity proteon10Mbit {
+    base iana-interface-type;
+  }
+  identity proteon80Mbit {
+    base iana-interface-type;
+  }
+  identity hyperchannel {
+    base iana-interface-type;
+  }
+  identity fddi {
+    base iana-interface-type;
+    reference
+      "RFC 1512 - FDDI Management Information Base";
+  }
+  identity lapb {
+    base iana-interface-type;
+    reference
+      "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
+  }
+  identity sdlc {
+    base iana-interface-type;
+  }
+  identity ds1 {
+    base iana-interface-type;
+    description
+      "DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+                  DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+  identity e1 {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+                  DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+  identity basicISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+  identity primaryISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+  identity propPointToPointSerial {
+    base iana-interface-type;
+    description
+      "Proprietary serial.";
+  }
+  identity ppp {
+    base iana-interface-type;
+  }
+  identity softwareLoopback {
+    base iana-interface-type;
+  }
+  identity eon {
+    base iana-interface-type;
+    description
+      "CLNP over IP.";
+  }
+  identity ethernet3Mbit {
+    base iana-interface-type;
+  }
+  identity nsip {
+    base iana-interface-type;
+    description
+      "XNS over IP.";
+  }
+  identity slip {
+    base iana-interface-type;
+    description
+      "Generic SLIP.";
+  }
+  identity ultra {
+    base iana-interface-type;
+    description
+      "Ultra Technologies.";
+  }
+  identity ds3 {
+    base iana-interface-type;
+    description
+      "DS3-MIB.";
+    reference
+      "RFC 3896 - Definitions of Managed Objects for the
+                  DS3/E3 Interface Type";
+  }
+  identity sip {
+    base iana-interface-type;
+    description
+      "SMDS, coffee.";
+    reference
+      "RFC 1694 - Definitions of Managed Objects for SMDS
+                  Interfaces using SMIv2";
+  }
+  identity frameRelay {
+    base iana-interface-type;
+    description
+      "DTE only.";
+    reference
+      "RFC 2115 - Management Information Base for Frame Relay
+                  DTEs Using SMIv2";
+  }
+  identity rs232 {
+    base iana-interface-type;
+    reference
+      "RFC 1659 - Definitions of Managed Objects for RS-232-like
+                  Hardware Devices using SMIv2";
+  }
+  identity para {
+    base iana-interface-type;
+    description
+      "Parallel-port.";
+    reference
+      "RFC 1660 - Definitions of Managed Objects for
+                  Parallel-printer-like Hardware Devices using
+                  SMIv2";
+  }
+  identity arcnet {
+    base iana-interface-type;
+    description
+      "ARCnet.";
+  }
+  identity arcnetPlus {
+    base iana-interface-type;
+    description
+      "ARCnet Plus.";
+  }
+  identity atm {
+    base iana-interface-type;
+    description
+      "ATM cells.";
+  }
+  identity miox25 {
+    base iana-interface-type;
+    reference
+      "RFC 1461 - SNMP MIB extension for Multiprotocol
+                  Interconnect over X.25";
+  }
+  identity sonet {
+    base iana-interface-type;
+    description
+      "SONET or SDH.";
+  }
+  identity x25ple {
+    base iana-interface-type;
+    reference
+      "RFC 2127 - ISDN Management Information Base using SMIv2";
+  }
+  identity iso88022llc {
+    base iana-interface-type;
+  }
+  identity localTalk {
+    base iana-interface-type;
+  }
+  identity smdsDxi {
+    base iana-interface-type;
+  }
+  identity frameRelayService {
+    base iana-interface-type;
+    description
+      "FRNETSERV-MIB.";
+    reference
+      "RFC 2954 - Definitions of Managed Objects for Frame
+                  Relay Service";
+  }
+  identity v35 {
+    base iana-interface-type;
+  }
+  identity hssi {
+    base iana-interface-type;
+  }
+  identity hippi {
+    base iana-interface-type;
+  }
+  identity modem {
+    base iana-interface-type;
+    description
+      "Generic modem.";
+  }
+  identity aal5 {
+    base iana-interface-type;
+    description
+      "AAL5 over ATM.";
+  }
+  identity sonetPath {
+    base iana-interface-type;
+  }
+  identity sonetVT {
+    base iana-interface-type;
+  }
+  identity smdsIcip {
+    base iana-interface-type;
+    description
+      "SMDS InterCarrier Interface.";
+  }
+  identity propVirtual {
+    base iana-interface-type;
+    description
+      "Proprietary virtual/internal.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+  identity propMultiplexor {
+    base iana-interface-type;
+    description
+      "Proprietary multiplexing.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+  identity ieee80212 {
+    base iana-interface-type;
+    description
+      "100BaseVG.";
+  }
+  identity fibreChannel {
+    base iana-interface-type;
+    description
+      "Fibre Channel.";
+  }
+  identity hippiInterface {
+    base iana-interface-type;
+    description
+      "HIPPI interfaces.";
+  }
+  identity frameRelayInterconnect {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; use either
+       frameRelay(32) or frameRelayService(44).";
+  }
+  identity aflane8023 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.3.";
+  }
+  identity aflane8025 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.5.";
+  }
+  identity cctEmul {
+    base iana-interface-type;
+    description
+      "ATM Emulated circuit.";
+  }
+  identity fastEther {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity isdn {
+    base iana-interface-type;
+    description
+      "ISDN and X.25.";
+    reference
+      "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
+                  in the Packet Mode";
+  }
+  identity v11 {
+    base iana-interface-type;
+    description
+      "CCITT V.11/X.21.";
+  }
+  identity v36 {
+    base iana-interface-type;
+    description
+      "CCITT V.36.";
+  }
+  identity g703at64k {
+    base iana-interface-type;
+    description
+      "CCITT G703 at 64Kbps.";
+  }
+  identity g703at2mb {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+  }
+  identity qllc {
+    base iana-interface-type;
+    description
+      "SNA QLLC.";
+  }
+  identity fastEtherFX {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity channel {
+    base iana-interface-type;
+    description
+      "Channel.";
+  }
+  identity ieee80211 {
+    base iana-interface-type;
+    description
+      "Radio spread spectrum.";
+  }
+  identity ibm370parChan {
+    base iana-interface-type;
+    description
+      "IBM System 360/370 OEMI Channel.";
+  }
+  identity escon {
+    base iana-interface-type;
+    description
+      "IBM Enterprise Systems Connection.";
+  }
+  identity dlsw {
+    base iana-interface-type;
+    description
+      "Data Link Switching.";
+  }
+  identity isdns {
+    base iana-interface-type;
+    description
+      "ISDN S/T interface.";
+  }
+  identity isdnu {
+    base iana-interface-type;
+    description
+      "ISDN U interface.";
+  }
+  identity lapd {
+    base iana-interface-type;
+    description
+      "Link Access Protocol D.";
+  }
+  identity ipSwitch {
+    base iana-interface-type;
+    description
+      "IP Switching Objects.";
+  }
+  identity rsrb {
+    base iana-interface-type;
+    description
+      "Remote Source Route Bridging.";
+  }
+  identity atmLogical {
+    base iana-interface-type;
+    description
+      "ATM Logical Port.";
+    reference
+      "RFC 3606 - Definitions of Supplemental Managed Objects
+                  for ATM Interface";
+  }
+  identity ds0 {
+    base iana-interface-type;
+    description
+      "Digital Signal Level 0.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+                  and DS0 Bundle Interface Type";
+  }
+  identity ds0Bundle {
+    base iana-interface-type;
+    description
+      "Group of ds0s on the same ds1.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+                  and DS0 Bundle Interface Type";
+  }
+  identity bsc {
+    base iana-interface-type;
+    description
+      "Bisynchronous Protocol.";
+  }
+  identity async {
+    base iana-interface-type;
+    description
+      "Asynchronous Protocol.";
+  }
+  identity cnr {
+    base iana-interface-type;
+    description
+      "Combat Net Radio.";
+  }
+  identity iso88025Dtr {
+    base iana-interface-type;
+    description
+      "ISO 802.5r DTR.";
+  }
+  identity eplrs {
+    base iana-interface-type;
+    description
+      "Ext Pos Loc Report Sys.";
+  }
+  identity arap {
+    base iana-interface-type;
+    description
+      "Appletalk Remote Access Protocol.";
+  }
+  identity propCnls {
+    base iana-interface-type;
+    description
+      "Proprietary Connectionless Protocol.";
+  }
+  identity hostPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.29 PAD Protocol.";
+  }
+  identity termPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.3 PAD Facility.";
+  }
+  identity frameRelayMPI {
+    base iana-interface-type;
+    description
+      "Multiproto Interconnect over FR.";
+  }
+  identity x213 {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X213.";
+  }
+  identity adsl {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop.";
+  }
+  identity radsl {
+    base iana-interface-type;
+    description
+      "Rate-Adapt. Digital Subscriber Loop.";
+  }
+  identity sdsl {
+    base iana-interface-type;
+    description
+      "Symmetric Digital Subscriber Loop.";
+  }
+  identity vdsl {
+    base iana-interface-type;
+    description
+      "Very H-Speed Digital Subscrib. Loop.";
+  }
+  identity iso88025CRFPInt {
+    base iana-interface-type;
+    description
+      "ISO 802.5 CRFP.";
+  }
+  identity myrinet {
+    base iana-interface-type;
+    description
+      "Myricom Myrinet.";
+  }
+  identity voiceEM {
+    base iana-interface-type;
+    description
+      "Voice recEive and transMit.";
+  }
+  identity voiceFXO {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Office.";
+  }
+  identity voiceFXS {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Station.";
+  }
+  identity voiceEncap {
+    base iana-interface-type;
+    description
+      "Voice encapsulation.";
+  }
+  identity voiceOverIp {
+    base iana-interface-type;
+    description
+      "Voice over IP encapsulation.";
+  }
+  identity atmDxi {
+    base iana-interface-type;
+    description
+      "ATM DXI.";
+  }
+  identity atmFuni {
+    base iana-interface-type;
+    description
+      "ATM FUNI.";
+  }
+  identity atmIma {
+    base iana-interface-type;
+    description
+      "ATM IMA.";
+  }
+  identity pppMultilinkBundle {
+    base iana-interface-type;
+    description
+      "PPP Multilink Bundle.";
+  }
+  identity ipOverCdlc {
+    base iana-interface-type;
+    description
+      "IBM ipOverCdlc.";
+  }
+  identity ipOverClaw {
+    base iana-interface-type;
+    description
+      "IBM Common Link Access to Workstn.";
+  }
+  identity stackToStack {
+    base iana-interface-type;
+    description
+      "IBM stackToStack.";
+  }
+  identity virtualIpAddress {
+    base iana-interface-type;
+    description
+      "IBM VIPA.";
+  }
+  identity mpc {
+    base iana-interface-type;
+    description
+      "IBM multi-protocol channel support.";
+  }
+  identity ipOverAtm {
+    base iana-interface-type;
+    description
+      "IBM ipOverAtm.";
+    reference
+      "RFC 2320 - Definitions of Managed Objects for Classical IP
+                  and ARP Over ATM Using SMIv2 (IPOA-MIB)";
+  }
+  identity iso88025Fiber {
+    base iana-interface-type;
+    description
+      "ISO 802.5j Fiber Token Ring.";
+  }
+  identity tdlc {
+    base iana-interface-type;
+    description
+      "IBM twinaxial data link control.";
+  }
+  identity gigabitEthernet {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity hdlc {
+    base iana-interface-type;
+    description
+      "HDLC.";
+  }
+  identity lapf {
+    base iana-interface-type;
+    description
+      "LAP F.";
+  }
+  identity v37 {
+    base iana-interface-type;
+    description
+      "V.37.";
+  }
+  identity x25mlp {
+    base iana-interface-type;
+    description
+      "Multi-Link Protocol.";
+  }
+  identity x25huntGroup {
+    base iana-interface-type;
+    description
+      "X25 Hunt Group.";
+  }
+  identity transpHdlc {
+    base iana-interface-type;
+    description
+      "Transp HDLC.";
+  }
+  identity interleave {
+    base iana-interface-type;
+    description
+      "Interleave channel.";
+  }
+  identity fast {
+    base iana-interface-type;
+    description
+      "Fast channel.";
+  }
+  identity ip {
+    base iana-interface-type;
+    description
+      "IP (for APPN HPR in IP networks).";
+  }
+  identity docsCableMaclayer {
+    base iana-interface-type;
+    description
+      "CATV Mac Layer.";
+  }
+  identity docsCableDownstream {
+    base iana-interface-type;
+    description
+      "CATV Downstream interface.";
+  }
+  identity docsCableUpstream {
+    base iana-interface-type;
+    description
+      "CATV Upstream interface.";
+  }
+  identity a12MppSwitch {
+    base iana-interface-type;
+    description
+      "Avalon Parallel Processor.";
+  }
+  identity tunnel {
+    base iana-interface-type;
+    description
+      "Encapsulation interface.";
+  }
+  identity coffee {
+    base iana-interface-type;
+    description
+      "Coffee pot.";
+    reference
+      "RFC 2325 - Coffee MIB";
+  }
+  identity ces {
+    base iana-interface-type;
+    description
+      "Circuit Emulation Service.";
+  }
+  identity atmSubInterface {
+    base iana-interface-type;
+    description
+      "ATM Sub Interface.";
+  }
+  identity l2vlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using 802.1Q.";
+  }
+  identity l3ipvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IP.";
+  }
+  identity l3ipxvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IPX.";
+  }
+  identity digitalPowerline {
+    base iana-interface-type;
+    description
+      "IP over Power Lines.";
+  }
+  identity mediaMailOverIp {
+    base iana-interface-type;
+    description
+      "Multimedia Mail over IP.";
+  }
+  identity dtm {
+    base iana-interface-type;
+    description
+      "Dynamic synchronous Transfer Mode.";
+  }
+  identity dcn {
+    base iana-interface-type;
+    description
+      "Data Communications Network.";
+  }
+  identity ipForward {
+    base iana-interface-type;
+    description
+      "IP Forwarding Interface.";
+  }
+  identity msdsl {
+    base iana-interface-type;
+    description
+      "Multi-rate Symmetric DSL.";
+  }
+  identity ieee1394 {
+    base iana-interface-type;
+
+    description
+      "IEEE1394 High Performance Serial Bus.";
+  }
+  identity if-gsn {
+    base iana-interface-type;
+    description
+      "HIPPI-6400.";
+  }
+  identity dvbRccMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCC MAC Layer.";
+  }
+  identity dvbRccDownstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Downstream Channel.";
+  }
+  identity dvbRccUpstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Upstream Channel.";
+  }
+  identity atmVirtual {
+    base iana-interface-type;
+    description
+      "ATM Virtual Interface.";
+  }
+  identity mplsTunnel {
+    base iana-interface-type;
+    description
+      "MPLS Tunnel Virtual Interface.";
+  }
+  identity srp {
+    base iana-interface-type;
+    description
+      "Spatial Reuse Protocol.";
+  }
+  identity voiceOverAtm {
+    base iana-interface-type;
+    description
+      "Voice over ATM.";
+  }
+  identity voiceOverFrameRelay {
+    base iana-interface-type;
+    description
+      "Voice Over Frame Relay.";
+  }
+  identity idsl {
+    base iana-interface-type;
+    description
+      "Digital Subscriber Loop over ISDN.";
+  }
+  identity compositeLink {
+    base iana-interface-type;
+    description
+      "Avici Composite Link Interface.";
+  }
+  identity ss7SigLink {
+    base iana-interface-type;
+    description
+      "SS7 Signaling Link.";
+  }
+  identity propWirelessP2P {
+    base iana-interface-type;
+    description
+      "Prop. P2P wireless interface.";
+  }
+  identity frForward {
+    base iana-interface-type;
+    description
+      "Frame Forward Interface.";
+  }
+  identity rfc1483 {
+    base iana-interface-type;
+    description
+      "Multiprotocol over ATM AAL5.";
+    reference
+      "RFC 1483 - Multiprotocol Encapsulation over ATM
+                  Adaptation Layer 5";
+  }
+  identity usb {
+    base iana-interface-type;
+    description
+      "USB Interface.";
+  }
+  identity ieee8023adLag {
+    base iana-interface-type;
+    description
+      "IEEE 802.3ad Link Aggregate.";
+  }
+  identity bgppolicyaccounting {
+    base iana-interface-type;
+    description
+      "BGP Policy Accounting.";
+  }
+  identity frf16MfrBundle {
+    base iana-interface-type;
+    description
+      "FRF.16 Multilink Frame Relay.";
+  }
+  identity h323Gatekeeper {
+    base iana-interface-type;
+    description
+      "H323 Gatekeeper.";
+  }
+  identity h323Proxy {
+    base iana-interface-type;
+    description
+      "H323 Voice and Video Proxy.";
+  }
+  identity mpls {
+    base iana-interface-type;
+    description
+      "MPLS.";
+  }
+  identity mfSigLink {
+    base iana-interface-type;
+    description
+      "Multi-frequency signaling link.";
+  }
+  identity hdsl2 {
+    base iana-interface-type;
+    description
+      "High Bit-Rate DSL - 2nd generation.";
+  }
+  identity shdsl {
+    base iana-interface-type;
+    description
+      "Multirate HDSL2.";
+  }
+  identity ds1FDL {
+    base iana-interface-type;
+    description
+      "Facility Data Link (4Kbps) on a DS1.";
+  }
+  identity pos {
+    base iana-interface-type;
+    description
+      "Packet over SONET/SDH Interface.";
+  }
+  identity dvbAsiIn {
+    base iana-interface-type;
+    description
+      "DVB-ASI Input.";
+  }
+  identity dvbAsiOut {
+    base iana-interface-type;
+    description
+      "DVB-ASI Output.";
+  }
+  identity plc {
+    base iana-interface-type;
+    description
+      "Power Line Communications.";
+  }
+  identity nfas {
+    base iana-interface-type;
+    description
+      "Non-Facility Associated Signaling.";
+  }
+  identity tr008 {
+    base iana-interface-type;
+    description
+      "TR008.";
+  }
+  identity gr303RDT {
+    base iana-interface-type;
+    description
+      "Remote Digital Terminal.";
+  }
+  identity gr303IDT {
+    base iana-interface-type;
+    description
+      "Integrated Digital Terminal.";
+  }
+  identity isup {
+    base iana-interface-type;
+    description
+      "ISUP.";
+  }
+  identity propDocsWirelessMaclayer {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Maclayer.";
+  }
+  identity propDocsWirelessDownstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Downstream.";
+  }
+  identity propDocsWirelessUpstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Upstream.";
+  }
+  identity hiperlan2 {
+    base iana-interface-type;
+    description
+      "HIPERLAN Type 2 Radio Interface.";
+  }
+  identity propBWAp2Mp {
+    base iana-interface-type;
+    description
+      "PropBroadbandWirelessAccesspt2Multipt (use of this value
+       for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
+       is deprecated, and ieee80216WMAN(237) should be used
+       instead).";
+  }
+  identity sonetOverheadChannel {
+    base iana-interface-type;
+    description
+      "SONET Overhead Channel.";
+  }
+  identity digitalWrapperOverheadChannel {
+    base iana-interface-type;
+    description
+      "Digital Wrapper.";
+  }
+  identity aal2 {
+    base iana-interface-type;
+    description
+      "ATM adaptation layer 2.";
+  }
+  identity radioMAC {
+    base iana-interface-type;
+    description
+      "MAC layer over radio links.";
+  }
+  identity atmRadio {
+    base iana-interface-type;
+    description
+      "ATM over radio links.";
+  }
+  identity imt {
+    base iana-interface-type;
+    description
+      "Inter-Machine Trunks.";
+  }
+  identity mvl {
+    base iana-interface-type;
+    description
+      "Multiple Virtual Lines DSL.";
+  }
+  identity reachDSL {
+    base iana-interface-type;
+    description
+      "Long Reach DSL.";
+  }
+  identity frDlciEndPt {
+    base iana-interface-type;
+    description
+      "Frame Relay DLCI End Point.";
+  }
+  identity atmVciEndPt {
+    base iana-interface-type;
+    description
+      "ATM VCI End Point.";
+  }
+  identity opticalChannel {
+    base iana-interface-type;
+    description
+      "Optical Channel.";
+  }
+  identity opticalTransport {
+    base iana-interface-type;
+    description
+      "Optical Transport.";
+  }
+  identity propAtm {
+    base iana-interface-type;
+    description
+      "Proprietary ATM.";
+  }
+  identity voiceOverCable {
+    base iana-interface-type;
+    description
+      "Voice Over Cable Interface.";
+  }
+  identity infiniband {
+    base iana-interface-type;
+    description
+      "Infiniband.";
+  }
+  identity teLink {
+    base iana-interface-type;
+    description
+      "TE Link.";
+  }
+  identity q2931 {
+    base iana-interface-type;
+    description
+      "Q.2931.";
+  }
+  identity virtualTg {
+    base iana-interface-type;
+    description
+      "Virtual Trunk Group.";
+  }
+  identity sipTg {
+    base iana-interface-type;
+    description
+      "SIP Trunk Group.";
+  }
+  identity sipSig {
+    base iana-interface-type;
+    description
+      "SIP Signaling.";
+  }
+  identity docsCableUpstreamChannel {
+    base iana-interface-type;
+    description
+      "CATV Upstream Channel.";
+  }
+  identity econet {
+    base iana-interface-type;
+    description
+      "Acorn Econet.";
+  }
+  identity pon155 {
+    base iana-interface-type;
+    description
+      "FSAN 155Mb Symetrical PON interface.";
+  }
+  identity pon622 {
+    base iana-interface-type;
+    description
+      "FSAN 622Mb Symetrical PON interface.";
+  }
+  identity bridge {
+    base iana-interface-type;
+    description
+      "Transparent bridge interface.";
+  }
+  identity linegroup {
+    base iana-interface-type;
+    description
+      "Interface common to multiple lines.";
+  }
+  identity voiceEMFGD {
+    base iana-interface-type;
+    description
+      "Voice E&M Feature Group D.";
+  }
+  identity voiceFGDEANA {
+    base iana-interface-type;
+    description
+      "Voice FGD Exchange Access North American.";
+  }
+  identity voiceDID {
+    base iana-interface-type;
+    description
+      "Voice Direct Inward Dialing.";
+  }
+  identity mpegTransport {
+    base iana-interface-type;
+    description
+      "MPEG transport interface.";
+  }
+  identity sixToFour {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "6to4 interface (DEPRECATED).";
+    reference
+      "RFC 4087 - IP Tunnel MIB";
+  }
+  identity gtp {
+    base iana-interface-type;
+    description
+      "GTP (GPRS Tunneling Protocol).";
+  }
+  identity pdnEtherLoop1 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 1.";
+  }
+  identity pdnEtherLoop2 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 2.";
+  }
+  identity opticalChannelGroup {
+    base iana-interface-type;
+    description
+      "Optical Channel Group.";
+  }
+  identity homepna {
+    base iana-interface-type;
+    description
+      "HomePNA ITU-T G.989.";
+  }
+  identity gfp {
+    base iana-interface-type;
+    description
+      "Generic Framing Procedure (GFP).";
+  }
+  identity ciscoISLvlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using Cisco ISL.";
+  }
+  identity actelisMetaLOOP {
+    base iana-interface-type;
+    description
+      "Acteleis proprietary MetaLOOP High Speed Link.";
+  }
+  identity fcipLink {
+    base iana-interface-type;
+    description
+      "FCIP Link.";
+  }
+  identity rpr {
+    base iana-interface-type;
+    description
+      "Resilient Packet Ring Interface Type.";
+  }
+  identity qam {
+    base iana-interface-type;
+    description
+      "RF Qam Interface.";
+  }
+  identity lmp {
+    base iana-interface-type;
+    description
+      "Link Management Protocol.";
+    reference
+      "RFC 4327 - Link Management Protocol (LMP) Management
+                  Information Base (MIB)";
+  }
+  identity cblVectaStar {
+    base iana-interface-type;
+    description
+      "Cambridge Broadband Networks Limited VectaStar.";
+  }
+  identity docsCableMCmtsDownstream {
+    base iana-interface-type;
+    description
+      "CATV Modular CMTS Downstream Interface.";
+  }
+  identity adsl2 {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2
+       (DEPRECATED/OBSOLETED - please use adsl2plus(238)
+       instead).";
+    reference
+      "RFC 4706 - Definitions of Managed Objects for Asymmetric
+                  Digital Subscriber Line 2 (ADSL2)";
+  }
+  identity macSecControlledIF {
+    base iana-interface-type;
+    description
+      "MACSecControlled.";
+  }
+  identity macSecUncontrolledIF {
+    base iana-interface-type;
+    description
+      "MACSecUncontrolled.";
+  }
+  identity aviciOpticalEther {
+    base iana-interface-type;
+    description
+      "Avici Optical Ethernet Aggregate.";
+  }
+  identity atmbond {
+    base iana-interface-type;
+    description
+      "atmbond.";
+  }
+  identity voiceFGDOS {
+    base iana-interface-type;
+    description
+      "Voice FGD Operator Services.";
+  }
+  identity mocaVersion1 {
+    base iana-interface-type;
+    description
+      "MultiMedia over Coax Alliance (MoCA) Interface
+       as documented in information provided privately to IANA.";
+  }
+  identity ieee80216WMAN {
+    base iana-interface-type;
+    description
+      "IEEE 802.16 WMAN interface.";
+  }
+  identity adsl2plus {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2 -
+       Version 2 Plus and all variants.";
+  }
+  identity dvbRcsMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCS MAC Layer.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity dvbTdm {
+    base iana-interface-type;
+    description
+      "DVB Satellite TDM.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity dvbRcsTdma {
+    base iana-interface-type;
+    description
+      "DVB-RCS TDMA.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity x86Laps {
+    base iana-interface-type;
+    description
+      "LAPS based on ITU-T X.86/Y.1323.";
+  }
+  identity wwanPP {
+    base iana-interface-type;
+    description
+      "3GPP WWAN.";
+  }
+  identity wwanPP2 {
+    base iana-interface-type;
+    description
+      "3GPP2 WWAN.";
+  }
+  identity voiceEBS {
+    base iana-interface-type;
+    description
+      "Voice P-phone EBS physical interface.";
+  }
+  identity ifPwType {
+    base iana-interface-type;
+    description
+      "Pseudowire interface type.";
+    reference
+      "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
+  }
+  identity ilan {
+    base iana-interface-type;
+    description
+      "Internal LAN on a bridge per IEEE 802.1ap.";
+  }
+  identity pip {
+    base iana-interface-type;
+    description
+      "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
+  }
+  identity aluELP {
+    base iana-interface-type;
+    description
+      "Alcatel-Lucent Ethernet Link Protection.";
+  }
+  identity gpon {
+    base iana-interface-type;
+    description
+      "Gigabit-capable passive optical networks (G-PON) as per
+       ITU-T G.948.";
+  }
+  identity vdsl2 {
+    base iana-interface-type;
+    description
+      "Very high speed digital subscriber line Version 2
+       (as per ITU-T Recommendation G.993.2).";
+    reference
+      "RFC 5650 - Definitions of Managed Objects for Very High
+                  Speed Digital Subscriber Line 2 (VDSL2)";
+  }
+  identity capwapDot11Profile {
+    base iana-interface-type;
+    description
+      "WLAN Profile Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Binding MIB for
+                  IEEE 802.11";
+  }
+  identity capwapDot11Bss {
+    base iana-interface-type;
+    description
+      "WLAN BSS Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Binding MIB for
+                  IEEE 802.11";
+  }
+  identity capwapWtpVirtualRadio {
+    base iana-interface-type;
+    description
+      "WTP Virtual Radio Interface.";
+    reference
+      "RFC 5833 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Base MIB";
+  }
+  identity bits {
+    base iana-interface-type;
+    description
+      "bitsport.";
+  }
+  identity docsCableUpstreamRfPort {
+    base iana-interface-type;
+    description
+      "DOCSIS CATV Upstream RF Port.";
+  }
+  identity cableDownstreamRfPort {
+    base iana-interface-type;
+    description
+      "CATV downstream RF Port.";
+  }
+  identity vmwareVirtualNic {
+    base iana-interface-type;
+    description
+      "VMware Virtual Network Interface.";
+  }
+  identity ieee802154 {
+    base iana-interface-type;
+    description
+      "IEEE 802.15.4 WPAN interface.";
+    reference
+      "IEEE 802.15.4-2006";
+  }
+  identity otnOdu {
+    base iana-interface-type;
+    description
+      "OTN Optical Data Unit.";
+  }
+  identity otnOtu {
+    base iana-interface-type;
+    description
+      "OTN Optical channel Transport Unit.";
+  }
+  identity ifVfiType {
+    base iana-interface-type;
+    description
+      "VPLS Forwarding Instance Interface Type.";
+  }
+  identity g9981 {
+    base iana-interface-type;
+    description
+      "G.998.1 bonded interface.";
+  }
+  identity g9982 {
+    base iana-interface-type;
+    description
+      "G.998.2 bonded interface.";
+  }
+  identity g9983 {
+    base iana-interface-type;
+    description
+      "G.998.3 bonded interface.";
+  }
+
+  identity aluEpon {
+    base iana-interface-type;
+    description
+      "Ethernet Passive Optical Networks (E-PON).";
+  }
+  identity aluEponOnu {
+    base iana-interface-type;
+    description
+      "EPON Optical Network Unit.";
+  }
+  identity aluEponPhysicalUni {
+    base iana-interface-type;
+    description
+      "EPON physical User to Network interface.";
+  }
+  identity aluEponLogicalLink {
+    base iana-interface-type;
+    description
+      "The emulation of a point-to-point link over the EPON
+       layer.";
+  }
+  identity aluGponOnu {
+    base iana-interface-type;
+    description
+      "GPON Optical Network Unit.";
+    reference
+      "ITU-T G.984.2";
+  }
+  identity aluGponPhysicalUni {
+    base iana-interface-type;
+    description
+      "GPON physical User to Network interface.";
+    reference
+      "ITU-T G.984.2";
+  }
+  identity vmwareNicTeam {
+    base iana-interface-type;
+    description
+      "VMware NIC Team.";
+  }
+  identity docsOfdmDownstream {
+    base iana-interface-type;
+    description
+      "CATV Downstream OFDM interface.";
+  }
+  identity docsOfdmaUpstream {
+    base iana-interface-type;
+    description
+      "CATV Upstream OFDMA interface.";
+  }
+  identity gfast {
+    base iana-interface-type;
+    description
+      "G.fast port.";
+    reference
+      "ITU-T G.9701";
+  }
+  identity sdci {
+    base iana-interface-type;
+    description
+      "SDCI (IO-Link).";
+    reference
+      "IEC 61131-9 Edition 1.0 2013-09";
+  }
+  identity xboxWireless {
+    base iana-interface-type;
+    description
+      "Xbox wireless.";
+  }
+  identity fastdsl {
+    base iana-interface-type;
+    description
+      "FastDSL.";
+    reference
+      "BBF TR-355";
+  }
+  identity docsCableScte55d1FwdOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-1 OOB Forward Channel.";
+  }
+  identity docsCableScte55d1RetOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-1 OOB Return Channel.";
+  }
+  identity docsCableScte55d2DsOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-2 OOB Downstream Channel.";
+  }
+  identity docsCableScte55d2UsOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-2 OOB Upstream Channel.";
+  }
+  identity docsCableNdf {
+    base iana-interface-type;
+    description
+      "Cable Narrowband Digital Forward.";
+  }
+  identity docsCableNdr {
+    base iana-interface-type;
+    description
+      "Cable Narrowband Digital Return.";
+  }
+  identity ptm {
+    base iana-interface-type;
+    description
+      "Packet Transfer Mode.";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-interfaces.yang b/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-interfaces.yang
new file mode 100644
index 0000000000000000000000000000000000000000..f66c205ce076e65b2ded1d388c944a91829a48b5
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-interfaces.yang
@@ -0,0 +1,1123 @@
+module ietf-interfaces {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
+  prefix if;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group";
+
+  contact
+    "WG Web:   
+     WG List:  
+
+     Editor:   Martin Bjorklund
+               ";
+
+  description
+    "This module contains a collection of YANG definitions for
+     managing network interfaces.
+
+     Copyright (c) 2018 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8343; see
+     the RFC itself for full legal notices.";
+
+  revision 2018-02-20 {
+    description
+      "Updated to support NMDA.";
+    reference
+      "RFC 8343: A YANG Data Model for Interface Management";
+  }
+
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7223: A YANG Data Model for Interface Management";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef interface-ref {
+    type leafref {
+      path "/if:interfaces/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       interfaces.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity interface-type {
+    description
+      "Base identity from which specific interface types are
+       derived.";
+  }
+
+  /*
+   * Features
+   */
+
+  feature arbitrary-names {
+    description
+      "This feature indicates that the device allows user-controlled
+       interfaces to be named arbitrarily.";
+  }
+  feature pre-provisioning {
+    description
+      "This feature indicates that the device supports
+       pre-provisioning of interface configuration, i.e., it is
+       possible to configure an interface whose physical interface
+       hardware is not present on the device.";
+  }
+  feature if-mib {
+    description
+      "This feature indicates that the device implements
+       the IF-MIB.";
+    reference
+      "RFC 2863: The Interfaces Group MIB";
+  }
+
+  /*
+   * Data nodes
+   */
+
+  container interfaces {
+    description
+      "Interface parameters.";
+
+    list interface {
+      key "name";
+
+      description
+        "The list of interfaces on the device.
+
+         The status of an interface is available in this list in the
+         operational state.  If the configuration of a
+         system-controlled interface cannot be used by the system
+         (e.g., the interface hardware present does not match the
+         interface type), then the configuration is not applied to
+         the system-controlled interface shown in the operational
+         state.  If the configuration of a user-controlled interface
+         cannot be used by the system, the configured interface is
+         not instantiated in the operational state.
+
+         System-controlled interfaces created by the system are
+         always present in this list in the operational state,
+         whether or not they are configured.";
+
+     leaf name {
+        type string;
+        description
+          "The name of the interface.
+
+           A device MAY restrict the allowed values for this leaf,
+           possibly depending on the type of the interface.
+           For system-controlled interfaces, this leaf is the
+           device-specific name of the interface.
+
+           If a client tries to create configuration for a
+           system-controlled interface that is not present in the
+           operational state, the server MAY reject the request if
+           the implementation does not support pre-provisioning of
+           interfaces or if the name refers to an interface that can
+           never exist in the system.  A Network Configuration
+           Protocol (NETCONF) server MUST reply with an rpc-error
+           with the error-tag 'invalid-value' in this case.
+
+           If the device supports pre-provisioning of interface
+           configuration, the 'pre-provisioning' feature is
+           advertised.
+
+           If the device allows arbitrarily named user-controlled
+           interfaces, the 'arbitrary-names' feature is advertised.
+
+           When a configured user-controlled interface is created by
+           the system, it is instantiated with the same name in the
+           operational state.
+
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf description {
+        type string;
+        description
+          "A textual description of the interface.
+
+           A server implementation MAY map this leaf to the ifAlias
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifAlias.  The definition of
+           such a mechanism is outside the scope of this document.
+
+           Since ifAlias is defined to be stored in non-volatile
+           storage, the MIB implementation MUST map ifAlias to the
+           value of 'description' in the persistently stored
+           configuration.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAlias";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.
+
+           When an interface entry is created, a server MAY
+           initialize the type leaf with a valid value, e.g., if it
+           is possible to derive the type from the name of the
+           interface.
+
+           If a client tries to set the type of an interface to a
+           value that can never be used by the system, e.g., if the
+           type is not supported or if the type does not match the
+           name of the interface, the server MUST reject the request.
+           A NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "This leaf contains the configured, desired state of the
+           interface.
+
+           Systems that implement the IF-MIB use the value of this
+           leaf in the intended configuration to set
+           IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+           has been initialized, as described in RFC 2863.
+
+           Changes in this leaf in the intended configuration are
+           reflected in ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf link-up-down-trap-enable {
+        if-feature if-mib;
+        type enumeration {
+          enum enabled {
+            value 1;
+            description
+              "The device will generate linkUp/linkDown SNMP
+               notifications for this interface.";
+          }
+          enum disabled {
+            value 2;
+            description
+              "The device will not generate linkUp/linkDown SNMP
+               notifications for this interface.";
+          }
+        }
+        description
+          "Controls whether linkUp/linkDown SNMP notifications
+           should be generated for this interface.
+
+           If this node is not configured, the value 'enabled' is
+           operationally used by the server for interfaces that do
+           not operate on top of any other interface (i.e., there are
+           no 'lower-layer-if' entries), and 'disabled' otherwise.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifLinkUpDownTrapEnable";
+      }
+
+      leaf admin-status {
+        if-feature if-mib;
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        config false;
+        mandatory true;
+        description
+          "The desired state of the interface.
+
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+
+            description
+              "The interface does not pass any packets.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum unknown {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum dormant {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum not-present {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum lower-layer-down {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        config false;
+        mandatory true;
+        description
+          "The current operational state of the interface.
+
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        config false;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature if-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        config false;
+        mandatory true;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        config false;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-ref;
+        config false;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-ref;
+        config false;
+
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        config false;
+        description
+            "An estimate of the interface's current bandwidth in bits
+             per second.  For interfaces that do not vary in
+             bandwidth or for those where no accurate estimation can
+             be made, this node should contain the nominal bandwidth.
+             For interfaces that have no concept of bandwidth, this
+             node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifSpeed, ifHighSpeed";
+      }
+
+      container statistics {
+        config false;
+        description
+          "A collection of interface-related statistics objects.";
+
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+        leaf out-octets {
+          type yang:counter64;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutBroadcastPkts";
+        }
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+
+    }
+  }
+
+  /*
+   * Legacy typedefs
+   */
+
+  typedef interface-state-ref {
+    type leafref {
+      path "/if:interfaces-state/if:interface/if:name";
+    }
+    status deprecated;
+    description
+      "This type is used by data models that need to reference
+       the operationally present interfaces.";
+  }
+
+  /*
+   * Legacy operational state data nodes
+   */
+
+  container interfaces-state {
+    config false;
+    status deprecated;
+    description
+      "Data nodes for the operational state of interfaces.";
+
+    list interface {
+      key "name";
+      status deprecated;
+
+      description
+        "The list of interfaces on the device.
+
+         System-controlled interfaces created by the system are
+         always present in this list, whether or not they are
+         configured.";
+
+      leaf name {
+        type string;
+        status deprecated;
+        description
+          "The name of the interface.
+
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The type of the interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf admin-status {
+        if-feature if-mib;
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The desired state of the interface.
+
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "The interface does not pass any packets.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum unknown {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum dormant {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum not-present {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum lower-layer-down {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The current operational state of the interface.
+
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        status deprecated;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature if-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        status deprecated;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-state-ref;
+        status deprecated;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-state-ref;
+        status deprecated;
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        status deprecated;
+        description
+            "An estimate of the interface's current bandwidth in bits
+             per second.  For interfaces that do not vary in
+             bandwidth or for those where no accurate estimation can
+
+             be made, this node should contain the nominal bandwidth.
+             For interfaces that have no concept of bandwidth, this
+             node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifSpeed, ifHighSpeed";
+      }
+
+      container statistics {
+        status deprecated;
+        description
+          "A collection of interface-related statistics objects.";
+
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          status deprecated;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          status deprecated;
+
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+        leaf out-octets {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          status deprecated;
+
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutBroadcastPkts";
+        }
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          status deprecated;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+    }
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-yang-types.yang b/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-yang-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..ee58fa3ab0042120d5607b8713d21fa0ba845895
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/ietf/ietf-yang-types.yang
@@ -0,0 +1,474 @@
+module ietf-yang-types {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+  prefix "yang";
+
+  organization
+   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+  contact
+   "WG Web:   
+    WG List:  
+
+    WG Chair: David Kessens
+              
+
+    WG Chair: Juergen Schoenwaelder
+              
+
+    Editor:   Juergen Schoenwaelder
+              ";
+
+  description
+   "This module contains a collection of generally useful derived
+    YANG data types.
+
+    Copyright (c) 2013 IETF Trust and the persons identified as
+    authors of the code.  All rights reserved.
+
+    Redistribution and use in source and binary forms, with or
+    without modification, is permitted pursuant to, and subject
+    to the license terms contained in, the Simplified BSD License
+    set forth in Section 4.c of the IETF Trust's Legal Provisions
+    Relating to IETF Documents
+    (http://trustee.ietf.org/license-info).
+
+    This version of this YANG module is part of RFC 6991; see
+    the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+     "This revision adds the following new data types:
+      - yang-identifier
+      - hex-string
+      - uuid
+      - dotted-quad";
+    reference
+     "RFC 6991: Common YANG Data Types";
+  }
+
+  revision 2010-09-24 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6021: Common YANG Data Types";
+  }
+
+  /*** collection of counter and gauge types ***/
+
+  typedef counter32 {
+    type uint32;
+    description
+     "The counter32 type represents a non-negative integer
+      that monotonically increases until it reaches a
+      maximum value of 2^32-1 (4294967295 decimal), when it
+      wraps around and starts increasing again from zero.
+
+      Counters have no defined 'initial' value, and thus, a
+      single value of a counter has (in general) no information
+      content.  Discontinuities in the monotonically increasing
+      value normally occur at re-initialization of the
+      management system, and at other times as specified in the
+      description of a schema node using this type.  If such
+      other times can occur, for example, the creation of
+      a schema node of type counter32 at times other than
+      re-initialization, then a corresponding schema node
+      should be defined, with an appropriate type, to indicate
+      the last discontinuity.
+
+      The counter32 type should not be used for configuration
+      schema nodes.  A default statement SHOULD NOT be used in
+      combination with the type counter32.
+
+      In the value set and its semantics, this type is equivalent
+      to the Counter32 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef zero-based-counter32 {
+    type yang:counter32;
+    default "0";
+    description
+     "The zero-based-counter32 type represents a counter32
+      that has the defined 'initial' value zero.
+
+      A schema node of this type will be set to zero (0) on creation
+      and will thereafter increase monotonically until it reaches
+      a maximum value of 2^32-1 (4294967295 decimal), when it
+      wraps around and starts increasing again from zero.
+
+      Provided that an application discovers a new schema node
+      of this type within the minimum time to wrap, it can use the
+      'initial' value as a delta.  It is important for a management
+      station to be aware of this minimum time and the actual time
+      between polls, and to discard data if the actual time is too
+      long or there is no defined minimum time.
+
+      In the value set and its semantics, this type is equivalent
+      to the ZeroBasedCounter32 textual convention of the SMIv2.";
+    reference
+      "RFC 4502: Remote Network Monitoring Management Information
+                 Base Version 2";
+  }
+
+  typedef counter64 {
+    type uint64;
+    description
+     "The counter64 type represents a non-negative integer
+      that monotonically increases until it reaches a
+      maximum value of 2^64-1 (18446744073709551615 decimal),
+      when it wraps around and starts increasing again from zero.
+
+      Counters have no defined 'initial' value, and thus, a
+      single value of a counter has (in general) no information
+      content.  Discontinuities in the monotonically increasing
+      value normally occur at re-initialization of the
+      management system, and at other times as specified in the
+      description of a schema node using this type.  If such
+      other times can occur, for example, the creation of
+      a schema node of type counter64 at times other than
+      re-initialization, then a corresponding schema node
+      should be defined, with an appropriate type, to indicate
+      the last discontinuity.
+
+      The counter64 type should not be used for configuration
+      schema nodes.  A default statement SHOULD NOT be used in
+      combination with the type counter64.
+
+      In the value set and its semantics, this type is equivalent
+      to the Counter64 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef zero-based-counter64 {
+    type yang:counter64;
+    default "0";
+    description
+     "The zero-based-counter64 type represents a counter64 that
+      has the defined 'initial' value zero.
+
+      A schema node of this type will be set to zero (0) on creation
+      and will thereafter increase monotonically until it reaches
+      a maximum value of 2^64-1 (18446744073709551615 decimal),
+      when it wraps around and starts increasing again from zero.
+
+      Provided that an application discovers a new schema node
+      of this type within the minimum time to wrap, it can use the
+      'initial' value as a delta.  It is important for a management
+      station to be aware of this minimum time and the actual time
+      between polls, and to discard data if the actual time is too
+      long or there is no defined minimum time.
+
+      In the value set and its semantics, this type is equivalent
+      to the ZeroBasedCounter64 textual convention of the SMIv2.";
+    reference
+     "RFC 2856: Textual Conventions for Additional High Capacity
+                Data Types";
+  }
+
+  typedef gauge32 {
+    type uint32;
+    description
+     "The gauge32 type represents a non-negative integer, which
+      may increase or decrease, but shall never exceed a maximum
+      value, nor fall below a minimum value.  The maximum value
+      cannot be greater than 2^32-1 (4294967295 decimal), and
+      the minimum value cannot be smaller than 0.  The value of
+      a gauge32 has its maximum value whenever the information
+      being modeled is greater than or equal to its maximum
+      value, and has its minimum value whenever the information
+      being modeled is smaller than or equal to its minimum value.
+      If the information being modeled subsequently decreases
+      below (increases above) the maximum (minimum) value, the
+      gauge32 also decreases (increases).
+
+      In the value set and its semantics, this type is equivalent
+      to the Gauge32 type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef gauge64 {
+    type uint64;
+    description
+     "The gauge64 type represents a non-negative integer, which
+      may increase or decrease, but shall never exceed a maximum
+      value, nor fall below a minimum value.  The maximum value
+      cannot be greater than 2^64-1 (18446744073709551615), and
+      the minimum value cannot be smaller than 0.  The value of
+      a gauge64 has its maximum value whenever the information
+      being modeled is greater than or equal to its maximum
+      value, and has its minimum value whenever the information
+      being modeled is smaller than or equal to its minimum value.
+      If the information being modeled subsequently decreases
+      below (increases above) the maximum (minimum) value, the
+      gauge64 also decreases (increases).
+
+      In the value set and its semantics, this type is equivalent
+      to the CounterBasedGauge64 SMIv2 textual convention defined
+      in RFC 2856";
+    reference
+     "RFC 2856: Textual Conventions for Additional High Capacity
+                Data Types";
+  }
+
+  /*** collection of identifier-related types ***/
+
+  typedef object-identifier {
+    type string {
+      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+            + '(\.(0|([1-9]\d*)))*';
+    }
+    description
+     "The object-identifier type represents administratively
+      assigned names in a registration-hierarchical-name tree.
+
+      Values of this type are denoted as a sequence of numerical
+      non-negative sub-identifier values.  Each sub-identifier
+      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+      are separated by single dots and without any intermediate
+      whitespace.
+
+      The ASN.1 standard restricts the value space of the first
+      sub-identifier to 0, 1, or 2.  Furthermore, the value space
+      of the second sub-identifier is restricted to the range
+      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+      the ASN.1 standard requires that an object identifier
+      has always at least two sub-identifiers.  The pattern
+      captures these restrictions.
+
+      Although the number of sub-identifiers is not limited,
+      module designers should realize that there may be
+      implementations that stick with the SMIv2 limit of 128
+      sub-identifiers.
+
+      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+      since it is not restricted to 128 sub-identifiers.  Hence,
+      this type SHOULD NOT be used to represent the SMIv2 OBJECT
+      IDENTIFIER type; the object-identifier-128 type SHOULD be
+      used instead.";
+    reference
+     "ISO9834-1: Information technology -- Open Systems
+      Interconnection -- Procedures for the operation of OSI
+      Registration Authorities: General procedures and top
+      arcs of the ASN.1 Object Identifier tree";
+  }
+
+  typedef object-identifier-128 {
+    type object-identifier {
+      pattern '\d*(\.\d*){1,127}';
+    }
+    description
+     "This type represents object-identifiers restricted to 128
+      sub-identifiers.
+
+      In the value set and its semantics, this type is equivalent
+      to the OBJECT IDENTIFIER type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef yang-identifier {
+    type string {
+      length "1..max";
+      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+    }
+    description
+      "A YANG identifier string as defined by the 'identifier'
+       rule in Section 12 of RFC 6020.  An identifier must
+       start with an alphabetic character or an underscore
+       followed by an arbitrary sequence of alphabetic or
+       numeric characters, underscores, hyphens, or dots.
+
+       A YANG identifier MUST NOT start with any possible
+       combination of the lowercase or uppercase character
+       sequence 'xml'.";
+    reference
+      "RFC 6020: YANG - A Data Modeling Language for the Network
+                 Configuration Protocol (NETCONF)";
+  }
+
+  /*** collection of types related to date and time***/
+
+  typedef date-and-time {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+            + '(Z|[\+\-]\d{2}:\d{2})';
+    }
+    description
+     "The date-and-time type is a profile of the ISO 8601
+      standard for representation of dates and times using the
+      Gregorian calendar.  The profile is defined by the
+      date-time production in Section 5.6 of RFC 3339.
+
+      The date-and-time type is compatible with the dateTime XML
+      schema type with the following notable exceptions:
+
+      (a) The date-and-time type does not allow negative years.
+
+      (b) The date-and-time time-offset -00:00 indicates an unknown
+          time zone (see RFC 3339) while -00:00 and +00:00 and Z
+          all represent the same time zone in dateTime.
+
+      (c) The canonical format (see below) of data-and-time values
+          differs from the canonical format used by the dateTime XML
+          schema type, which requires all times to be in UTC using
+          the time-offset 'Z'.
+
+      This type is not equivalent to the DateAndTime textual
+      convention of the SMIv2 since RFC 3339 uses a different
+      separator between full-date and full-time and provides
+      higher resolution of time-secfrac.
+
+      The canonical format for date-and-time values with a known time
+      zone uses a numeric time zone offset that is calculated using
+      the device's configured known offset to UTC time.  A change of
+      the device's offset to UTC time will cause date-and-time values
+      to change accordingly.  Such changes might happen periodically
+      in case a server follows automatically daylight saving time
+      (DST) time zone offset changes.  The canonical format for
+      date-and-time values with an unknown time zone (usually
+      referring to the notion of local time) uses the time-offset
+      -00:00.";
+    reference
+     "RFC 3339: Date and Time on the Internet: Timestamps
+      RFC 2579: Textual Conventions for SMIv2
+      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+  }
+
+  typedef timeticks {
+    type uint32;
+    description
+     "The timeticks type represents a non-negative integer that
+      represents the time, modulo 2^32 (4294967296 decimal), in
+      hundredths of a second between two epochs.  When a schema
+      node is defined that uses this type, the description of
+      the schema node identifies both of the reference epochs.
+
+      In the value set and its semantics, this type is equivalent
+      to the TimeTicks type of the SMIv2.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2
+                (SMIv2)";
+  }
+
+  typedef timestamp {
+    type yang:timeticks;
+    description
+     "The timestamp type represents the value of an associated
+      timeticks schema node at which a specific occurrence
+      happened.  The specific occurrence must be defined in the
+      description of any schema node defined using this type.  When
+      the specific occurrence occurred prior to the last time the
+      associated timeticks attribute was zero, then the timestamp
+      value is zero.  Note that this requires all timestamp values
+      to be reset to zero when the value of the associated timeticks
+      attribute reaches 497+ days and wraps around to zero.
+
+      The associated timeticks schema node must be specified
+      in the description of any schema node using this type.
+
+      In the value set and its semantics, this type is equivalent
+      to the TimeStamp textual convention of the SMIv2.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  /*** collection of generic address types ***/
+
+  typedef phys-address {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+
+    description
+     "Represents media- or physical-level addresses represented
+      as a sequence octets, each octet represented by two hexadecimal
+      numbers.  Octets are separated by colons.  The canonical
+      representation uses lowercase characters.
+
+      In the value set and its semantics, this type is equivalent
+      to the PhysAddress textual convention of the SMIv2.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef mac-address {
+    type string {
+      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+    }
+    description
+     "The mac-address type represents an IEEE 802 MAC address.
+      The canonical representation uses lowercase characters.
+
+      In the value set and its semantics, this type is equivalent
+      to the MacAddress textual convention of the SMIv2.";
+    reference
+     "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                Networks: Overview and Architecture
+      RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  /*** collection of XML-specific types ***/
+
+  typedef xpath1.0 {
+    type string;
+    description
+     "This type represents an XPATH 1.0 expression.
+
+      When a schema node is defined that uses this type, the
+      description of the schema node MUST specify the XPath
+      context in which the XPath expression is evaluated.";
+    reference
+     "XPATH: XML Path Language (XPath) Version 1.0";
+  }
+
+  /*** collection of string types ***/
+
+  typedef hex-string {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+    }
+    description
+     "A hexadecimal string with octets represented as hex digits
+      separated by colons.  The canonical representation uses
+      lowercase characters.";
+  }
+
+  typedef uuid {
+    type string {
+      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+    }
+    description
+     "A Universally Unique IDentifier in the string representation
+      defined in RFC 4122.  The canonical representation uses
+      lowercase characters.
+
+      The following is an example of a UUID in string representation:
+      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+      ";
+    reference
+     "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                Namespace";
+  }
+
+  typedef dotted-quad {
+    type string {
+      pattern
+        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+    }
+    description
+      "An unsigned 32-bit number expressed in the dotted-quad
+       notation, i.e., four octets written as decimal numbers
+       and separated with the '.' (full stop) character.";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig-acl.tree b/src/tests/tools/firewall_agent/docs/yang/openconfig-acl.tree
new file mode 100644
index 0000000000000000000000000000000000000000..74ce02934ae9a8443d13780849ea04b9774f2313
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig-acl.tree
@@ -0,0 +1,337 @@
+module: openconfig-acl
+  +--rw acl
+     +--rw config
+     +--ro state
+     |  +--ro counter-capability?   identityref
+     +--rw acl-sets
+     |  +--rw acl-set* [name type]
+     |     +--rw name           -> ../config/name
+     |     +--rw type           -> ../config/type
+     |     +--rw config
+     |     |  +--rw name?          string
+     |     |  +--rw type?          identityref
+     |     |  +--rw description?   string
+     |     +--ro state
+     |     |  +--ro name?          string
+     |     |  +--ro type?          identityref
+     |     |  +--ro description?   string
+     |     +--rw acl-entries
+     |        +--rw acl-entry* [sequence-id]
+     |           +--rw sequence-id        -> ../config/sequence-id
+     |           +--rw config
+     |           |  +--rw sequence-id?   uint32
+     |           |  +--rw description?   string
+     |           +--ro state
+     |           |  +--ro sequence-id?       uint32
+     |           |  +--ro description?       string
+     |           |  +--ro matched-packets?   oc-yang:counter64
+     |           |  +--ro matched-octets?    oc-yang:counter64
+     |           +--rw l2
+     |           |  +--rw config
+     |           |  |  +--rw source-mac?             oc-yang:mac-address
+     |           |  |  +--rw source-mac-mask?        oc-yang:mac-address
+     |           |  |  +--rw destination-mac?        oc-yang:mac-address
+     |           |  |  +--rw destination-mac-mask?   oc-yang:mac-address
+     |           |  |  +--rw ethertype?              oc-pkt-match-types:ethertype-type
+     |           |  +--ro state
+     |           |     +--ro source-mac?             oc-yang:mac-address
+     |           |     +--ro source-mac-mask?        oc-yang:mac-address
+     |           |     +--ro destination-mac?        oc-yang:mac-address
+     |           |     +--ro destination-mac-mask?   oc-yang:mac-address
+     |           |     +--ro ethertype?              oc-pkt-match-types:ethertype-type
+     |           +--rw ipv4
+     |           |  +--rw config
+     |           |  |  +--rw source-address?                   oc-inet:ipv4-prefix
+     |           |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
+     |           |  |  +--rw destination-address?              oc-inet:ipv4-prefix
+     |           |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
+     |           |  |  +--rw dscp?                             oc-inet:dscp
+     |           |  |  +--rw dscp-set*                         oc-inet:dscp
+     |           |  |  +--rw length?                           uint16
+     |           |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
+     |           |  |  +--rw hop-limit?                        uint8
+     |           |  +--ro state
+     |           |  |  +--ro source-address?                   oc-inet:ipv4-prefix
+     |           |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
+     |           |  |  +--ro destination-address?              oc-inet:ipv4-prefix
+     |           |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv4-prefix-sets/ipv4-prefix-set/name
+     |           |  |  +--ro dscp?                             oc-inet:dscp
+     |           |  |  +--ro dscp-set*                         oc-inet:dscp
+     |           |  |  +--ro length?                           uint16
+     |           |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
+     |           |  |  +--ro hop-limit?                        uint8
+     |           |  +--rw icmpv4
+     |           |     +--rw config
+     |           |     |  +--rw type?   identityref
+     |           |     |  +--rw code?   identityref
+     |           |     +--ro state
+     |           |        +--ro type?   identityref
+     |           |        +--ro code?   identityref
+     |           +--rw mpls
+     |           |  +--rw config
+     |           |  |  +--rw traffic-class?       oc-mpls:mpls-tc
+     |           |  |  +--rw start-label-value?   oc-mpls:mpls-label
+     |           |  |  +--rw end-label-value?     oc-mpls:mpls-label
+     |           |  |  +--rw ttl-value?           uint8
+     |           |  +--ro state
+     |           |     +--ro traffic-class?       oc-mpls:mpls-tc
+     |           |     +--ro start-label-value?   oc-mpls:mpls-label
+     |           |     +--ro end-label-value?     oc-mpls:mpls-label
+     |           |     +--ro ttl-value?           uint8
+     |           +--rw ipv6
+     |           |  +--rw config
+     |           |  |  +--rw source-address?                   oc-inet:ipv6-prefix
+     |           |  |  +--rw source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
+     |           |  |  +--rw source-flow-label?                oc-inet:ipv6-flow-label
+     |           |  |  +--rw destination-address?              oc-inet:ipv6-prefix
+     |           |  |  +--rw destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
+     |           |  |  +--rw destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  +--rw dscp?                             oc-inet:dscp
+     |           |  |  +--rw dscp-set*                         oc-inet:dscp
+     |           |  |  +--rw length?                           uint16
+     |           |  |  +--rw protocol?                         oc-pkt-match-types:ip-protocol-type
+     |           |  |  +--rw hop-limit?                        uint8
+     |           |  +--ro state
+     |           |  |  +--ro source-address?                   oc-inet:ipv6-prefix
+     |           |  |  +--ro source-address-prefix-set?        -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
+     |           |  |  +--ro source-flow-label?                oc-inet:ipv6-flow-label
+     |           |  |  +--ro destination-address?              oc-inet:ipv6-prefix
+     |           |  |  +--ro destination-address-prefix-set?   -> /oc-sets:defined-sets/ipv6-prefix-sets/ipv6-prefix-set/name
+     |           |  |  +--ro destination-flow-label?           oc-inet:ipv6-flow-label
+     |           |  |  +--ro dscp?                             oc-inet:dscp
+     |           |  |  +--ro dscp-set*                         oc-inet:dscp
+     |           |  |  +--ro length?                           uint16
+     |           |  |  +--ro protocol?                         oc-pkt-match-types:ip-protocol-type
+     |           |  |  +--ro hop-limit?                        uint8
+     |           |  +--rw icmpv6
+     |           |     +--rw config
+     |           |     |  +--rw type?   identityref
+     |           |     |  +--rw code?   identityref
+     |           |     +--ro state
+     |           |        +--ro type?   identityref
+     |           |        +--ro code?   identityref
+     |           +--rw transport
+     |           |  +--rw config
+     |           |  |  +--rw source-port?                  oc-pkt-match-types:port-num-range
+     |           |  |  +--rw source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
+     |           |  |  +--rw destination-port?             oc-pkt-match-types:port-num-range
+     |           |  |  +--rw destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
+     |           |  |  +--rw detail-mode?                  enumeration
+     |           |  |  +--rw explicit-detail-match-mode?   enumeration
+     |           |  |  +--rw explicit-tcp-flags*           identityref
+     |           |  |  +--rw builtin-detail?               enumeration
+     |           |  +--ro state
+     |           |     +--ro source-port?                  oc-pkt-match-types:port-num-range
+     |           |     +--ro source-port-set?              -> /oc-sets:defined-sets/port-sets/port-set/name
+     |           |     +--ro destination-port?             oc-pkt-match-types:port-num-range
+     |           |     +--ro destination-port-set?         -> /oc-sets:defined-sets/port-sets/port-set/name
+     |           |     +--ro detail-mode?                  enumeration
+     |           |     +--ro explicit-detail-match-mode?   enumeration
+     |           |     +--ro explicit-tcp-flags*           identityref
+     |           |     +--ro builtin-detail?               enumeration
+     |           +--rw input-interface
+     |           |  +--rw config
+     |           |  +--ro state
+     |           |  +--rw interface-ref
+     |           |     +--rw config
+     |           |     |  +--rw interface?      -> /oc-if:interfaces/interface/name
+     |           |     |  +--rw subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+     |           |     +--ro state
+     |           |        +--ro interface?      -> /oc-if:interfaces/interface/name
+     |           |        +--ro subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+     |           +--rw actions
+     |              +--rw config
+     |              |  +--rw forwarding-action    identityref
+     |              |  +--rw log-action?          identityref
+     |              +--ro state
+     |                 +--ro forwarding-action    identityref
+     |                 +--ro log-action?          identityref
+     +--rw interfaces
+        +--rw interface* [id]
+           +--rw id                  -> ../config/id
+           +--rw config
+           |  +--rw id?   oc-if:interface-id
+           +--ro state
+           |  +--ro id?   oc-if:interface-id
+           +--rw interface-ref
+           |  +--rw config
+           |  |  +--rw interface?      -> /oc-if:interfaces/interface/name
+           |  |  +--rw subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+           |  +--ro state
+           |     +--ro interface?      -> /oc-if:interfaces/interface/name
+           |     +--ro subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+           +--rw ingress-acl-sets
+           |  +--rw ingress-acl-set* [set-name type]
+           |     +--rw set-name       -> ../config/set-name
+           |     +--rw type           -> ../config/type
+           |     +--rw config
+           |     |  +--rw set-name?   -> ../../../../../../acl-sets/acl-set/config/name
+           |     |  +--rw type?       -> ../../../../../../acl-sets/acl-set[name=current()/../set-name]/config/type
+           |     +--ro state
+           |     |  +--ro set-name?   -> ../../../../../../acl-sets/acl-set/config/name
+           |     |  +--ro type?       -> ../../../../../../acl-sets/acl-set[name=current()/../set-name]/config/type
+           |     +--ro acl-entries
+           |        +--ro acl-entry* [sequence-id]
+           |           +--ro sequence-id    -> ../state/sequence-id
+           |           +--ro state
+           |              +--ro sequence-id?       -> /acl/acl-sets/acl-set[oc-acl:name=current()/../../../../set-name][oc-acl:type=current()/../../../../type]/oc-acl:acl-entries/acl-entry/sequence-id
+           |              +--ro matched-packets?   oc-yang:counter64
+           |              +--ro matched-octets?    oc-yang:counter64
+           +--rw egress-acl-sets
+              +--rw egress-acl-set* [set-name type]
+                 +--rw set-name       -> ../config/set-name
+                 +--rw type           -> ../config/type
+                 +--rw config
+                 |  +--rw set-name?   -> ../../../../../../acl-sets/acl-set/config/name
+                 |  +--rw type?       -> ../../../../../../acl-sets/acl-set[name=current()/../set-name]/config/type
+                 +--ro state
+                 |  +--ro set-name?   -> ../../../../../../acl-sets/acl-set/config/name
+                 |  +--ro type?       -> ../../../../../../acl-sets/acl-set[name=current()/../set-name]/config/type
+                 +--ro acl-entries
+                    +--ro acl-entry* [sequence-id]
+                       +--ro sequence-id    -> ../state/sequence-id
+                       +--ro state
+                          +--ro sequence-id?       -> /acl/acl-sets/acl-set[oc-acl:name=current()/../../../../set-name][oc-acl:type=current()/../../../../type]/oc-acl:acl-entries/acl-entry/sequence-id
+                          +--ro matched-packets?   oc-yang:counter64
+                          +--ro matched-octets?    oc-yang:counter64
+
+module: openconfig-defined-sets
+  +--rw defined-sets
+     +--rw ipv4-prefix-sets
+     |  +--rw ipv4-prefix-set* [name]
+     |     +--rw name      -> ../config/name
+     |     +--rw config
+     |     |  +--rw name?          string
+     |     |  +--rw description?   string
+     |     |  +--rw prefix*        oc-inet:ipv4-prefix
+     |     +--ro state
+     |        +--ro name?          string
+     |        +--ro description?   string
+     |        +--ro prefix*        oc-inet:ipv4-prefix
+     +--rw ipv6-prefix-sets
+     |  +--rw ipv6-prefix-set* [name]
+     |     +--rw name      -> ../config/name
+     |     +--rw config
+     |     |  +--rw name?          string
+     |     |  +--rw description?   string
+     |     |  +--rw prefix*        oc-inet:ipv6-prefix
+     |     +--ro state
+     |        +--ro name?          string
+     |        +--ro description?   string
+     |        +--ro prefix*        oc-inet:ipv6-prefix
+     +--rw port-sets
+        +--rw port-set* [name]
+           +--rw name      -> ../config/name
+           +--rw config
+           |  +--rw name?          string
+           |  +--rw description?   string
+           |  +--rw port*          oc-pkt-match-types:port-num-range
+           +--ro state
+              +--ro name?          string
+              +--ro description?   string
+              +--ro port*          oc-pkt-match-types:port-num-range
+
+module: openconfig-interfaces
+  +--rw interfaces
+     +--rw interface* [name]
+        +--rw name                  -> ../config/name
+        +--rw config
+        |  +--rw name?            string
+        |  +--rw type             identityref
+        |  +--rw mtu?             uint16
+        |  +--rw loopback-mode?   oc-opt-types:loopback-mode-type
+        |  +--rw description?     string
+        |  +--rw enabled?         boolean
+        +--ro state
+        |  +--ro name?            string
+        |  +--ro type             identityref
+        |  +--ro mtu?             uint16
+        |  +--ro loopback-mode?   oc-opt-types:loopback-mode-type
+        |  +--ro description?     string
+        |  +--ro enabled?         boolean
+        |  +--ro ifindex?         uint32
+        |  +--ro admin-status     enumeration
+        |  +--ro oper-status      enumeration
+        |  +--ro last-change?     oc-types:timeticks64
+        |  +--ro logical?         boolean
+        |  +--ro management?      boolean
+        |  +--ro cpu?             boolean
+        |  +--ro counters
+        |     +--ro in-octets?             oc-yang:counter64
+        |     +--ro in-pkts?               oc-yang:counter64
+        |     +--ro in-unicast-pkts?       oc-yang:counter64
+        |     +--ro in-broadcast-pkts?     oc-yang:counter64
+        |     +--ro in-multicast-pkts?     oc-yang:counter64
+        |     +--ro in-errors?             oc-yang:counter64
+        |     +--ro in-discards?           oc-yang:counter64
+        |     +--ro out-octets?            oc-yang:counter64
+        |     +--ro out-pkts?              oc-yang:counter64
+        |     +--ro out-unicast-pkts?      oc-yang:counter64
+        |     +--ro out-broadcast-pkts?    oc-yang:counter64
+        |     +--ro out-multicast-pkts?    oc-yang:counter64
+        |     +--ro out-discards?          oc-yang:counter64
+        |     +--ro out-errors?            oc-yang:counter64
+        |     +--ro last-clear?            oc-types:timeticks64
+        |     +--ro in-unknown-protos?     oc-yang:counter64
+        |     +--ro in-fcs-errors?         oc-yang:counter64
+        |     +--ro carrier-transitions?   oc-yang:counter64
+        |     +--ro resets?                oc-yang:counter64
+        +--rw hold-time
+        |  +--rw config
+        |  |  +--rw up?     uint32
+        |  |  +--rw down?   uint32
+        |  +--ro state
+        |     +--ro up?     uint32
+        |     +--ro down?   uint32
+        +--rw penalty-based-aied
+        |  +--rw config
+        |  |  +--rw max-suppress-time?    uint32
+        |  |  +--rw decay-half-life?      uint32
+        |  |  +--rw suppress-threshold?   uint32
+        |  |  +--rw reuse-threshold?      uint32
+        |  |  +--rw flap-penalty?         uint32
+        |  +--ro state
+        |     +--ro max-suppress-time?    uint32
+        |     +--ro decay-half-life?      uint32
+        |     +--ro suppress-threshold?   uint32
+        |     +--ro reuse-threshold?      uint32
+        |     +--ro flap-penalty?         uint32
+        +--rw subinterfaces
+           +--rw subinterface* [index]
+              +--rw index     -> ../config/index
+              +--rw config
+              |  +--rw index?         uint32
+              |  +--rw description?   string
+              |  +--rw enabled?       boolean
+              +--ro state
+                 +--ro index?          uint32
+                 +--ro description?    string
+                 +--ro enabled?        boolean
+                 +--ro name?           string
+                 +--ro ifindex?        uint32
+                 +--ro admin-status    enumeration
+                 +--ro oper-status     enumeration
+                 +--ro last-change?    oc-types:timeticks64
+                 +--ro logical?        boolean
+                 +--ro management?     boolean
+                 +--ro cpu?            boolean
+                 +--ro counters
+                    +--ro in-octets?             oc-yang:counter64
+                    +--ro in-pkts?               oc-yang:counter64
+                    +--ro in-unicast-pkts?       oc-yang:counter64
+                    +--ro in-broadcast-pkts?     oc-yang:counter64
+                    +--ro in-multicast-pkts?     oc-yang:counter64
+                    +--ro in-errors?             oc-yang:counter64
+                    +--ro in-discards?           oc-yang:counter64
+                    +--ro out-octets?            oc-yang:counter64
+                    +--ro out-pkts?              oc-yang:counter64
+                    +--ro out-unicast-pkts?      oc-yang:counter64
+                    +--ro out-broadcast-pkts?    oc-yang:counter64
+                    +--ro out-multicast-pkts?    oc-yang:counter64
+                    +--ro out-discards?          oc-yang:counter64
+                    +--ro out-errors?            oc-yang:counter64
+                    +--ro last-clear?            oc-types:timeticks64
+                    x--ro in-unknown-protos?     oc-yang:counter64
+                    x--ro in-fcs-errors?         oc-yang:counter64
+                    x--ro carrier-transitions?   oc-yang:counter64
+
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig-components.tree b/src/tests/tools/firewall_agent/docs/yang/openconfig-components.tree
new file mode 100644
index 0000000000000000000000000000000000000000..885a0947ebdf00744e603cff61451c18b76315b6
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig-components.tree
@@ -0,0 +1,188 @@
+module: openconfig-platform
+  +--rw components
+     +--rw component* [name]
+        +--rw name                  -> ../config/name
+        +--rw config
+        |  +--rw name?   string
+        +--ro state
+        |  +--ro name?                     string
+        |  +--ro type?                     union
+        |  +--ro id?                       string
+        |  +--ro location?                 string
+        |  +--ro description?              string
+        |  +--ro mfg-name?                 string
+        |  +--ro mfg-date?                 oc-yang:date
+        |  +--ro hardware-version?         string
+        |  +--ro firmware-version?         string
+        |  +--ro software-version?         string
+        |  +--ro serial-no?                string
+        |  +--ro part-no?                  string
+        |  +--ro model-name?               string
+        |  +--ro clei-code?                string
+        |  +--ro removable?                boolean
+        |  +--ro oper-status?              identityref
+        |  +--ro empty?                    boolean
+        |  +--ro parent?                   -> ../../../component/config/name
+        |  +--ro redundant-role?           oc-platform-types:component-redundant-role
+        |  +--ro last-switchover-reason
+        |  |  +--ro trigger?   component-redundant-role-switchover-reason-trigger
+        |  |  +--ro details?   string
+        |  +--ro last-switchover-time?     oc-types:timeticks64
+        |  +--ro last-reboot-reason?       identityref
+        |  +--ro last-reboot-time?         oc-types:timeticks64
+        |  +--ro switchover-ready?         boolean
+        |  +--ro base-mac-address?         oc-yang:mac-address
+        |  +--ro temperature
+        |  |  +--ro instant?           decimal64
+        |  |  +--ro avg?               decimal64
+        |  |  +--ro min?               decimal64
+        |  |  +--ro max?               decimal64
+        |  |  +--ro interval?          oc-types:stat-interval
+        |  |  +--ro min-time?          oc-types:timeticks64
+        |  |  +--ro max-time?          oc-types:timeticks64
+        |  |  +--ro alarm-status?      boolean
+        |  |  +--ro alarm-threshold?   uint32
+        |  |  +--ro alarm-severity?    identityref
+        |  +--ro memory
+        |  |  +--ro available?   uint64
+        |  |  +--ro utilized?    uint64
+        |  +--ro allocated-power?          uint32
+        |  +--ro used-power?               uint32
+        |  +--ro pcie
+        |     +--ro fatal-errors
+        |     |  +--ro total-errors?                   oc-yang:counter64
+        |     |  +--ro undefined-errors?               oc-yang:counter64
+        |     |  +--ro data-link-errors?               oc-yang:counter64
+        |     |  +--ro surprise-down-errors?           oc-yang:counter64
+        |     |  +--ro poisoned-tlp-errors?            oc-yang:counter64
+        |     |  +--ro flow-control-protocol-errors?   oc-yang:counter64
+        |     |  +--ro completion-timeout-errors?      oc-yang:counter64
+        |     |  +--ro completion-abort-errors?        oc-yang:counter64
+        |     |  +--ro unexpected-completion-errors?   oc-yang:counter64
+        |     |  +--ro receiver-overflow-errors?       oc-yang:counter64
+        |     |  +--ro malformed-tlp-errors?           oc-yang:counter64
+        |     |  +--ro ecrc-errors?                    oc-yang:counter64
+        |     |  +--ro unsupported-request-errors?     oc-yang:counter64
+        |     |  +--ro acs-violation-errors?           oc-yang:counter64
+        |     |  +--ro internal-errors?                oc-yang:counter64
+        |     |  +--ro blocked-tlp-errors?             oc-yang:counter64
+        |     |  +--ro atomic-op-blocked-errors?       oc-yang:counter64
+        |     |  +--ro tlp-prefix-blocked-errors?      oc-yang:counter64
+        |     +--ro non-fatal-errors
+        |     |  +--ro total-errors?                   oc-yang:counter64
+        |     |  +--ro undefined-errors?               oc-yang:counter64
+        |     |  +--ro data-link-errors?               oc-yang:counter64
+        |     |  +--ro surprise-down-errors?           oc-yang:counter64
+        |     |  +--ro poisoned-tlp-errors?            oc-yang:counter64
+        |     |  +--ro flow-control-protocol-errors?   oc-yang:counter64
+        |     |  +--ro completion-timeout-errors?      oc-yang:counter64
+        |     |  +--ro completion-abort-errors?        oc-yang:counter64
+        |     |  +--ro unexpected-completion-errors?   oc-yang:counter64
+        |     |  +--ro receiver-overflow-errors?       oc-yang:counter64
+        |     |  +--ro malformed-tlp-errors?           oc-yang:counter64
+        |     |  +--ro ecrc-errors?                    oc-yang:counter64
+        |     |  +--ro unsupported-request-errors?     oc-yang:counter64
+        |     |  +--ro acs-violation-errors?           oc-yang:counter64
+        |     |  +--ro internal-errors?                oc-yang:counter64
+        |     |  +--ro blocked-tlp-errors?             oc-yang:counter64
+        |     |  +--ro atomic-op-blocked-errors?       oc-yang:counter64
+        |     |  +--ro tlp-prefix-blocked-errors?      oc-yang:counter64
+        |     +--ro correctable-errors
+        |        +--ro total-errors?                oc-yang:counter64
+        |        +--ro receiver-errors?             oc-yang:counter64
+        |        +--ro bad-tlp-errors?              oc-yang:counter64
+        |        +--ro bad-dllp-errors?             oc-yang:counter64
+        |        +--ro relay-rollover-errors?       oc-yang:counter64
+        |        +--ro replay-timeout-errors?       oc-yang:counter64
+        |        +--ro advisory-non-fatal-errors?   oc-yang:counter64
+        |        +--ro internal-errors?             oc-yang:counter64
+        |        +--ro hdr-log-overflow-errors?     oc-yang:counter64
+        +--rw properties
+        |  +--rw property* [name]
+        |     +--rw name      -> ../config/name
+        |     +--rw config
+        |     |  +--rw name?    string
+        |     |  +--rw value?   union
+        |     +--ro state
+        |        +--ro name?           string
+        |        +--ro value?          union
+        |        +--ro configurable?   boolean
+        +--rw subcomponents
+        |  +--rw subcomponent* [name]
+        |     +--rw name      -> ../config/name
+        |     +--rw config
+        |     |  +--rw name?   -> ../../../../../component/config/name
+        |     +--ro state
+        |        +--ro name?   -> ../../../../../component/config/name
+        +--rw chassis
+        |  +--rw config
+        |  +--ro state
+        |  +--rw utilization
+        |     +--rw resources
+        |        +--rw resource* [name]
+        |           +--rw name      -> ../config/name
+        |           +--rw config
+        |           |  +--rw name?                         string
+        |           |  +--rw used-threshold-upper?         oc-types:percentage
+        |           |  +--rw used-threshold-upper-clear?   oc-types:percentage
+        |           +--ro state
+        |              +--ro name?                            string
+        |              +--ro used-threshold-upper?            oc-types:percentage
+        |              +--ro used-threshold-upper-clear?      oc-types:percentage
+        |              +--ro used?                            uint64
+        |              +--ro committed?                       uint64
+        |              +--ro free?                            uint64
+        |              +--ro max-limit?                       uint64
+        |              +--ro high-watermark?                  uint64
+        |              +--ro last-high-watermark?             oc-types:timeticks64
+        |              +--ro used-threshold-upper-exceeded?   boolean
+        +--rw port
+        |  +--rw config
+        |  +--ro state
+        +--rw power-supply
+        |  +--rw config
+        |  +--ro state
+        +--rw fan
+        |  +--rw config
+        |  +--ro state
+        +--rw fabric
+        |  +--rw config
+        |  +--ro state
+        +--rw storage
+        |  +--rw config
+        |  +--ro state
+        +--rw cpu
+        |  +--rw config
+        |  +--ro state
+        +--rw integrated-circuit
+        |  +--rw config
+        |  +--ro state
+        |  +--rw utilization
+        |     +--rw resources
+        |        +--rw resource* [name]
+        |           +--rw name      -> ../config/name
+        |           +--rw config
+        |           |  +--rw name?                         string
+        |           |  +--rw used-threshold-upper?         oc-types:percentage
+        |           |  +--rw used-threshold-upper-clear?   oc-types:percentage
+        |           +--ro state
+        |              +--ro name?                            string
+        |              +--ro used-threshold-upper?            oc-types:percentage
+        |              +--ro used-threshold-upper-clear?      oc-types:percentage
+        |              +--ro used?                            uint64
+        |              +--ro committed?                       uint64
+        |              +--ro free?                            uint64
+        |              +--ro max-limit?                       uint64
+        |              +--ro high-watermark?                  uint64
+        |              +--ro last-high-watermark?             oc-types:timeticks64
+        |              +--ro used-threshold-upper-exceeded?   boolean
+        +--rw backplane
+        |  +--rw config
+        |  +--ro state
+        +--rw software-module
+        |  +--rw config
+        |  +--ro state
+        +--rw controller-card
+           +--rw config
+           +--ro state
+
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig-interfaces.tree b/src/tests/tools/firewall_agent/docs/yang/openconfig-interfaces.tree
new file mode 100644
index 0000000000000000000000000000000000000000..0d780d63c23a47b09c0f83104ced748edbb81a72
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig-interfaces.tree
@@ -0,0 +1,716 @@
+module: openconfig-interfaces
+  +--rw interfaces
+     +--rw interface* [name]
+        +--rw name                   -> ../config/name
+        +--rw config
+        |  +--rw name?            string
+        |  +--rw type             identityref
+        |  +--rw mtu?             uint16
+        |  +--rw loopback-mode?   oc-opt-types:loopback-mode-type
+        |  +--rw description?     string
+        |  +--rw enabled?         boolean
+        |  +--rw oc-vlan:tpid?    identityref
+        +--ro state
+        |  +--ro name?            string
+        |  +--ro type             identityref
+        |  +--ro mtu?             uint16
+        |  +--ro loopback-mode?   oc-opt-types:loopback-mode-type
+        |  +--ro description?     string
+        |  +--ro enabled?         boolean
+        |  +--ro ifindex?         uint32
+        |  +--ro admin-status     enumeration
+        |  +--ro oper-status      enumeration
+        |  +--ro last-change?     oc-types:timeticks64
+        |  +--ro logical?         boolean
+        |  +--ro management?      boolean
+        |  +--ro cpu?             boolean
+        |  +--ro counters
+        |  |  +--ro in-octets?             oc-yang:counter64
+        |  |  +--ro in-pkts?               oc-yang:counter64
+        |  |  +--ro in-unicast-pkts?       oc-yang:counter64
+        |  |  +--ro in-broadcast-pkts?     oc-yang:counter64
+        |  |  +--ro in-multicast-pkts?     oc-yang:counter64
+        |  |  +--ro in-errors?             oc-yang:counter64
+        |  |  +--ro in-discards?           oc-yang:counter64
+        |  |  +--ro out-octets?            oc-yang:counter64
+        |  |  +--ro out-pkts?              oc-yang:counter64
+        |  |  +--ro out-unicast-pkts?      oc-yang:counter64
+        |  |  +--ro out-broadcast-pkts?    oc-yang:counter64
+        |  |  +--ro out-multicast-pkts?    oc-yang:counter64
+        |  |  +--ro out-discards?          oc-yang:counter64
+        |  |  +--ro out-errors?            oc-yang:counter64
+        |  |  +--ro last-clear?            oc-types:timeticks64
+        |  |  +--ro in-unknown-protos?     oc-yang:counter64
+        |  |  +--ro in-fcs-errors?         oc-yang:counter64
+        |  |  +--ro carrier-transitions?   oc-yang:counter64
+        |  |  +--ro resets?                oc-yang:counter64
+        |  +--ro oc-vlan:tpid?    identityref
+        +--rw hold-time
+        |  +--rw config
+        |  |  +--rw up?     uint32
+        |  |  +--rw down?   uint32
+        |  +--ro state
+        |     +--ro up?     uint32
+        |     +--ro down?   uint32
+        +--rw penalty-based-aied
+        |  +--rw config
+        |  |  +--rw max-suppress-time?    uint32
+        |  |  +--rw decay-half-life?      uint32
+        |  |  +--rw suppress-threshold?   uint32
+        |  |  +--rw reuse-threshold?      uint32
+        |  |  +--rw flap-penalty?         uint32
+        |  +--ro state
+        |     +--ro max-suppress-time?    uint32
+        |     +--ro decay-half-life?      uint32
+        |     +--ro suppress-threshold?   uint32
+        |     +--ro reuse-threshold?      uint32
+        |     +--ro flap-penalty?         uint32
+        +--rw subinterfaces
+        |  +--rw subinterface* [index]
+        |     +--rw index           -> ../config/index
+        |     +--rw config
+        |     |  +--rw index?         uint32
+        |     |  +--rw description?   string
+        |     |  +--rw enabled?       boolean
+        |     +--ro state
+        |     |  +--ro index?          uint32
+        |     |  +--ro description?    string
+        |     |  +--ro enabled?        boolean
+        |     |  +--ro name?           string
+        |     |  +--ro ifindex?        uint32
+        |     |  +--ro admin-status    enumeration
+        |     |  +--ro oper-status     enumeration
+        |     |  +--ro last-change?    oc-types:timeticks64
+        |     |  +--ro logical?        boolean
+        |     |  +--ro management?     boolean
+        |     |  +--ro cpu?            boolean
+        |     |  +--ro counters
+        |     |     +--ro in-octets?             oc-yang:counter64
+        |     |     +--ro in-pkts?               oc-yang:counter64
+        |     |     +--ro in-unicast-pkts?       oc-yang:counter64
+        |     |     +--ro in-broadcast-pkts?     oc-yang:counter64
+        |     |     +--ro in-multicast-pkts?     oc-yang:counter64
+        |     |     +--ro in-errors?             oc-yang:counter64
+        |     |     +--ro in-discards?           oc-yang:counter64
+        |     |     +--ro out-octets?            oc-yang:counter64
+        |     |     +--ro out-pkts?              oc-yang:counter64
+        |     |     +--ro out-unicast-pkts?      oc-yang:counter64
+        |     |     +--ro out-broadcast-pkts?    oc-yang:counter64
+        |     |     +--ro out-multicast-pkts?    oc-yang:counter64
+        |     |     +--ro out-discards?          oc-yang:counter64
+        |     |     +--ro out-errors?            oc-yang:counter64
+        |     |     +--ro last-clear?            oc-types:timeticks64
+        |     |     x--ro in-unknown-protos?     oc-yang:counter64
+        |     |     x--ro in-fcs-errors?         oc-yang:counter64
+        |     |     x--ro carrier-transitions?   oc-yang:counter64
+        |     +--rw oc-vlan:vlan
+        |     |  +--rw oc-vlan:config
+        |     |  |  x--rw oc-vlan:vlan-id?   union
+        |     |  +--ro oc-vlan:state
+        |     |  |  x--ro oc-vlan:vlan-id?   union
+        |     |  +--rw oc-vlan:match
+        |     |  |  +--rw oc-vlan:single-tagged
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:single-tagged-list
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:single-tagged-range
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:inner-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:inner-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged-inner-list
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:inner-vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:inner-vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged-outer-list
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:inner-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:inner-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-vlan-ids*   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged-inner-range
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:inner-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:inner-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-vlan-id*        oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:inner-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:inner-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-vlan-id*        oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged-outer-range
+        |     |  |  |  +--rw oc-vlan:config
+        |     |  |  |  |  +--rw oc-vlan:inner-vlan-id?        oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |  |  +--rw oc-vlan:outer-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  |  +--ro oc-vlan:state
+        |     |  |  |     +--ro oc-vlan:inner-vlan-id?        oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |  |     +--ro oc-vlan:outer-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |  +--rw oc-vlan:double-tagged-inner-outer-range
+        |     |  |     +--rw oc-vlan:config
+        |     |  |     |  +--rw oc-vlan:inner-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |     |  +--rw oc-vlan:inner-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |     |  +--rw oc-vlan:outer-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |     |  +--rw oc-vlan:outer-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |     +--ro oc-vlan:state
+        |     |  |        +--ro oc-vlan:inner-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |        +--ro oc-vlan:inner-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  |        +--ro oc-vlan:outer-low-vlan-id?    oc-vlan-types:vlan-id
+        |     |  |        +--ro oc-vlan:outer-high-vlan-id?   oc-vlan-types:vlan-id
+        |     |  +--rw oc-vlan:ingress-mapping
+        |     |  |  +--rw oc-vlan:config
+        |     |  |  |  +--rw oc-vlan:vlan-stack-action?   oc-vlan-types:vlan-stack-action
+        |     |  |  |  +--rw oc-vlan:vlan-id?             oc-vlan-types:vlan-id
+        |     |  |  |  +--rw oc-vlan:tpid?                identityref
+        |     |  |  +--ro oc-vlan:state
+        |     |  |     +--ro oc-vlan:vlan-stack-action?   oc-vlan-types:vlan-stack-action
+        |     |  |     +--ro oc-vlan:vlan-id?             oc-vlan-types:vlan-id
+        |     |  |     +--ro oc-vlan:tpid?                identityref
+        |     |  +--rw oc-vlan:egress-mapping
+        |     |     +--rw oc-vlan:config
+        |     |     |  +--rw oc-vlan:vlan-stack-action?   oc-vlan-types:vlan-stack-action
+        |     |     |  +--rw oc-vlan:vlan-id?             oc-vlan-types:vlan-id
+        |     |     |  +--rw oc-vlan:tpid?                identityref
+        |     |     +--ro oc-vlan:state
+        |     |        +--ro oc-vlan:vlan-stack-action?   oc-vlan-types:vlan-stack-action
+        |     |        +--ro oc-vlan:vlan-id?             oc-vlan-types:vlan-id
+        |     |        +--ro oc-vlan:tpid?                identityref
+        |     +--rw oc-ip:ipv4
+        |     |  +--rw oc-ip:addresses
+        |     |  |  +--rw oc-ip:address* [ip]
+        |     |  |     +--rw oc-ip:ip        -> ../config/ip
+        |     |  |     +--rw oc-ip:config
+        |     |  |     |  +--rw oc-ip:ip?              oc-inet:ipv4-address
+        |     |  |     |  +--rw oc-ip:prefix-length?   uint8
+        |     |  |     |  +--rw oc-ip:type?            ipv4-address-type
+        |     |  |     +--ro oc-ip:state
+        |     |  |     |  +--ro oc-ip:ip?              oc-inet:ipv4-address
+        |     |  |     |  +--ro oc-ip:prefix-length?   uint8
+        |     |  |     |  +--ro oc-ip:type?            ipv4-address-type
+        |     |  |     |  +--ro oc-ip:origin?          ip-address-origin
+        |     |  |     +--rw oc-ip:vrrp
+        |     |  |        +--rw oc-ip:vrrp-group* [virtual-router-id]
+        |     |  |           +--rw oc-ip:virtual-router-id     -> ../config/virtual-router-id
+        |     |  |           +--rw oc-ip:config
+        |     |  |           |  +--rw oc-ip:virtual-router-id?        uint8
+        |     |  |           |  +--rw oc-ip:virtual-address*          oc-inet:ip-address
+        |     |  |           |  +--rw oc-ip:priority?                 uint8
+        |     |  |           |  +--rw oc-ip:preempt?                  boolean
+        |     |  |           |  +--rw oc-ip:preempt-delay?            uint16
+        |     |  |           |  +--rw oc-ip:accept-mode?              boolean
+        |     |  |           |  +--rw oc-ip:advertisement-interval?   uint16
+        |     |  |           +--ro oc-ip:state
+        |     |  |           |  +--ro oc-ip:virtual-router-id?        uint8
+        |     |  |           |  +--ro oc-ip:virtual-address*          oc-inet:ip-address
+        |     |  |           |  +--ro oc-ip:priority?                 uint8
+        |     |  |           |  +--ro oc-ip:preempt?                  boolean
+        |     |  |           |  +--ro oc-ip:preempt-delay?            uint16
+        |     |  |           |  +--ro oc-ip:accept-mode?              boolean
+        |     |  |           |  +--ro oc-ip:advertisement-interval?   uint16
+        |     |  |           |  +--ro oc-ip:current-priority?         uint8
+        |     |  |           +--rw oc-ip:interface-tracking
+        |     |  |              +--rw oc-ip:config
+        |     |  |              |  +--rw oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+        |     |  |              |  +--rw oc-ip:priority-decrement?   uint8
+        |     |  |              +--ro oc-ip:state
+        |     |  |                 +--ro oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+        |     |  |                 +--ro oc-ip:priority-decrement?   uint8
+        |     |  +--rw oc-ip:proxy-arp
+        |     |  |  +--rw oc-ip:config
+        |     |  |  |  +--rw oc-ip:mode?   enumeration
+        |     |  |  +--ro oc-ip:state
+        |     |  |     +--ro oc-ip:mode?   enumeration
+        |     |  +--rw oc-ip:neighbors
+        |     |  |  +--rw oc-ip:neighbor* [ip]
+        |     |  |     +--rw oc-ip:ip        -> ../config/ip
+        |     |  |     +--rw oc-ip:config
+        |     |  |     |  +--rw oc-ip:ip?                   oc-inet:ipv4-address
+        |     |  |     |  +--rw oc-ip:link-layer-address    oc-yang:phys-address
+        |     |  |     +--ro oc-ip:state
+        |     |  |        +--ro oc-ip:ip?                   oc-inet:ipv4-address
+        |     |  |        +--ro oc-ip:link-layer-address    oc-yang:phys-address
+        |     |  |        +--ro oc-ip:origin?               neighbor-origin
+        |     |  +--rw oc-ip:unnumbered
+        |     |  |  +--rw oc-ip:config
+        |     |  |  |  +--rw oc-ip:enabled?   boolean
+        |     |  |  +--ro oc-ip:state
+        |     |  |  |  +--ro oc-ip:enabled?   boolean
+        |     |  |  +--rw oc-ip:interface-ref
+        |     |  |     +--rw oc-ip:config
+        |     |  |     |  +--rw oc-ip:interface?      -> /oc-if:interfaces/interface/name
+        |     |  |     |  +--rw oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |     |  |     +--ro oc-ip:state
+        |     |  |        +--ro oc-ip:interface?      -> /oc-if:interfaces/interface/name
+        |     |  |        +--ro oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |     |  +--rw oc-ip:config
+        |     |  |  +--rw oc-ip:enabled?       boolean
+        |     |  |  +--rw oc-ip:mtu?           uint16
+        |     |  |  +--rw oc-ip:dhcp-client?   boolean
+        |     |  +--ro oc-ip:state
+        |     |     +--ro oc-ip:enabled?       boolean
+        |     |     +--ro oc-ip:mtu?           uint16
+        |     |     +--ro oc-ip:dhcp-client?   boolean
+        |     |     +--ro oc-ip:counters
+        |     |        +--ro oc-ip:in-pkts?                oc-yang:counter64
+        |     |        +--ro oc-ip:in-octets?              oc-yang:counter64
+        |     |        +--ro oc-ip:in-multicast-pkts?      oc-yang:counter64
+        |     |        +--ro oc-ip:in-multicast-octets?    oc-yang:counter64
+        |     |        +--ro oc-ip:in-error-pkts?          oc-yang:counter64
+        |     |        +--ro oc-ip:in-forwarded-pkts?      oc-yang:counter64
+        |     |        +--ro oc-ip:in-forwarded-octets?    oc-yang:counter64
+        |     |        +--ro oc-ip:in-discarded-pkts?      oc-yang:counter64
+        |     |        +--ro oc-ip:out-pkts?               oc-yang:counter64
+        |     |        +--ro oc-ip:out-octets?             oc-yang:counter64
+        |     |        +--ro oc-ip:out-multicast-pkts?     oc-yang:counter64
+        |     |        +--ro oc-ip:out-multicast-octets?   oc-yang:counter64
+        |     |        +--ro oc-ip:out-error-pkts?         oc-yang:counter64
+        |     |        +--ro oc-ip:out-forwarded-pkts?     oc-yang:counter64
+        |     |        +--ro oc-ip:out-forwarded-octets?   oc-yang:counter64
+        |     |        +--ro oc-ip:out-discarded-pkts?     oc-yang:counter64
+        |     +--rw oc-ip:ipv6
+        |        +--rw oc-ip:addresses
+        |        |  +--rw oc-ip:address* [ip]
+        |        |     +--rw oc-ip:ip        -> ../config/ip
+        |        |     +--rw oc-ip:config
+        |        |     |  +--rw oc-ip:ip?              oc-inet:ipv6-address
+        |        |     |  +--rw oc-ip:prefix-length    uint8
+        |        |     |  +--rw oc-ip:type?            oc-inet:ipv6-address-type
+        |        |     +--ro oc-ip:state
+        |        |     |  +--ro oc-ip:ip?              oc-inet:ipv6-address
+        |        |     |  +--ro oc-ip:prefix-length    uint8
+        |        |     |  +--ro oc-ip:type?            oc-inet:ipv6-address-type
+        |        |     |  +--ro oc-ip:origin?          ip-address-origin
+        |        |     |  +--ro oc-ip:status?          enumeration
+        |        |     +--rw oc-ip:vrrp
+        |        |        +--rw oc-ip:vrrp-group* [virtual-router-id]
+        |        |           +--rw oc-ip:virtual-router-id     -> ../config/virtual-router-id
+        |        |           +--rw oc-ip:config
+        |        |           |  +--rw oc-ip:virtual-router-id?        uint8
+        |        |           |  +--rw oc-ip:virtual-address*          oc-inet:ip-address
+        |        |           |  +--rw oc-ip:priority?                 uint8
+        |        |           |  +--rw oc-ip:preempt?                  boolean
+        |        |           |  +--rw oc-ip:preempt-delay?            uint16
+        |        |           |  +--rw oc-ip:accept-mode?              boolean
+        |        |           |  +--rw oc-ip:advertisement-interval?   uint16
+        |        |           |  +--rw oc-ip:virtual-link-local?       oc-inet:ip-address
+        |        |           +--ro oc-ip:state
+        |        |           |  +--ro oc-ip:virtual-router-id?        uint8
+        |        |           |  +--ro oc-ip:virtual-address*          oc-inet:ip-address
+        |        |           |  +--ro oc-ip:priority?                 uint8
+        |        |           |  +--ro oc-ip:preempt?                  boolean
+        |        |           |  +--ro oc-ip:preempt-delay?            uint16
+        |        |           |  +--ro oc-ip:accept-mode?              boolean
+        |        |           |  +--ro oc-ip:advertisement-interval?   uint16
+        |        |           |  +--ro oc-ip:current-priority?         uint8
+        |        |           |  +--ro oc-ip:virtual-link-local?       oc-inet:ip-address
+        |        |           +--rw oc-ip:interface-tracking
+        |        |              +--rw oc-ip:config
+        |        |              |  +--rw oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+        |        |              |  +--rw oc-ip:priority-decrement?   uint8
+        |        |              +--ro oc-ip:state
+        |        |                 +--ro oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+        |        |                 +--ro oc-ip:priority-decrement?   uint8
+        |        +--rw oc-ip:router-advertisement
+        |        |  +--rw oc-ip:config
+        |        |  |  +--rw oc-ip:enable?         boolean
+        |        |  |  +--rw oc-ip:interval?       uint32
+        |        |  |  +--rw oc-ip:lifetime?       uint32
+        |        |  |  x--rw oc-ip:suppress?       boolean
+        |        |  |  +--rw oc-ip:mode?           enumeration
+        |        |  |  +--rw oc-ip:managed?        boolean
+        |        |  |  +--rw oc-ip:other-config?   boolean
+        |        |  +--ro oc-ip:state
+        |        |  |  +--ro oc-ip:enable?         boolean
+        |        |  |  +--ro oc-ip:interval?       uint32
+        |        |  |  +--ro oc-ip:lifetime?       uint32
+        |        |  |  x--ro oc-ip:suppress?       boolean
+        |        |  |  +--ro oc-ip:mode?           enumeration
+        |        |  |  +--ro oc-ip:managed?        boolean
+        |        |  |  +--ro oc-ip:other-config?   boolean
+        |        |  +--rw oc-ip:prefixes
+        |        |     +--rw oc-ip:prefix* [prefix]
+        |        |        +--rw oc-ip:prefix    -> ../config/prefix
+        |        |        +--rw oc-ip:config
+        |        |        |  +--rw oc-ip:prefix?                      oc-inet:ipv6-prefix
+        |        |        |  +--rw oc-ip:valid-lifetime?              uint32
+        |        |        |  +--rw oc-ip:preferred-lifetime?          uint32
+        |        |        |  +--rw oc-ip:disable-advertisement?       boolean
+        |        |        |  +--rw oc-ip:disable-autoconfiguration?   boolean
+        |        |        |  +--rw oc-ip:enable-onlink?               boolean
+        |        |        +--ro oc-ip:state
+        |        |           +--ro oc-ip:prefix?                      oc-inet:ipv6-prefix
+        |        |           +--ro oc-ip:valid-lifetime?              uint32
+        |        |           +--ro oc-ip:preferred-lifetime?          uint32
+        |        |           +--ro oc-ip:disable-advertisement?       boolean
+        |        |           +--ro oc-ip:disable-autoconfiguration?   boolean
+        |        |           +--ro oc-ip:enable-onlink?               boolean
+        |        +--rw oc-ip:neighbors
+        |        |  +--rw oc-ip:neighbor* [ip]
+        |        |     +--rw oc-ip:ip        -> ../config/ip
+        |        |     +--rw oc-ip:config
+        |        |     |  +--rw oc-ip:ip?                   oc-inet:ipv6-address
+        |        |     |  +--rw oc-ip:link-layer-address    oc-yang:phys-address
+        |        |     +--ro oc-ip:state
+        |        |        +--ro oc-ip:ip?                   oc-inet:ipv6-address
+        |        |        +--ro oc-ip:link-layer-address    oc-yang:phys-address
+        |        |        +--ro oc-ip:origin?               neighbor-origin
+        |        |        +--ro oc-ip:is-router?            boolean
+        |        |        +--ro oc-ip:neighbor-state?       enumeration
+        |        +--rw oc-ip:unnumbered
+        |        |  +--rw oc-ip:config
+        |        |  |  +--rw oc-ip:enabled?   boolean
+        |        |  +--ro oc-ip:state
+        |        |  |  +--ro oc-ip:enabled?   boolean
+        |        |  +--rw oc-ip:interface-ref
+        |        |     +--rw oc-ip:config
+        |        |     |  +--rw oc-ip:interface?      -> /oc-if:interfaces/interface/name
+        |        |     |  +--rw oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |        |     +--ro oc-ip:state
+        |        |        +--ro oc-ip:interface?      -> /oc-if:interfaces/interface/name
+        |        |        +--ro oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |        +--rw oc-ip:config
+        |        |  +--rw oc-ip:enabled?                     boolean
+        |        |  +--rw oc-ip:mtu?                         uint32
+        |        |  +--rw oc-ip:dup-addr-detect-transmits?   uint32
+        |        |  +--rw oc-ip:dhcp-client?                 boolean
+        |        +--ro oc-ip:state
+        |           +--ro oc-ip:enabled?                     boolean
+        |           +--ro oc-ip:mtu?                         uint32
+        |           +--ro oc-ip:dup-addr-detect-transmits?   uint32
+        |           +--ro oc-ip:dhcp-client?                 boolean
+        |           +--ro oc-ip:counters
+        |              +--ro oc-ip:in-pkts?                oc-yang:counter64
+        |              +--ro oc-ip:in-octets?              oc-yang:counter64
+        |              +--ro oc-ip:in-multicast-pkts?      oc-yang:counter64
+        |              +--ro oc-ip:in-multicast-octets?    oc-yang:counter64
+        |              +--ro oc-ip:in-error-pkts?          oc-yang:counter64
+        |              +--ro oc-ip:in-forwarded-pkts?      oc-yang:counter64
+        |              +--ro oc-ip:in-forwarded-octets?    oc-yang:counter64
+        |              +--ro oc-ip:in-discarded-pkts?      oc-yang:counter64
+        |              +--ro oc-ip:out-pkts?               oc-yang:counter64
+        |              +--ro oc-ip:out-octets?             oc-yang:counter64
+        |              +--ro oc-ip:out-multicast-pkts?     oc-yang:counter64
+        |              +--ro oc-ip:out-multicast-octets?   oc-yang:counter64
+        |              +--ro oc-ip:out-error-pkts?         oc-yang:counter64
+        |              +--ro oc-ip:out-forwarded-pkts?     oc-yang:counter64
+        |              +--ro oc-ip:out-forwarded-octets?   oc-yang:counter64
+        |              +--ro oc-ip:out-discarded-pkts?     oc-yang:counter64
+        +--rw oc-eth:ethernet
+        |  +--rw oc-eth:config
+        |  |  +--rw oc-eth:mac-address?                oc-yang:mac-address
+        |  |  +--rw oc-eth:auto-negotiate?             boolean
+        |  |  +--rw oc-eth:standalone-link-training?   boolean
+        |  |  +--rw oc-eth:duplex-mode?                enumeration
+        |  |  +--rw oc-eth:port-speed?                 identityref
+        |  |  +--rw oc-eth:enable-flow-control?        boolean
+        |  |  +--rw oc-eth:fec-mode?                   identityref
+        |  |  +--rw oc-lag:aggregate-id?               -> /oc-if:interfaces/interface/name
+        |  +--ro oc-eth:state
+        |  |  +--ro oc-eth:mac-address?                oc-yang:mac-address
+        |  |  +--ro oc-eth:auto-negotiate?             boolean
+        |  |  +--ro oc-eth:standalone-link-training?   boolean
+        |  |  +--ro oc-eth:duplex-mode?                enumeration
+        |  |  +--ro oc-eth:port-speed?                 identityref
+        |  |  +--ro oc-eth:enable-flow-control?        boolean
+        |  |  +--ro oc-eth:fec-mode?                   identityref
+        |  |  +--ro oc-eth:hw-mac-address?             oc-yang:mac-address
+        |  |  +--ro oc-eth:negotiated-duplex-mode?     enumeration
+        |  |  +--ro oc-eth:negotiated-port-speed?      identityref
+        |  |  +--ro oc-eth:counters
+        |  |  |  +--ro oc-eth:in-mac-control-frames?    oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-mac-pause-frames?      oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-oversize-frames?       oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-undersize-frames?      oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-jabber-frames?         oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-fragment-frames?       oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-8021q-frames?          oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-crc-errors?            oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-block-errors?          oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-carrier-errors?        oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-interrupted-tx?        oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-late-collision?        oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-mac-errors-rx?         oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-single-collision?      oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-symbol-error?          oc-yang:counter64
+        |  |  |  +--ro oc-eth:in-maxsize-exceeded?      oc-yang:counter64
+        |  |  |  +--ro oc-eth:out-mac-control-frames?   oc-yang:counter64
+        |  |  |  +--ro oc-eth:out-mac-pause-frames?     oc-yang:counter64
+        |  |  |  +--ro oc-eth:out-8021q-frames?         oc-yang:counter64
+        |  |  |  +--ro oc-eth:out-mac-errors-tx?        oc-yang:counter64
+        |  |  +--ro oc-lag:aggregate-id?               -> /oc-if:interfaces/interface/name
+        |  +--rw oc-vlan:switched-vlan
+        |     +--rw oc-vlan:config
+        |     |  +--rw oc-vlan:interface-mode?   oc-vlan-types:vlan-mode-type
+        |     |  +--rw oc-vlan:native-vlan?      oc-vlan-types:vlan-id
+        |     |  +--rw oc-vlan:access-vlan?      oc-vlan-types:vlan-id
+        |     |  +--rw oc-vlan:trunk-vlans*      union
+        |     +--ro oc-vlan:state
+        |        +--ro oc-vlan:interface-mode?   oc-vlan-types:vlan-mode-type
+        |        +--ro oc-vlan:native-vlan?      oc-vlan-types:vlan-id
+        |        +--ro oc-vlan:access-vlan?      oc-vlan-types:vlan-id
+        |        +--ro oc-vlan:trunk-vlans*      union
+        +--rw oc-lag:aggregation
+        |  +--rw oc-lag:config
+        |  |  +--rw oc-lag:lag-type?    aggregation-type
+        |  |  +--rw oc-lag:min-links?   uint16
+        |  +--ro oc-lag:state
+        |  |  +--ro oc-lag:lag-type?    aggregation-type
+        |  |  +--ro oc-lag:min-links?   uint16
+        |  |  +--ro oc-lag:lag-speed?   uint32
+        |  |  +--ro oc-lag:member*      oc-if:base-interface-ref
+        |  +--rw oc-vlan:switched-vlan
+        |     +--rw oc-vlan:config
+        |     |  +--rw oc-vlan:interface-mode?   oc-vlan-types:vlan-mode-type
+        |     |  +--rw oc-vlan:native-vlan?      oc-vlan-types:vlan-id
+        |     |  +--rw oc-vlan:access-vlan?      oc-vlan-types:vlan-id
+        |     |  +--rw oc-vlan:trunk-vlans*      union
+        |     +--ro oc-vlan:state
+        |        +--ro oc-vlan:interface-mode?   oc-vlan-types:vlan-mode-type
+        |        +--ro oc-vlan:native-vlan?      oc-vlan-types:vlan-id
+        |        +--ro oc-vlan:access-vlan?      oc-vlan-types:vlan-id
+        |        +--ro oc-vlan:trunk-vlans*      union
+        +--rw oc-vlan:routed-vlan
+           +--rw oc-vlan:config
+           |  +--rw oc-vlan:vlan?   union
+           +--ro oc-vlan:state
+           |  +--ro oc-vlan:vlan?   union
+           +--rw oc-ip:ipv4
+           |  +--rw oc-ip:addresses
+           |  |  +--rw oc-ip:address* [ip]
+           |  |     +--rw oc-ip:ip        -> ../config/ip
+           |  |     +--rw oc-ip:config
+           |  |     |  +--rw oc-ip:ip?              oc-inet:ipv4-address
+           |  |     |  +--rw oc-ip:prefix-length?   uint8
+           |  |     |  +--rw oc-ip:type?            ipv4-address-type
+           |  |     +--ro oc-ip:state
+           |  |     |  +--ro oc-ip:ip?              oc-inet:ipv4-address
+           |  |     |  +--ro oc-ip:prefix-length?   uint8
+           |  |     |  +--ro oc-ip:type?            ipv4-address-type
+           |  |     |  +--ro oc-ip:origin?          ip-address-origin
+           |  |     +--rw oc-ip:vrrp
+           |  |        +--rw oc-ip:vrrp-group* [virtual-router-id]
+           |  |           +--rw oc-ip:virtual-router-id     -> ../config/virtual-router-id
+           |  |           +--rw oc-ip:config
+           |  |           |  +--rw oc-ip:virtual-router-id?        uint8
+           |  |           |  +--rw oc-ip:virtual-address*          oc-inet:ip-address
+           |  |           |  +--rw oc-ip:priority?                 uint8
+           |  |           |  +--rw oc-ip:preempt?                  boolean
+           |  |           |  +--rw oc-ip:preempt-delay?            uint16
+           |  |           |  +--rw oc-ip:accept-mode?              boolean
+           |  |           |  +--rw oc-ip:advertisement-interval?   uint16
+           |  |           +--ro oc-ip:state
+           |  |           |  +--ro oc-ip:virtual-router-id?        uint8
+           |  |           |  +--ro oc-ip:virtual-address*          oc-inet:ip-address
+           |  |           |  +--ro oc-ip:priority?                 uint8
+           |  |           |  +--ro oc-ip:preempt?                  boolean
+           |  |           |  +--ro oc-ip:preempt-delay?            uint16
+           |  |           |  +--ro oc-ip:accept-mode?              boolean
+           |  |           |  +--ro oc-ip:advertisement-interval?   uint16
+           |  |           |  +--ro oc-ip:current-priority?         uint8
+           |  |           +--rw oc-ip:interface-tracking
+           |  |              +--rw oc-ip:config
+           |  |              |  +--rw oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+           |  |              |  +--rw oc-ip:priority-decrement?   uint8
+           |  |              +--ro oc-ip:state
+           |  |                 +--ro oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+           |  |                 +--ro oc-ip:priority-decrement?   uint8
+           |  +--rw oc-ip:proxy-arp
+           |  |  +--rw oc-ip:config
+           |  |  |  +--rw oc-ip:mode?   enumeration
+           |  |  +--ro oc-ip:state
+           |  |     +--ro oc-ip:mode?   enumeration
+           |  +--rw oc-ip:neighbors
+           |  |  +--rw oc-ip:neighbor* [ip]
+           |  |     +--rw oc-ip:ip        -> ../config/ip
+           |  |     +--rw oc-ip:config
+           |  |     |  +--rw oc-ip:ip?                   oc-inet:ipv4-address
+           |  |     |  +--rw oc-ip:link-layer-address    oc-yang:phys-address
+           |  |     +--ro oc-ip:state
+           |  |        +--ro oc-ip:ip?                   oc-inet:ipv4-address
+           |  |        +--ro oc-ip:link-layer-address    oc-yang:phys-address
+           |  |        +--ro oc-ip:origin?               neighbor-origin
+           |  +--rw oc-ip:unnumbered
+           |  |  +--rw oc-ip:config
+           |  |  |  +--rw oc-ip:enabled?   boolean
+           |  |  +--ro oc-ip:state
+           |  |  |  +--ro oc-ip:enabled?   boolean
+           |  |  +--rw oc-ip:interface-ref
+           |  |     +--rw oc-ip:config
+           |  |     |  +--rw oc-ip:interface?      -> /oc-if:interfaces/interface/name
+           |  |     |  +--rw oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+           |  |     +--ro oc-ip:state
+           |  |        +--ro oc-ip:interface?      -> /oc-if:interfaces/interface/name
+           |  |        +--ro oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+           |  +--rw oc-ip:config
+           |  |  +--rw oc-ip:enabled?       boolean
+           |  |  +--rw oc-ip:mtu?           uint16
+           |  |  +--rw oc-ip:dhcp-client?   boolean
+           |  +--ro oc-ip:state
+           |     +--ro oc-ip:enabled?       boolean
+           |     +--ro oc-ip:mtu?           uint16
+           |     +--ro oc-ip:dhcp-client?   boolean
+           |     +--ro oc-ip:counters
+           |        +--ro oc-ip:in-pkts?                oc-yang:counter64
+           |        +--ro oc-ip:in-octets?              oc-yang:counter64
+           |        +--ro oc-ip:in-multicast-pkts?      oc-yang:counter64
+           |        +--ro oc-ip:in-multicast-octets?    oc-yang:counter64
+           |        +--ro oc-ip:in-error-pkts?          oc-yang:counter64
+           |        +--ro oc-ip:in-forwarded-pkts?      oc-yang:counter64
+           |        +--ro oc-ip:in-forwarded-octets?    oc-yang:counter64
+           |        +--ro oc-ip:in-discarded-pkts?      oc-yang:counter64
+           |        +--ro oc-ip:out-pkts?               oc-yang:counter64
+           |        +--ro oc-ip:out-octets?             oc-yang:counter64
+           |        +--ro oc-ip:out-multicast-pkts?     oc-yang:counter64
+           |        +--ro oc-ip:out-multicast-octets?   oc-yang:counter64
+           |        +--ro oc-ip:out-error-pkts?         oc-yang:counter64
+           |        +--ro oc-ip:out-forwarded-pkts?     oc-yang:counter64
+           |        +--ro oc-ip:out-forwarded-octets?   oc-yang:counter64
+           |        +--ro oc-ip:out-discarded-pkts?     oc-yang:counter64
+           +--rw oc-ip:ipv6
+              +--rw oc-ip:addresses
+              |  +--rw oc-ip:address* [ip]
+              |     +--rw oc-ip:ip        -> ../config/ip
+              |     +--rw oc-ip:config
+              |     |  +--rw oc-ip:ip?              oc-inet:ipv6-address
+              |     |  +--rw oc-ip:prefix-length    uint8
+              |     |  +--rw oc-ip:type?            oc-inet:ipv6-address-type
+              |     +--ro oc-ip:state
+              |     |  +--ro oc-ip:ip?              oc-inet:ipv6-address
+              |     |  +--ro oc-ip:prefix-length    uint8
+              |     |  +--ro oc-ip:type?            oc-inet:ipv6-address-type
+              |     |  +--ro oc-ip:origin?          ip-address-origin
+              |     |  +--ro oc-ip:status?          enumeration
+              |     +--rw oc-ip:vrrp
+              |        +--rw oc-ip:vrrp-group* [virtual-router-id]
+              |           +--rw oc-ip:virtual-router-id     -> ../config/virtual-router-id
+              |           +--rw oc-ip:config
+              |           |  +--rw oc-ip:virtual-router-id?        uint8
+              |           |  +--rw oc-ip:virtual-address*          oc-inet:ip-address
+              |           |  +--rw oc-ip:priority?                 uint8
+              |           |  +--rw oc-ip:preempt?                  boolean
+              |           |  +--rw oc-ip:preempt-delay?            uint16
+              |           |  +--rw oc-ip:accept-mode?              boolean
+              |           |  +--rw oc-ip:advertisement-interval?   uint16
+              |           |  +--rw oc-ip:virtual-link-local?       oc-inet:ip-address
+              |           +--ro oc-ip:state
+              |           |  +--ro oc-ip:virtual-router-id?        uint8
+              |           |  +--ro oc-ip:virtual-address*          oc-inet:ip-address
+              |           |  +--ro oc-ip:priority?                 uint8
+              |           |  +--ro oc-ip:preempt?                  boolean
+              |           |  +--ro oc-ip:preempt-delay?            uint16
+              |           |  +--ro oc-ip:accept-mode?              boolean
+              |           |  +--ro oc-ip:advertisement-interval?   uint16
+              |           |  +--ro oc-ip:current-priority?         uint8
+              |           |  +--ro oc-ip:virtual-link-local?       oc-inet:ip-address
+              |           +--rw oc-ip:interface-tracking
+              |              +--rw oc-ip:config
+              |              |  +--rw oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+              |              |  +--rw oc-ip:priority-decrement?   uint8
+              |              +--ro oc-ip:state
+              |                 +--ro oc-ip:track-interface*      -> /oc-if:interfaces/interface/name
+              |                 +--ro oc-ip:priority-decrement?   uint8
+              +--rw oc-ip:router-advertisement
+              |  +--rw oc-ip:config
+              |  |  +--rw oc-ip:enable?         boolean
+              |  |  +--rw oc-ip:interval?       uint32
+              |  |  +--rw oc-ip:lifetime?       uint32
+              |  |  x--rw oc-ip:suppress?       boolean
+              |  |  +--rw oc-ip:mode?           enumeration
+              |  |  +--rw oc-ip:managed?        boolean
+              |  |  +--rw oc-ip:other-config?   boolean
+              |  +--ro oc-ip:state
+              |  |  +--ro oc-ip:enable?         boolean
+              |  |  +--ro oc-ip:interval?       uint32
+              |  |  +--ro oc-ip:lifetime?       uint32
+              |  |  x--ro oc-ip:suppress?       boolean
+              |  |  +--ro oc-ip:mode?           enumeration
+              |  |  +--ro oc-ip:managed?        boolean
+              |  |  +--ro oc-ip:other-config?   boolean
+              |  +--rw oc-ip:prefixes
+              |     +--rw oc-ip:prefix* [prefix]
+              |        +--rw oc-ip:prefix    -> ../config/prefix
+              |        +--rw oc-ip:config
+              |        |  +--rw oc-ip:prefix?                      oc-inet:ipv6-prefix
+              |        |  +--rw oc-ip:valid-lifetime?              uint32
+              |        |  +--rw oc-ip:preferred-lifetime?          uint32
+              |        |  +--rw oc-ip:disable-advertisement?       boolean
+              |        |  +--rw oc-ip:disable-autoconfiguration?   boolean
+              |        |  +--rw oc-ip:enable-onlink?               boolean
+              |        +--ro oc-ip:state
+              |           +--ro oc-ip:prefix?                      oc-inet:ipv6-prefix
+              |           +--ro oc-ip:valid-lifetime?              uint32
+              |           +--ro oc-ip:preferred-lifetime?          uint32
+              |           +--ro oc-ip:disable-advertisement?       boolean
+              |           +--ro oc-ip:disable-autoconfiguration?   boolean
+              |           +--ro oc-ip:enable-onlink?               boolean
+              +--rw oc-ip:neighbors
+              |  +--rw oc-ip:neighbor* [ip]
+              |     +--rw oc-ip:ip        -> ../config/ip
+              |     +--rw oc-ip:config
+              |     |  +--rw oc-ip:ip?                   oc-inet:ipv6-address
+              |     |  +--rw oc-ip:link-layer-address    oc-yang:phys-address
+              |     +--ro oc-ip:state
+              |        +--ro oc-ip:ip?                   oc-inet:ipv6-address
+              |        +--ro oc-ip:link-layer-address    oc-yang:phys-address
+              |        +--ro oc-ip:origin?               neighbor-origin
+              |        +--ro oc-ip:is-router?            boolean
+              |        +--ro oc-ip:neighbor-state?       enumeration
+              +--rw oc-ip:unnumbered
+              |  +--rw oc-ip:config
+              |  |  +--rw oc-ip:enabled?   boolean
+              |  +--ro oc-ip:state
+              |  |  +--ro oc-ip:enabled?   boolean
+              |  +--rw oc-ip:interface-ref
+              |     +--rw oc-ip:config
+              |     |  +--rw oc-ip:interface?      -> /oc-if:interfaces/interface/name
+              |     |  +--rw oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+              |     +--ro oc-ip:state
+              |        +--ro oc-ip:interface?      -> /oc-if:interfaces/interface/name
+              |        +--ro oc-ip:subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+              +--rw oc-ip:config
+              |  +--rw oc-ip:enabled?                     boolean
+              |  +--rw oc-ip:mtu?                         uint32
+              |  +--rw oc-ip:dup-addr-detect-transmits?   uint32
+              |  +--rw oc-ip:dhcp-client?                 boolean
+              +--ro oc-ip:state
+                 +--ro oc-ip:enabled?                     boolean
+                 +--ro oc-ip:mtu?                         uint32
+                 +--ro oc-ip:dup-addr-detect-transmits?   uint32
+                 +--ro oc-ip:dhcp-client?                 boolean
+                 +--ro oc-ip:counters
+                    +--ro oc-ip:in-pkts?                oc-yang:counter64
+                    +--ro oc-ip:in-octets?              oc-yang:counter64
+                    +--ro oc-ip:in-multicast-pkts?      oc-yang:counter64
+                    +--ro oc-ip:in-multicast-octets?    oc-yang:counter64
+                    +--ro oc-ip:in-error-pkts?          oc-yang:counter64
+                    +--ro oc-ip:in-forwarded-pkts?      oc-yang:counter64
+                    +--ro oc-ip:in-forwarded-octets?    oc-yang:counter64
+                    +--ro oc-ip:in-discarded-pkts?      oc-yang:counter64
+                    +--ro oc-ip:out-pkts?               oc-yang:counter64
+                    +--ro oc-ip:out-octets?             oc-yang:counter64
+                    +--ro oc-ip:out-multicast-pkts?     oc-yang:counter64
+                    +--ro oc-ip:out-multicast-octets?   oc-yang:counter64
+                    +--ro oc-ip:out-error-pkts?         oc-yang:counter64
+                    +--ro oc-ip:out-forwarded-pkts?     oc-yang:counter64
+                    +--ro oc-ip:out-forwarded-octets?   oc-yang:counter64
+                    +--ro oc-ip:out-discarded-pkts?     oc-yang:counter64
+
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-acl.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-acl.yang
new file mode 100644
index 0000000000000000000000000000000000000000..6b3977907d1a0ec3c64f704b23b5da2b101cbfc2
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-acl.yang
@@ -0,0 +1,935 @@
+module openconfig-acl {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/acl";
+
+  prefix "oc-acl";
+
+  import openconfig-packet-match { prefix oc-match; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines configuration and operational state
+    data for network access control lists (i.e., filters, rules,
+    etc.).  ACLs are organized into ACL sets, with each set
+    containing one or more ACL entries.  ACL sets are identified
+    by a unique name, while each entry within a set is assigned
+    a sequence-id that determines the order in which the ACL
+    rules are applied to a packet.  Note that ACLs are evaluated
+    in ascending order based on the sequence-id (low to high).
+
+    Individual ACL rules specify match criteria based on fields in
+    the packet, along with an action that defines how matching
+    packets should be handled. Entries have a type that indicates
+    the type of match criteria, e.g., MAC layer, IPv4, IPv6, etc.";
+
+  oc-ext:openconfig-version "1.3.3";
+
+  revision "2023-02-06" {
+    description
+      "Add clarifying comments on use of interface-ref.";
+    reference "1.3.3";
+  }
+
+  revision "2023-01-29" {
+    description
+      "Update sequence-id reference to allow model to be re-used
+      outside of ACL context.";
+    reference "1.3.2";
+  }
+
+  revision "2022-12-20" {
+    description
+      "Remove unused openconfig-inet-types import";
+    reference "1.3.1";
+  }
+
+  revision "2022-06-01" {
+    description
+      "Add the management of prefix lists
+      that can be used in matches";
+    reference "1.3.0";
+   }
+
+  revision "2022-01-14" {
+    description
+      "Fix when statements for MIXED mode ACLs";
+    reference "1.2.2";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace";
+    reference "1.2.1";
+  }
+
+  revision "2021-03-17" {
+    description
+      "Add MPLS filter Support.";
+      reference "1.2.0";
+  }
+
+  revision "2019-11-27" {
+    description
+      "Fix xpaths in when statements.";
+    reference "1.1.1";
+  }
+
+  revision "2019-10-25" {
+    description
+      "Update when statements.";
+    reference "1.1.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "1.0.2";
+  }
+
+  revision "2018-04-24" {
+    description
+      "Clarified order of ACL evaluation";
+    reference "1.0.1";
+  }
+
+  revision "2017-05-26" {
+    description
+      "Separated ACL entries by type";
+    reference "1.0.0";
+  }
+
+  revision "2016-08-08" {
+    description
+      "OpenConfig public release";
+    reference "0.2.0";
+  }
+
+  revision "2016-01-22" {
+    description
+      "Initial revision";
+    reference "TBD";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  identity ACL_TYPE {
+    description
+      "Base identity for types of ACL sets";
+  }
+
+  identity ACL_IPV4 {
+    base ACL_TYPE;
+    description
+      "IP-layer ACLs with IPv4 addresses";
+  }
+
+  identity ACL_IPV6 {
+    base ACL_TYPE;
+    description
+      "IP-layer ACLs with IPv6 addresses";
+  }
+
+  identity ACL_L2 {
+    base ACL_TYPE;
+    description
+      "MAC-layer ACLs";
+  }
+
+  identity ACL_MIXED {
+    base ACL_TYPE;
+    description
+      "Mixed-mode ACL that specifies L2 and L3 protocol
+      fields.  This ACL type is not implemented by many
+      routing/switching devices.";
+  }
+
+  identity ACL_MPLS {
+    base ACL_TYPE;
+    description
+      "An ACL that matches on fields from the MPLS header.";
+  }
+
+  // ACL action type
+
+  identity FORWARDING_ACTION {
+    description
+      "Base identity for actions in the forwarding category";
+  }
+
+  identity ACCEPT {
+    base FORWARDING_ACTION;
+    description
+      "Accept the packet";
+  }
+
+  identity DROP {
+    base FORWARDING_ACTION;
+    description
+      "Drop packet without sending any ICMP error message";
+  }
+
+  identity REJECT {
+    base FORWARDING_ACTION;
+    description
+      "Drop the packet and send an ICMP error message to the source";
+  }
+
+  identity LOG_ACTION {
+    description
+      "Base identity for defining the destination for logging
+      actions";
+  }
+
+  identity LOG_SYSLOG {
+    base LOG_ACTION;
+    description
+      "Log the packet in Syslog";
+  }
+
+  identity LOG_NONE {
+    base LOG_ACTION;
+    description
+      "No logging";
+  }
+
+  identity ACL_COUNTER_CAPABILITY {
+    description
+      "Base identity for system to indicate how it is able to report
+      counters";
+  }
+
+  identity INTERFACE_ONLY {
+    base ACL_COUNTER_CAPABILITY;
+    description
+      "ACL counters are available and reported only per interface";
+  }
+
+  identity AGGREGATE_ONLY {
+    base ACL_COUNTER_CAPABILITY;
+    description
+      "ACL counters are aggregated over all interfaces, and reported
+      only per ACL entry";
+  }
+
+  identity INTERFACE_AGGREGATE {
+    base ACL_COUNTER_CAPABILITY;
+    description
+      "ACL counters are reported per interface, and also aggregated
+      and reported per ACL entry.";
+  }
+
+  // grouping statements
+
+  // input interface
+  grouping input-interface-config {
+    description
+      "Config of interface";
+
+  }
+
+  grouping input-interface-state {
+    description
+      "State information of interface";
+  }
+
+  grouping input-interface-top {
+    description
+      "Input interface top level container";
+
+    container input-interface {
+      description
+        "Input interface container. The interface is resolved based
+         on the interface and subinterface leaves of the interface-ref
+         container, which are references to entries in the /interfaces
+         list.";
+
+      container config {
+        description
+          "Config data";
+        uses input-interface-config;
+      }
+
+      container state {
+        config false;
+        description
+          "State information";
+        uses input-interface-config;
+        uses input-interface-state;
+      }
+
+      uses oc-if:interface-ref;
+
+    }
+  }
+
+  // Action Type
+  grouping action-config {
+    description
+      "Config of action type";
+
+
+    leaf forwarding-action {
+      type identityref {
+        base FORWARDING_ACTION;
+      }
+      mandatory true;
+      description
+        "Specifies the forwarding action.  One forwarding action
+        must be specified for each ACL entry";
+    }
+
+    leaf log-action {
+      type identityref {
+        base LOG_ACTION;
+      }
+      default LOG_NONE;
+      description
+        "Specifies the log action and destination for
+        matched packets.  The default is not to log the
+        packet.";
+    }
+
+
+  }
+
+  grouping action-state {
+    description
+      "State information of action type";
+
+  }
+
+  grouping action-top {
+    description
+      "ACL action type top level container";
+
+    container actions {
+      description
+        "Enclosing container for list of ACL actions associated
+        with an entry";
+
+      container config {
+        description
+          "Config data for ACL actions";
+        uses action-config;
+      }
+
+      container state {
+        config false;
+        description
+          "State information for ACL actions";
+        uses action-config;
+        uses action-state;
+      }
+    }
+  }
+
+  grouping acl-counters-state {
+    description
+      "Common grouping for ACL counters";
+
+    leaf matched-packets {
+      type oc-yang:counter64;
+      description
+        "Count of the number of packets matching the current ACL
+        entry.
+
+        An implementation should provide this counter on a
+        per-interface per-ACL-entry if possible.
+
+        If an implementation only supports ACL counters per entry
+        (i.e., not broken out per interface), then the value
+        should be equal to the aggregate count across all interfaces.
+
+        An implementation that provides counters per entry per
+        interface is not required to also provide an aggregate count,
+        e.g., per entry -- the user is expected to be able implement
+        the required aggregation if such a count is needed.";
+    }
+
+    leaf matched-octets {
+      type oc-yang:counter64;
+      description
+        "Count of the number of octets (bytes) matching the current
+        ACL entry.
+
+        An implementation should provide this counter on a
+        per-interface per-ACL-entry if possible.
+
+        If an implementation only supports ACL counters per entry
+        (i.e., not broken out per interface), then the value
+        should be equal to the aggregate count across all interfaces.
+
+        An implementation that provides counters per entry per
+        interface is not required to also provide an aggregate count,
+        e.g., per entry -- the user is expected to be able implement
+        the required aggregation if such a count is needed.";
+    }
+
+  }
+
+  // Access List Entries
+
+  grouping access-list-entries-config {
+    description
+      "Access List Entries (ACE) config.";
+
+    leaf sequence-id {
+      type uint32;
+      description
+        "The sequence id determines the order in which ACL entries
+        are applied.  The sequence id must be unique for each entry
+        in an ACL set.  Target devices should apply the ACL entry
+        rules in ascending order determined by sequence id (low to
+        high), rather than the relying only on order in the list.";
+    }
+
+    leaf description {
+      type string;
+      description
+        "A user-defined description, or comment, for this Access List
+        Entry.";
+    }
+
+  }
+
+  grouping access-list-entries-state {
+    description
+      "Access List Entries state.";
+
+    uses acl-counters-state;
+
+  }
+
+  grouping access-list-entries-top {
+    description
+      "Access list entries to level container";
+
+    container acl-entries {
+      description
+        "Access list entries container";
+
+      list acl-entry {
+        key "sequence-id";
+        description
+          "List of ACL entries comprising an ACL set";
+
+        leaf sequence-id {
+          type leafref {
+            path "../config/sequence-id";
+          }
+          description
+            "references the list key";
+        }
+
+        container config {
+          description
+            "Access list entries config";
+          uses access-list-entries-config;
+        }
+
+        container state {
+          config false;
+          description
+            "State information for ACL entries";
+          uses access-list-entries-config;
+          uses access-list-entries-state;
+        }
+
+        uses oc-match:ethernet-header-top {
+          when "../../config/type='ACL_L2' or " +
+            "../../config/type='ACL_MIXED'" {
+            description
+              "MAC-layer fields are valid when the ACL type is L2 or
+              MIXED";
+          }
+        }
+
+        uses oc-match:ipv4-protocol-fields-top {
+          when "../../config/type='ACL_IPV4' or " +
+            "../../config/type='ACL_MIXED'" {
+            description
+              "IPv4-layer fields are valid when the ACL type is
+              IPv4 or MIXED";
+          }
+        }
+
+        uses oc-match:mpls-header-top {
+          when "../../config/type='ACL_MPLS' or " +
+            "../../config/type='ACL_MIXED'" {
+            description
+              "MPLS-layer fields are valid when the ACL type is
+              MPLS or MIXED";
+          }
+        }
+
+        uses oc-match:ipv6-protocol-fields-top {
+          when "../../config/type='ACL_IPV6' or " +
+            "../../config/type='ACL_MIXED'" {
+            description
+              "IPv6-layer fields are valid when the ACL type is
+              IPv6 or MIXED";
+          }
+        }
+
+        uses oc-match:transport-fields-top {
+          when "../../config/type='ACL_IPV6' or " +
+            "../../config/type='ACL_IPV4' or " +
+            "../../config/type='ACL_MIXED'" {
+            description
+              "Transport-layer fields are valid when specifying
+              L3 or MIXED ACL types";
+          }
+        }
+
+        uses input-interface-top;
+        uses action-top;
+      }
+    }
+  }
+
+  grouping acl-set-config {
+    description
+      "Access Control List config";
+
+    leaf name {
+      type string;
+      description
+        "The name of the access-list set";
+    }
+
+    leaf type {
+      type identityref {
+        base ACL_TYPE;
+      }
+      description
+        "The type determines the fields allowed in the ACL entries
+        belonging to the ACL set (e.g., IPv4, IPv6, etc.)";
+    }
+
+    leaf description {
+      type string;
+      description
+        "Description, or comment, for the ACL set";
+    }
+
+  }
+
+  grouping acl-set-state {
+    description
+      "Access Control List state";
+  }
+
+  grouping acl-set-top {
+    description
+      "Access list entries variables top level container";
+
+    container acl-sets {
+      description
+        "Access list entries variables enclosing container";
+
+      list acl-set {
+        key "name type";
+        description
+          "List of ACL sets, each comprising of a list of ACL
+          entries";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name list key";
+        }
+
+        leaf type {
+          type leafref {
+            path "../config/type";
+          }
+          description
+            "Reference to the type list key";
+        }
+
+        container config {
+          description
+            "Access list config";
+          uses acl-set-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Access list state information";
+          uses acl-set-config;
+          uses acl-set-state;
+        }
+        uses access-list-entries-top;
+      }
+    }
+  }
+
+  grouping interface-acl-entries-config {
+    description
+      "Configuration data for per-interface ACLs";
+
+  }
+
+  grouping interface-acl-entries-state {
+    description
+      "Operational state data for per-interface ACL entries";
+
+    leaf sequence-id {
+      type leafref {
+        path "/oc-acl:acl/oc-acl:acl-sets/" +
+          "oc-acl:acl-set[oc-acl:name=current()/../../../../set-name]" +
+          "[oc-acl:type=current()/../../../../type]/" +
+          "oc-acl:acl-entries/oc-acl:acl-entry/oc-acl:sequence-id";
+      }
+      description
+        "Reference to an entry in the ACL set applied to an
+        interface";
+    }
+
+    uses acl-counters-state;
+
+  }
+
+  grouping interface-acl-entries-top {
+    description
+      "Top-level grouping for per-interface ACL entries";
+
+    container acl-entries {
+      config false;
+      description
+        "Enclosing container for list of references to ACLs";
+
+      list acl-entry {
+        key "sequence-id";
+        description
+          "List of ACL entries assigned to an interface";
+
+        leaf sequence-id {
+          type leafref {
+            path "../state/sequence-id";
+          }
+          description
+            "Reference to per-interface acl entry key";
+        }
+
+        // no config container since the enclosing container is
+        // read-only
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for per-interface ACL entries";
+
+          uses interface-acl-entries-config;
+          uses interface-acl-entries-state;
+        }
+      }
+    }
+  }
+
+  grouping interface-ingress-acl-config {
+    description
+      "Configuration data for per-interface ingress ACLs";
+
+    leaf set-name {
+      type leafref {
+        path "../../../../../../acl-sets/acl-set/config/name";
+      }
+      description
+        "Reference to the ACL set name applied on ingress";
+    }
+
+    leaf type {
+      type leafref {
+        path "../../../../../../acl-sets/acl-set[name=current()/../set-name]" +
+          "/config/type";
+      }
+      description
+        "Reference to the ACL set type applied on ingress";
+    }
+  }
+
+  grouping interface-ingress-acl-state {
+    description
+      "Operational state data for the per-interface ingress ACL";
+  }
+
+  grouping interface-ingress-acl-top {
+    description
+      "Top-level grouping for per-interface ingress ACL data";
+
+    container ingress-acl-sets {
+      description
+        "Enclosing container the list of ingress ACLs on the
+        interface";
+
+      list ingress-acl-set {
+        key "set-name type";
+        description
+          "List of ingress ACLs on the interface";
+
+        leaf set-name {
+          type leafref {
+            path "../config/set-name";
+          }
+          description
+            "Reference to set name list key";
+        }
+
+        leaf type {
+          type leafref {
+            path "../config/type";
+          }
+          description
+            "Reference to type list key";
+        }
+
+        container config {
+          description
+            "Configuration data ";
+
+          uses interface-ingress-acl-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for interface ingress ACLs";
+
+          uses interface-ingress-acl-config;
+          uses interface-ingress-acl-state;
+        }
+
+        uses interface-acl-entries-top;
+      }
+    }
+  }
+
+  grouping interface-egress-acl-config {
+    description
+      "Configuration data for per-interface egress ACLs";
+
+    leaf set-name {
+      type leafref {
+        path "../../../../../../acl-sets/acl-set/config/name";
+      }
+      description
+        "Reference to the ACL set name applied on egress";
+    }
+
+    leaf type {
+      type leafref {
+        path "../../../../../../acl-sets/acl-set[name=current()/../set-name]" +
+          "/config/type";
+      }
+      description
+        "Reference to the ACL set type applied on egress.";
+    }
+  }
+
+  grouping interface-egress-acl-state {
+    description
+      "Operational state data for the per-interface egress ACL";
+  }
+
+  grouping interface-egress-acl-top {
+    description
+      "Top-level grouping for per-interface egress ACL data";
+
+    container egress-acl-sets {
+      description
+        "Enclosing container the list of egress ACLs on the
+        interface";
+
+      list egress-acl-set {
+        key "set-name type";
+        description
+          "List of egress ACLs on the interface";
+
+        leaf set-name {
+          type leafref {
+            path "../config/set-name";
+          }
+          description
+            "Reference to set name list key";
+        }
+
+        leaf type {
+          type leafref {
+            path "../config/type";
+          }
+          description
+            "Reference to type list key";
+        }
+
+        container config {
+          description
+            "Configuration data ";
+
+          uses interface-egress-acl-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for interface egress ACLs";
+
+          uses interface-egress-acl-config;
+          uses interface-egress-acl-state;
+        }
+
+        uses interface-acl-entries-top;
+      }
+    }
+  }
+
+  grouping acl-interfaces-config {
+    description
+      "Configuration data for interface references";
+
+    leaf id {
+      type oc-if:interface-id;
+      description
+        "User-defined identifier for the interface -- a common
+        convention could be '.'";
+    }
+  }
+
+  grouping acl-interfaces-state {
+    description
+      "Operational state data for interface references";
+  }
+
+  grouping acl-interfaces-top {
+    description
+      "Top-level grouping for interface-specific ACL data";
+
+    container interfaces {
+      description
+        "Enclosing container for the list of interfaces on which
+        ACLs are set";
+
+      list interface {
+        key "id";
+        description
+          "List of interfaces on which ACLs are set. The interface is resolved
+          based on the interface and subinterface leaves of the interface-ref
+          container, which are references to entries in the /interfaces
+          list. The key of the list is an arbitrary value that the
+          implementation should not use to resolve an interface name.";
+
+        leaf id {
+          type leafref {
+            path "../config/id";
+          }
+          description
+            "Reference to the interface id list key";
+        }
+
+        container config {
+          description
+            "Configuration for ACL per-interface data";
+
+          uses acl-interfaces-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state for ACL per-interface data";
+
+          uses acl-interfaces-config;
+          uses acl-interfaces-state;
+        }
+
+        uses oc-if:interface-ref;
+        uses interface-ingress-acl-top;
+        uses interface-egress-acl-top;
+      }
+    }
+  }
+
+
+  grouping acl-config {
+    description
+      "Global configuration data for ACLs";
+  }
+
+  grouping acl-state {
+    description
+      "Global operational state data for ACLs";
+
+    leaf counter-capability {
+      type identityref {
+        base ACL_COUNTER_CAPABILITY;
+      }
+      description
+        "System reported indication of how ACL counters are reported
+        by the target";
+    }
+  }
+  grouping acl-top {
+    description
+      "Top level grouping for ACL data and structure";
+
+    container acl {
+      description
+        "Top level enclosing container for ACL model config
+        and operational state data";
+
+      container config {
+        description
+          "Global config data for ACLs";
+
+        uses acl-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Global operational state data for ACLs";
+
+        uses acl-config;
+        uses acl-state;
+      }
+
+      uses acl-set-top;
+      uses acl-interfaces-top;
+    }
+  }
+
+  // data definition statements
+  uses acl-top;
+
+  // augment statements
+
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv4-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv4-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..486f3e157f6073da30dddafd369c96df8eac99d3
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv4-types.yang
@@ -0,0 +1,540 @@
+module openconfig-icmpv4-types {
+
+  yang-version "1";
+  namespace "http://openconfig.net/yang/openconfig-icmpv4-types";
+
+  prefix "oc-icmpv4-types";
+
+  import openconfig-extensions { prefix oc-ext; }
+
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "OpenConfig module defining the types and coresponding codes for
+    ICMPv4.";
+
+  oc-ext:openconfig-version "0.1.0";
+
+  revision "2023-01-26" {
+    description
+      "Initial revision of ICMPv4 types module.";
+    reference "0.1.0";
+  }
+
+  identity TYPE {
+    description
+      "Base identity for ICMPv4 codes";
+  }
+
+  identity CODE {
+    description
+      "Base identity for ICMPv4 codes.";
+  }
+
+  identity ECHO_REPLY {
+    description
+      "ICMP echo reply, value 0.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE {
+    description
+      "ICMP destination unreachable, value 3.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity REDIRECT {
+    description
+      "ICMP redirect, value 5.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity ECHO {
+    description
+      "ICMP echo, value 8.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity ROUTER_ADVERTISEMENT {
+    description
+      "ICMP router advertisement, value 9.";
+    base TYPE;
+    reference "RFC1256: ICMP Router Discovery Messages";
+  }
+
+  identity ROUTER_SOLICITATION {
+    description
+      "ICMP Router Solicitation, value 10.";
+    base TYPE;
+    reference "RFC1256: ICMP Router Discovery Messages";
+  }
+
+  identity TIME_EXCEEDED {
+    description
+      "ICMP TTL exceede, value 11.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity PARAM_PROBLEM {
+    description
+      "ICMP parameter problem, value 12.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity TIMESTAMP {
+    description
+      "ICMP timestamp, value 13.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity TIMESTAMP_REPLY {
+    description
+      "ICMP timestamp reply, value 14.";
+    base TYPE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+  identity TRACEROUTE{
+    description
+      "Traceroute (deprecated), value 30.";
+    base TYPE;
+    reference "RFC1393: Traceroute Using an IP Option";
+  }
+  identity PHOTURIS {
+    description
+      "ICMP Photuris, value 40.";
+    base TYPE;
+    reference "RFC2521: CMP Security Failures Messages";
+  }
+
+  identity EXT_ECHO_REQUEST {
+    description
+      "ICMP extended echo request, value 42.";
+    base TYPE;
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY {
+    description
+      "ICMP extended echo reply, value 43.";
+    base TYPE;
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity ECHO_REPLY_CODE {
+    description
+      "CODE for ICMPv4 Echo Reply.";
+    base CODE;
+  }
+
+  identity ECHO_REPLY_NONE {
+    description
+      "No code, type 0 for Echo Reply.";
+    base ECHO_REPLY_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_CODE {
+    description
+      "Codes for ICMPv4 Destination Unreachable.";
+    base CODE;
+  }
+
+  identity DST_UNREACHABLE_NET {
+    description
+      "ICMPv4 destination network unreachable, code 0.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_HOST {
+    description
+      "ICMPv4 destination host unreachable, code 1";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_PROTOCOL {
+    description
+      "ICMPv4 destination protocol unreachable, code 2.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_PORT {
+    description
+      "ICMPv4 Port unreachable, code 3.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_CANNOT_FRAGMENT {
+    description
+      "ICMPv4 destination unreachable due to inability to fragment. The df-bit
+      is set but the packet requires fragmentation, code 4.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_SRC_ROUTE_FAILED {
+    description
+      "ICMPv4 destination is unreachable as source routing failed, code 5.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity DST_UNREACHABLE_DST_NET_UNKNOWN {
+    description
+      "ICMPv4 destination is unreachable as the destination network is
+      unknown, code 6.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_DST_HOST_UNKNOWN {
+    description
+      "ICMPv4 destination is unreachable as the destination host is unknown, code 7.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+          Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_SRC_HOST_ISOLATED {
+    description
+      "ICMPv4 destination unreachable as the source host is isolated, code 8.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_DST_NET_ADMIN_PROHIBITED {
+    description
+      "ICMPv4 destination is unreachable as communication with the destination
+      network is administratively prohibited, code 9.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_DST_HOST_ADMIN_PROHIBITED {
+    description
+      "ICMPv4 destination is unreachable as communication with the destination
+      host is adminstratively prohibited, code 10.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_NET_UNREACHABLE_FOR_TOS {
+    description
+      "ICMPv4 destination network is unreachable for the specified type of
+      service, code 11.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_HOST_UNREACHABLE_FOR_TOS {
+    description
+      "ICMPv4 destination host is unreachable for the specified type of
+      service, code 12.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1122: Requirements for Internet Hosts --
+              Communication Layers";
+  }
+
+  identity DST_UNREACHABLE_ADMIN_PROHIBITED {
+    description
+      "ICMPv4 destination is unreacable as packets were adminstratively
+      filtered.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1812: Requirements for IP Version 4 Routers";
+  }
+
+  identity DST_UNREACHABLE_HOST_PRECEDENCE_VIOLATION {
+    description
+      "ICMPv4 destination is unreachable as the first-hop router has determined
+      that the destination cannot be reached for the specified source/
+      destination host, network, upper-layer protocol and source/destination
+      port. Code 14";
+    base DST_UNREACHABLE_CODE;
+  }
+
+  identity DST_UNREACHABLE_PRECEDENCE_CUTOFF {
+    description
+      "ICMPv4 Precedence cutoff in effect.  The network operators have imposed
+      a minimum level of precedence required for operation, the
+      datagram was sent with a precedence below this level.
+      Code 15.";
+    base DST_UNREACHABLE_CODE;
+    reference "RFC1812: Requirements for IP Version 4 Routers";
+  }
+
+  identity REDIRECT_CODE {
+    base CODE;
+    description
+      "Codes for the ICMPv4 Redirect type.";
+  }
+
+  identity REDIRECT_NETWORK {
+    base REDIRECT_CODE;
+    description
+      "ICMP redirect is being issued for the network or subnet,
+       code 0";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity REDIRECT_HOST {
+    base REDIRECT_CODE;
+    description
+      "ICMP redirect is being issued for the host, code 1.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity REDIRECT_TOS_NETWORK {
+    base REDIRECT_CODE;
+    description
+      "ICMP redirect is being issued for the network and type of service. code 2.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity REDIRECT_TOS_HOST {
+    base REDIRECT_CODE;
+    description
+      "ICMP redirect is being issued for the host and type of service,
+      code 3";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity ECHO_CODE {
+    base CODE;
+    description
+      "Codes for ICMPv4 echo messages.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity ECHO_NO_CODE {
+    base ECHO_CODE;
+    description
+      "No code.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity ROUTER_ADVERTISEMENT_CODE {
+    base CODE;
+    description
+      "Code for the ICMPv4 router advertisement message.";
+  }
+  identity ROUTER_ADVERTISEMENT_NORMAL {
+    base ROUTER_ADVERTISEMENT_CODE;
+    description
+      "Code 0: Normal router advertisement.";
+    reference "RFC3344: IP Mobility Support for IPv4";
+  }
+
+  identity ROUTER_ADVERTISEMENT_DOES_NOT_ROUTE_COMMON {
+    base ROUTER_ADVERTISEMENT_CODE;
+    description
+      "Code 16: Does not route common traffic.";
+    reference "RFC3344: IP Mobility Support for IPv4";
+  }
+
+  identity ROUTER_SELECTION_CODE {
+    base CODE;
+    description
+      "Codes for the ICMPv4 router selection message.";
+  }
+
+  identity ROUTER_SELECTION_NO_CODE {
+    base ROUTER_SELECTION_CODE;
+    description
+      "No code.";
+    reference "RFC1256: ICMP Router Discovery Messages";
+  }
+
+  identity TIME_EXCEEDED_CODE {
+    base CODE;
+    description
+      "Codes for the ICMPv4 time exceeded code.";
+  }
+
+  identity TIME_EXCEEDED_IN_TRANSIT {
+    base TIME_EXCEEDED_CODE;
+    description
+      "Code 0: Time to Live exceeded in Transit.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity TIME_EXCEEDED_FRAGMENT_REASSEMBLY_IN_TRANSIT {
+    base TIME_EXCEEDED_CODE;
+    description
+      "Code 1: Fragment reassembly time exceeded.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity PARAM_PROBLEM_CODE {
+    base CODE;
+    description
+      "Codes for the ICMPv4 parameter problem message (Type 12).";
+  }
+
+  identity PARAM_PROBLEM_POINTER_INDICATES_ERR {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Code 0: Pointer indicates the error.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity PARAM_PROBLEM_MISSING_REQ_OPTION {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Code 1: Missing a required option.";
+    reference "RFC1108: U.S. Department of Defense
+               Security Options for the Internet Protocol";
+  }
+
+  identity PARAM_PROBLEM_BAD_LENGTH {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Code 2: Bad Length.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity TIMESTAMP_CODE {
+    base CODE;
+    description
+      "Codes of the ICMPv4 timestamp message (Type 13).";
+  }
+  identity TIMESTAMP_NO_CODE {
+    base TIMESTAMP_CODE;
+    description
+      "No code.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity TIMESTAMP_REPLY_CODE {
+    base CODE;
+    description
+      "Codes of the ICMPv4 timestamp reply message (Type 14).";
+  }
+
+  identity TIMESTAMP_REPLY_NO_CODE {
+    base TIMESTAMP_REPLY_CODE;
+    description
+      "No code.";
+    reference "RFC792: INTERNET CONTROL MESSAGE PROTOCOL";
+  }
+
+  identity PHOTURIS_CODE {
+    base CODE;
+    description
+      "Codes of the ICMPv4 Photuris message (type 40).";
+  }
+
+  identity PHOTURIS_BAD_SPI {
+    base PHOTURIS_CODE;
+    description
+      "Code 0: Bad SPI.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity PHOTURIS_AUTH_FAILED {
+    base PHOTURIS_CODE;
+    description
+      "Code 1: Authentication failed.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity PHOTURIS_DECOMPRESS_FAILED {
+    base PHOTURIS_CODE;
+    description
+      "Code 2: Decompression failed.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity PHOTURIS_DECRYPTION_FAILED {
+    base PHOTURIS_CODE;
+    description
+      "Code 3: Decryption failed.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity PHOTURIS_NEED_AUTHENTICATION {
+    base PHOTURIS_CODE;
+    description
+      "Code 4: Need authentication.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity PHOTURIS_NEED_AUTHORIZATION {
+    base PHOTURIS_CODE;
+    description
+      "Code 5: Need authorization.";
+    reference "RFC2521: ICMP Security Failures Messages";
+  }
+
+  identity EXT_ECHO_REQUEST_CODE {
+    description
+      "Codes of the extended echo request ICMP message.";
+    base CODE;
+  }
+
+  identity EXT_ECHO_REQUEST_NO_ERROR {
+    base EXT_ECHO_REQUEST_CODE;
+    description
+      "Code 0: No error.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_CODE {
+    description
+      "Codes of the extended echo reply ICMP message (Type 43).";
+    base CODE;
+  }
+
+  identity EXT_ECHO_REPLY_NO_ERROR {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Code 0: No error.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_MALFORMED_QUERY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Code 1: Malformed query.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_NO_SUCH_INTF {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Code 2: No such interface.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_NO_SUB_TABLE_ENTRY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Code 3: No such table entry.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_MULTIPLE_INTF_SATISFY_QUERY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Code 4: Multiple interfaces satisfy query.";
+    reference "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv6-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv6-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..ecd77cabf64b25071ccba6a76c0e1bc88d783fde
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-icmpv6-types.yang
@@ -0,0 +1,1010 @@
+module openconfig-icmpv6-types {
+
+  yang-version "1";
+  namespace "http://openconfig.net/yang/openconfig-icmpv6-types";
+
+  prefix "oc-icmpv6-types";
+
+  import openconfig-extensions { prefix oc-ext; }
+
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "OpenConfig module defining the types and coresponding subcodes for
+    ICMPv6.";
+
+  oc-ext:openconfig-version "0.1.1";
+
+  revision "2023-05-02" {
+    description
+      "Fix module prefix.";
+    reference "0.1.1";
+  }
+
+  revision "2023-01-26" {
+    description
+      "Initial revision of ICMPv6 types module.";
+    reference "0.1.0";
+  }
+
+  identity TYPE {
+    description
+      "Base identity for ICMPv6 codes";
+  }
+
+  identity CODE {
+    description
+      "Base identity for ICMPv6 subcodes.";
+  }
+
+  identity DESTINATION_UNREACHABLE {
+    base TYPE;
+    description
+      "Type 1: Destination unreachable.";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PACKET_TOO_BIG {
+    base TYPE;
+    description
+      "Type 2: Packet too big.";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity TIME_EXCEEDED {
+    base TYPE;
+    description
+      "Type 3: Time exceeded.";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PARAMETER_PROBLEM {
+    base TYPE;
+    description
+      "Type 4: Parameter problem.";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity ECHO_REQUEST {
+    base TYPE;
+    description
+      "Type 128: Echo request.";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity ECHO_REPLY {
+    base TYPE;
+    description
+      "Type 129: Echo reply";
+    reference
+      "RFC4443: Internet Control Message Protocol (ICMPv6)
+      for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity MULTICAST_LISTENER_QUERY {
+    base TYPE;
+    description
+      "Type 130: Multicast listener query";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity MULTICAST_LISTENER_REPORT {
+    base TYPE;
+    description
+      "Type 131: Multicast listener report";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity MULTICAST_LISTENER_DONE {
+    base TYPE;
+    description
+      "Type 132: Multicast listener done";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity ROUTER_SOLICITATION {
+    base TYPE;
+    description
+      "Type 133: IPv6 router soliciation.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity ROUTER_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 134: IPv6 router advertisement.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity NEIGHBOR_SOLICITATION {
+    base TYPE;
+    description
+      "Type 135: IPv6 neighbor solicitation.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity NEIGHBOR_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 136: IPv6 neighbor advertisement.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity REDIRECT {
+    base TYPE;
+    description
+      "Type 137: IPv6 ICMP redirect message.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity RENUNBERING {
+    base TYPE;
+    description
+      "Type 138: Router renumbering.";
+    reference
+      "RFC2894: Router Renumbering for IPv6";
+  }
+
+  identity NODE_INFORMATION_QUERY {
+    base TYPE;
+    description
+      "Type 139: ICMP Node Information Query.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+  identity NODE_INFORMATION_RESPONSE {
+    base TYPE;
+    description
+      "Type 140: ICMP Node Information Response.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity INVERSE_NEIGHBOR_SOLICITATION {
+    base TYPE;
+    description
+      "Type 141: Inverse Neighbor Discovery Solicitation Message.";
+    reference "RFC3122: Extensions to IPv6 Neighbor Discovery for
+              Inverse Discovery Specification";
+  }
+
+  identity INVERSE_NEIGHBOR_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 142: Inverse Neighbor Discovery Advertisement Message.";
+    reference "RFC3122: Extensions to IPv6 Neighbor Discovery for
+              Inverse Discovery Specification";
+  }
+
+  identity VERSION2_MULTICAST_LISTENER {
+    base TYPE;
+    description
+      "Type 143: Version 2 Multicast Listener Report";
+    reference
+      "RFC3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6";
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REQUEST {
+    base TYPE;
+    description
+      "Type 144: Home Agent Address Discovery Request Message.";
+    reference "RFC6275: Mobility Support in IPv6";
+
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REPLY {
+    base TYPE;
+    description
+      "Type 145: Home Agent Address Discovery Reply Message.";
+    reference "RFC6275: Mobility Support in IPv6";
+
+  }
+
+  identity MOBILE_PREFIX_SOLICITATION {
+    base TYPE;
+    description
+      "Type 147: Mobile Prefix Solicitation.";
+    reference "RFC6275: Mobility Support in IPv6";
+  }
+
+  identity MOBILE_PREFIX_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 147: Mobile Prefix Advertisement.";
+    reference "RFC6275: Mobility Support in IPv6";
+  }
+
+  identity CERTIFICATION_PATH_SOLICITATION {
+    base TYPE;
+    description
+      "Type 148: Certification Path Soliciation Message.";
+    reference "RFC3971: SEcure Neighbor Discovery (SEND)";
+  }
+
+  identity CERTIFICATION_PATH_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 149: Certification Path Advertisement Message.";
+    reference "RFC3971: SEcure Neighbor Discovery (SEND)";
+  }
+
+  identity MULTICAST_ROUTER_ADVERTISEMENT {
+    base TYPE;
+    description
+      "Type 151: Multicast Router Advertisement.";
+    reference "RFC4286: Multicast Router Discovery";
+  }
+
+  identity MULTICAST_ROUTER_SOLICITATION {
+    base TYPE;
+    description
+      "Type 152: Multicast Router Solicitation.";
+    reference "RFC4286: Multicast Router Discovery";
+  }
+
+  identity MULTICAST_ROUTER_TERMINATION {
+    base TYPE;
+    description
+      "Type 153: Multicast Router Termination.";
+    reference "RFC4286: Multicast Router Discovery";
+  }
+
+  identity FMIPV6 {
+    base TYPE;
+    description
+      "Type 154: Fast handover mode for IPv6.";
+    reference
+      "RFC5568: Mobile IPv6 Fast Handovers";
+  }
+
+  identity RPL_CONTROL {
+    base TYPE;
+    description
+      "Type 155: RPL Control Message.";
+    reference
+      "RFC6550: RPL: IPv6 Routing Protocol for Low-Power and Lossy Networks";
+  }
+
+  identity ILNPV6_LOCATOR_UPDATE {
+    base TYPE;
+    description
+      "Type 156: ILNPv6 Locator Update Message.";
+    reference
+      "RFC6743: ICMP Locator Update Message for
+       the Identifier-Locator Network Protocol for IPv6 (ILNPv6)";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST {
+    base TYPE;
+    description
+      "Type 157: Duplicate address request.";
+    reference
+      "RFC6775: Neighbor Discovery Optimization for IPv6 over Low-Power Wireless
+                Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_CONFIRMATION {
+    base TYPE;
+    description
+      "Type 158: Duplicate address confirmation.";
+    reference
+      "RFC6775: Neighbor Discovery Optimization for IPv6 over Low-Power Wireless
+                Personal Area Networks (6LoWPANs)";
+  }
+
+  identity MPL_CONTROL {
+    base TYPE;
+    description
+      "Type 159: MPL Control Message.";
+    reference
+      "RFC7731: Multicast Protocol for Low-Power and Lossy Networks (MPL)";
+  }
+
+  identity EXT_ECHO_REQUEST {
+    base TYPE;
+    description
+      "Type 160: Extended echo request.";
+    reference
+      "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY {
+    base TYPE;
+    description
+      "Type 161: Extended echo reply.";
+    reference
+      "RFC8335: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity DST_UNREACHABLE_CODE {
+    base CODE;
+    description
+      "ICMPv6 destination unreachable subcodes.";
+  }
+  identity DST_UNREACHABLE_NO_ROUTE_TO_DST {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 0: No route to destination.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+          for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+  identity DST_UNREACHABLE_DST_ADMIN_PROHIBITED {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 1: Communication with destination adminstratively prohibited.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_BEYOND_SCOPE_OF_SRC {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 2: Beyond scope of source address.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_ADDR {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 3: Address unreachable.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_PORT {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 4: Port unreachable.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_SRC_ADDR_FAILED_POLICY {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 5: Source address failed ingress/egress policy.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_REJECT_ROUTE_TO_DST {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 6: Reject route to destination.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity DST_UNREACHABLE_ERR_IN_SRC_ROUTING_HDR {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Code 7: Error in Source Routing Header.";
+    reference "RFC8554: An IPv6 Routing Header for Source Routes with
+              the Routing Protocol for Low-Power and Lossy Networks (RPL)";
+  }
+
+  identity DST_UNREACHABLE_HDRS_TOO_LONG {
+    base DST_UNREACHABLE_CODE;
+    description
+      "Type 8: Headers too long";
+    reference "RFC8883: ICMPv6 Errors for Discarding Packets Due to
+              Processing Limits";
+  }
+
+  identity PACKET_TOO_BIG_CODE {
+    base CODE;
+    description
+      "Subcodes for the ICMPv6 Packet Too Big type.";
+  }
+
+  identity PACKET_TOO_BIG_NO_CODE {
+    base PACKET_TOO_BIG_CODE;
+    description
+      "No code, value 0.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity TIME_EXCEEDED_CODE {
+    base CODE;
+    description
+      "Subcodes for the Time Exceeded ICMPv6 type.";
+  }
+
+  identity TIME_EXCEEDED_HOP_LIMIT {
+    base TIME_EXCEEDED_CODE;
+    description
+      "Code 0: Hop limit exceeded in transit.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+  identity TIME_EXCEEDED_FRAGMENT_REASSEMBLY {
+    base TIME_EXCEEDED_CODE;
+    description
+      "Code 1: Fragment reassembly time exceeded.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PARAM_PROBLEM_CODE {
+    base CODE;
+    description
+      "Subcodes for the Parameter Problem ICMPv6 type.";
+  }
+
+  identity PARAM_PROBLEM_ERR_HDR_FIELD {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Erroneous header field encountered.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PARAM_PROBLEM_UNRECOGNIZED_NET_HDR_TYPE {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Unrecognized Next Header type encountered.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PARAM_PROBLEM_UNRECOGNIZED_IPV6_OPT {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Unrecognized IPv6 option encountered.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity PARAM_PROBLEM_INCOMPLETE_HDR_CHAIN {
+    base PARAM_PROBLEM_CODE;
+    description
+      "IPv6 First Fragment has incomplete IPv6 Header Chain.";
+    reference
+      "RFC7112: Implications of Oversized IPv6 Header Chains";
+  }
+
+  identity PARAM_PROBLEM_SR_UPPER_HDR_ERR {
+    base PARAM_PROBLEM_CODE;
+    description
+      "SR Upper-layer Header Error";
+    reference
+      "RFC8754: IPv6 Segment Routing Header (SRH)";
+  }
+
+  identity PARAM_PROBLEM_UNRECOGNIZED_NEXT_HDR_TYPE {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Unrecognized Next Header type encountered by intermediate node";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity PARAM_PROBLEM_EXT_HDR_TOO_BIG {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Extension header too big.";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity PARAM_PROBLEM_EXT_HDR_CHAIN_TOO_LONG {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Extension header chain too long.";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity PARAM_PROBLEM_TOO_MANY_EXT_HDRS {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Too many extension headers.";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity PARAM_PROBLEM_TOO_MANY_OPTS {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Too many options in extension header.";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity PARAM_PROBLEM_OPT_TOO_BIG {
+    base PARAM_PROBLEM_CODE;
+    description
+      "Option too big.";
+    reference
+      "RFC8883: ICMPv6 Errors for Discarding Packets Due to Processing Limits";
+  }
+
+  identity ECHO_REQUEST_CODE {
+    base CODE;
+    description
+      "Subcodes for the ICMPv6 echo request type.";
+  }
+
+  identity ECHO_REQUEST_NO_CODE {
+    base ECHO_REQUEST_CODE;
+    description
+      "No code.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity ECHO_REPLY_CODE {
+    base CODE;
+    description
+      "Subcodes for the ICMPv6 echo reply subcode.";
+  }
+
+  identity ECHO_REPLY_NO_CODE {
+    base ECHO_REPLY_CODE;
+    description
+      "No code.";
+    reference "RFC4443: Internet Control Message Protocol (ICMPv6)
+              for the Internet Protocol Version 6 (IPv6) Specification";
+  }
+
+  identity MULTICAST_LISTENER_QUERY_CODE {
+    base CODE;
+    description
+      "Subcodes for the multicast listener query ICMPv6 type.";
+  }
+
+  identity MULTICAST_LISTENER_QUERY_NO_CODE {
+    base MULTICAST_LISTENER_QUERY_CODE;
+    description
+      "No code.";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity MULTICAST_LISTENER_REPORT_CODE {
+    base CODE;
+    description
+      "Subcodes for the multicast listener report ICMPv6 type.";
+  }
+
+  identity MULTICAST_LISTENER_REPORT_NO_CODE {
+    base MULTICAST_LISTENER_REPORT_CODE;
+    description
+      "No code.";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity MULTICAST_LISTENER_DONE_CODE {
+    base CODE;
+    description
+      "Subcodes for the multicast listener done ICMPv6 type.";
+  }
+
+  identity MULTICAST_LISTENER_DONE_NO_CODE {
+    base MULTICAST_LISTENER_DONE_CODE;
+    description
+      "No code.";
+    reference
+      "RFC2710: Multicast Listener Discovery (MLD) for IPv6";
+  }
+
+  identity ROUTER_SOLICITATION_CODE {
+    base CODE;
+    description
+      "Subcodes for the router solicitation ICMPv6 type.";
+  }
+  identity ROUTER_SOLICITATION_NO_CODE {
+    base ROUTER_SOLICITATION_CODE;
+    description
+      "No code.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity ROUTER_ADVERTISEMENT_CODE {
+    base CODE;
+    description
+      "Subcodes for the router advertisement ICMPv6 type.";
+  }
+
+  identity ROUTER_ADVERTISEMENT_NO_CODE {
+    base ROUTER_ADVERTISEMENT_CODE;
+    description
+      "No code.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity NEIGHBOR_SOLICITATION_CODE {
+    base CODE;
+    description
+      "Subcodes for the router solicitation ICMPv6 type.";
+  }
+
+  identity NEIGHBOR_SOLICITATION_NO_CODE {
+    base NEIGHBOR_SOLICITATION_CODE;
+    description
+      "No code.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity NEIGHBOR_ADVERTISEMENT_CODE {
+    base CODE;
+    description
+      "Subcodes for the neighbor advertisement ICMPv6 type.";
+  }
+
+  identity NEIGHBOR_ADVERTISEMENT_NO_CODE {
+    base NEIGHBOR_ADVERTISEMENT_CODE;
+    description
+      "No code.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity REDIRECT_CODE {
+    base CODE;
+    description
+      "Subcodes for the redirect ICMPv6 type.";
+  }
+
+  identity REDIRECT_NO_CODE {
+    base REDIRECT_CODE;
+    description
+      "No code.";
+    reference
+      "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+  }
+
+  identity RENUMBERING_CODE {
+    base CODE;
+    description
+      "Subcodes for the redirect ICMPv6 type for renumbering.";
+  }
+
+  identity RENUMBERING_COMMAND {
+    base RENUMBERING_CODE;
+    description
+      "Router renumbering command.";
+    reference
+      "RFC2894: Router Renumbering for IPv6";
+  }
+
+  identity RENUNBERING_RESULT {
+    base RENUMBERING_CODE;
+    description
+      "Router renumbering result.";
+    reference
+      "RFC2894: Router Renumbering for IPv6";
+  }
+
+  identity RENUNBERING_SEQ_NUM_RESET {
+    base RENUMBERING_CODE;
+    description
+      "Router renumbering sequence number reset.";
+    reference
+      "RFC2894: Router Renumbering for IPv6";
+  }
+
+  identity NODE_INFORMATION_QUERY_CODE {
+    base CODE;
+    description
+      "Subcodes for the node information query ICMPv6 type.";
+  }
+
+  identity NODE_INFORMATION_QUERY_IPV6_ADDR {
+    base NODE_INFORMATION_QUERY_CODE;
+    description
+      "The data field contains an IPv6 address which is the subject of the
+      query.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity NODE_INFORMATION_QUERY_NAME {
+    base NODE_INFORMATION_QUERY_CODE;
+    description
+      "The data field contains a name which is the subject of the
+      query.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity NODE_INFORMATION_QUERY_IPV4_ADDR {
+    base NODE_INFORMATION_QUERY_CODE;
+    description
+      "The data field contains an IPv4 address which is the subject of the
+      query.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity NDDE_INFORMATION_RESPONSE_CODE {
+    base CODE;
+    description
+      "Subcodes for the node information response ICMPv6 type.";
+  }
+
+  identity NODE_INFORMATION_RESPONSE_SUCCESS {
+    base NDDE_INFORMATION_RESPONSE_CODE;
+    description
+      "A successful reply.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity NODE_INFORMATION_RESPONSE_REFUSED {
+    base NDDE_INFORMATION_RESPONSE_CODE;
+    description
+      "The responder refuses to supply the answer.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity NODE_INFORMATION_RESPONSE_UNKNOWN {
+    base NDDE_INFORMATION_RESPONSE_CODE;
+    description
+      "The query type is unknown to the responder.";
+    reference
+      "RFC4620: IPv6 Node Information Queries";
+  }
+
+  identity INVERSE_NEIGHBOR_ADVERTISEMENT_CODE {
+    base CODE;
+    description
+      "Subcodes for the Inverse Neighbor Discovery ICMPv6 type.";
+  }
+
+  identity INVERSE_NEIGHBOR_ADVERTISEMENT_NO_CODE {
+    base INVERSE_NEIGHBOR_ADVERTISEMENT_CODE;
+    description
+      "No code.";
+    reference
+      "RFC3122: Extensions to IPv6 Neighbor Discovery for Inverse Discovery
+      Specification";
+  }
+
+  identity INVERSE_NEIGHBOR_SOLICITATION_CODE {
+    base CODE;
+    description
+      "Subcode for the inverse neighbor solicitation ICMP6 type.";
+  }
+
+  identity INVERSE_NEIGHBOR_SOLICITATION_NO_CODE {
+    base INVERSE_NEIGHBOR_SOLICITATION_CODE;
+    description
+      "No code.";
+    reference
+      "RFC3122: Extensions to IPv6 Neighbor Discovery for Inverse Discovery
+      Specification";
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REQUEST_CODE {
+    base CODE;
+    description
+      "Subcodes for the Home Agent Address Discovery Request ICMPv6 type.";
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REQUEST_NO_CODE {
+    base HOME_AGENT_ADDRESS_DISCOVERY_REQUEST_CODE;
+    description
+      "No code.";
+    reference "RFC3775: Mobility Support in IPv6";
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REPLY_CODE {
+    base CODE;
+    description
+      "Subcodes for the Home Agent Address Discovery Reply ICMPv6 type.";
+  }
+
+  identity HOME_AGENT_ADDRESS_DISCOVERY_REPLY_NO_CODE {
+    base HOME_AGENT_ADDRESS_DISCOVERY_REPLY_CODE;
+    description
+      "No code.";
+    reference "RFC3775: Mobility Support in IPv6";
+  }
+
+  identity MOBILE_PREFIX_SOLICITATION_CODE {
+    base CODE;
+    description
+      "Subcodes for the Mobile Prefix Solicitation ICMPv6 type.";
+  }
+
+  identity MOBILE_PREFIX_SOLICITATION_NO_CODE {
+    base MOBILE_PREFIX_SOLICITATION_CODE;
+    description
+      "No code.";
+    reference "RFC3775: Mobility Support in IPv6";
+  }
+
+  identity MOBILE_PREFIX_ADVERTISEMENT_CODE {
+    base CODE;
+    description
+      "Subcodes for the Mobile Prefix Advertisement ICMPv6 type.";
+  }
+
+  identity MOBILE_PREFIX_ADVERTISEMENT_NO_CODE {
+    base MOBILE_PREFIX_ADVERTISEMENT_CODE;
+    description
+      "No code.";
+    reference "RFC3775: Mobility Support in IPv6";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_CODE {
+    base CODE;
+    description
+      "Subcodes for the Duplicate Address Request ICMPv6 type.";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_DAR {
+    base DUPLICATE_ADDRESS_REQUEST_CODE;
+    description
+      "DAR message";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_EDAR_ROVR64 {
+    base DUPLICATE_ADDRESS_REQUEST_CODE;
+    description
+      "EDAR message with 64-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_EDAR_ROVR128 {
+    base DUPLICATE_ADDRESS_REQUEST_CODE;
+    description
+      "EDAR message with 128-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_EDAR_ROVR192 {
+    base DUPLICATE_ADDRESS_REQUEST_CODE;
+    description
+      "EDAR message with 192-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REQUEST_EDAR_ROVR256 {
+    base DUPLICATE_ADDRESS_REQUEST_CODE;
+    description
+      "EDAR message with 256-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REPLY_CODE {
+    base CODE;
+    description
+      "Subcodes for the Duplicate Address Confirmation Code ICMPv6 type.";
+  }
+
+  identity DUPLICATE_ADDRESS_REPLY_DAC {
+    base DUPLICATE_ADDRESS_REPLY_CODE;
+    description
+      "DAC message";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+  identity DUPLICATE_ADDRESS_REPLY_EDAC_ROVR64 {
+    base DUPLICATE_ADDRESS_REPLY_CODE;
+    description
+      "EDAC message with 64-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REPLY_EDAC_ROVR128 {
+    base DUPLICATE_ADDRESS_REPLY_CODE;
+    description
+      "EDAC message with 128-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REPLY_EDAC_ROVR192 {
+    base DUPLICATE_ADDRESS_REPLY_CODE;
+    description
+      "EDAC message with 192-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity DUPLICATE_ADDRESS_REPLY_EDAC_ROVR256 {
+    base DUPLICATE_ADDRESS_REPLY_CODE;
+    description
+      "EDAC message with 256-bit ROVR field.";
+    reference "RFC6775: Neighbor Discovery Optimization for IPv6 over
+              Low-Power Wireless Personal Area Networks (6LoWPANs)";
+  }
+
+  identity EXT_ECHO_REQUEST_CODE {
+    base CODE;
+    description
+      "Subcodes for the extended echo request ICMPv6 type.";
+  }
+
+  identity EXT_ECHO_REQUEST_NO_ERROR {
+    base EXT_ECHO_REQUEST_CODE;
+    description
+      "No error.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_CODE {
+    base CODE;
+    description
+      "Subcodes for the extended echo reply ICMPv6 type.";
+  }
+
+  identity EXT_ECHO_REPLY_NO_ERROR {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "No error.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_MALFORMED_QUERY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Malformed query.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_NO_SUCH_INTERFACE {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "No such interface.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_NO_SUCH_TABLE_ENTRY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "No such table entry.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+
+  identity EXT_ECHO_REPLY_MULTIPLE_INTF_SATISFY_QUERY {
+    base EXT_ECHO_REPLY_CODE;
+    description
+      "Multiple interfaces satisfy query.";
+    reference
+      "RFC8355: PROBE: A Utility for Probing Interfaces";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..b5f467a74278c5179aab0ede32b05e4280309081
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match-types.yang
@@ -0,0 +1,374 @@
+module openconfig-packet-match-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/packet-match-types";
+
+  prefix "oc-pkt-match-types";
+
+  // import some basic types
+  import openconfig-inet-types { prefix oc-inet; }
+  import openconfig-extensions { prefix oc-ext; }
+
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines common types for use in models requiring
+    data definitions related to packet matches.";
+
+  oc-ext:openconfig-version "1.3.3";
+
+  revision "2023-01-29" {
+    description
+      "Whitespace cleanup.";
+    reference "1.3.3";
+  }
+
+  revision "2021-07-14" {
+    description
+      "Use auto-generated regex for port-num-range pattern statements";
+    reference "1.3.2";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace.";
+    reference "1.3.1";
+  }
+
+  revision "2021-05-19" {
+    description
+      "Add IP-in-IP protocol.";
+    reference "1.3.0";
+  }
+
+  revision "2021-03-17" {
+    description
+      "Add MPLS filter Support.";
+      reference "1.2.0";
+  }
+
+  revision "2021-01-07" {
+    description
+      "Remove module extension oc-ext:regexp-posix by making pattern regexes
+      conform to RFC7950.
+
+      Types impacted:
+      - port-num-range";
+    reference "1.1.0";
+  }
+
+  revision "2020-10-20" {
+    description
+      "Fix pattern regex for port-num-range.";
+    reference "1.0.4";
+  }
+
+  revision "2020-06-30" {
+    description
+      "Add OpenConfig POSIX pattern extensions.";
+    reference "1.0.3";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "1.0.2";
+  }
+
+  revision "2018-04-15" {
+    description
+        "Corrected description and range for ethertype typedef";
+    reference "1.0.1";
+  }
+
+  revision "2017-05-26" {
+    description
+        "Separated IP matches into AFs";
+    reference "1.0.0";
+  }
+
+    revision "2016-08-08" {
+    description
+      "OpenConfig public release";
+    reference "0.2.0";
+  }
+
+  revision "2016-04-27" {
+    description
+      "Initial revision";
+    reference "TBD";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+
+  //TODO: should replace this with an official IEEE module
+  // when available.  Only a select number of types are
+  // defined in this identity.
+  identity ETHERTYPE {
+    description
+      "Base identity for commonly used Ethertype values used
+      in packet header matches on Ethernet frames.  The Ethertype
+      indicates which protocol is encapsulated in the Ethernet
+      payload.";
+    reference
+      "IEEE 802.3";
+  }
+
+  identity ETHERTYPE_IPV4 {
+    base ETHERTYPE;
+    description
+      "IPv4 protocol (0x0800)";
+  }
+
+  identity ETHERTYPE_ARP {
+    base ETHERTYPE;
+    description
+      "Address resolution protocol (0x0806)";
+  }
+
+  identity ETHERTYPE_VLAN {
+    base ETHERTYPE;
+    description
+      "VLAN-tagged frame (as defined by IEEE 802.1q) (0x8100). Note
+      that this value is also used to represent Shortest Path
+      Bridging (IEEE 801.1aq) frames.";
+  }
+
+  identity ETHERTYPE_IPV6 {
+    base ETHERTYPE;
+    description
+      "IPv6 protocol (0x86DD)";
+  }
+
+  identity ETHERTYPE_MPLS {
+    base ETHERTYPE;
+    description
+      "MPLS unicast (0x8847)";
+  }
+
+  identity ETHERTYPE_LLDP {
+    base ETHERTYPE;
+    description
+      "Link Layer Discovery Protocol (0x88CC)";
+  }
+
+  identity ETHERTYPE_ROCE {
+    base ETHERTYPE;
+    description
+      "RDMA over Converged Ethernet (0x8915)";
+  }
+
+
+  //TODO: should replace this with an official IANA module when
+  //available.  Only a select set of protocols are defined with
+  //this identity.
+  identity IP_PROTOCOL {
+    description
+      "Base identity for commonly used IP protocols used in
+      packet header matches";
+    reference
+      "IANA Assigned Internet Protocol Numbers";
+  }
+
+  identity IP_TCP {
+    base IP_PROTOCOL;
+    description
+      "Transmission Control Protocol (6)";
+  }
+
+  identity IP_UDP  {
+    base IP_PROTOCOL;
+    description
+      "User Datagram Protocol (17)";
+  }
+
+  identity IP_ICMP {
+    base IP_PROTOCOL;
+    description
+      "Internet Control Message Protocol (1)";
+  }
+
+  identity IP_IGMP {
+    base IP_PROTOCOL;
+    description
+      "Internet Group Membership Protocol (2)";
+  }
+
+  identity IP_PIM {
+    base IP_PROTOCOL;
+    description
+      "Protocol Independent Multicast (103)";
+  }
+
+  identity IP_RSVP {
+    base IP_PROTOCOL;
+    description
+      "Resource Reservation Protocol (46)";
+  }
+
+  identity IP_GRE {
+    base IP_PROTOCOL;
+    description
+      "Generic Routing Encapsulation (47)";
+  }
+
+  identity IP_AUTH {
+    base IP_PROTOCOL;
+    description
+      "Authentication header, e.g., for IPSEC (51)";
+  }
+
+  identity IP_L2TP {
+    base IP_PROTOCOL;
+    description
+      "Layer Two Tunneling Protocol v.3 (115)";
+  }
+
+  identity IP_IN_IP {
+    base IP_PROTOCOL;
+    description
+      "IP-in-IP tunneling (4)";
+    reference
+      "RFC2003: IP Encapsulation within IP";
+  }
+
+  identity TCP_FLAGS {
+    description
+      "Common TCP flags used in packet header matches";
+    reference
+      "IETF RFC 793 - Transmission Control Protocol
+      IETF RFC 3168 - The Addition of Explicit Congestion
+      Notification (ECN) to IP";
+  }
+
+  identity TCP_SYN {
+    base TCP_FLAGS;
+    description
+      "TCP SYN flag";
+  }
+
+  identity TCP_FIN {
+    base TCP_FLAGS;
+    description
+      "TCP FIN flag";
+  }
+
+  identity TCP_RST {
+    base TCP_FLAGS;
+    description
+      "TCP RST flag";
+  }
+
+  identity TCP_PSH {
+    base TCP_FLAGS;
+    description
+      "TCP push flag";
+  }
+
+  identity TCP_ACK {
+    base TCP_FLAGS;
+    description
+      "TCP ACK flag";
+  }
+
+  identity TCP_URG {
+    base TCP_FLAGS;
+    description
+      "TCP urgent flag";
+  }
+
+  identity TCP_ECE {
+    base TCP_FLAGS;
+    description
+      "TCP ECN-Echo flag.  If the SYN flag is set, indicates that
+      the TCP peer is ECN-capable, otherwise indicates that a
+      packet with Congestion Experienced flag in the IP header
+      is set";
+  }
+
+  identity TCP_CWR {
+    base TCP_FLAGS;
+    description
+      "TCP Congestion Window Reduced flag";
+  }
+
+  // typedef statements
+
+  typedef port-num-range {
+    type union {
+      type string {
+        pattern
+          '(0{0,4}[0-9]|0{0,3}[1-9][0-9]|0{0,2}[1-9][0-9]{2}|'
+          + '0?[1-9][0-9]{3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|'
+          + '655[0-2][0-9]|6553[0-5])\.\.(0{0,4}[0-9]|0{0,3}[1-9][0-9]|'
+          + '0{0,2}[1-9][0-9]{2}|0?[1-9][0-9]{3}|[1-5][0-9]{4}|'
+          + '6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])';
+        oc-ext:posix-pattern
+          '^((0{0,4}[0-9]|0{0,3}[1-9][0-9]|0{0,2}[1-9][0-9]{2}|'
+          + '0?[1-9][0-9]{3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|'
+          + '655[0-2][0-9]|6553[0-5])\.\.(0{0,4}[0-9]|0{0,3}[1-9][0-9]|'
+          + '0{0,2}[1-9][0-9]{2}|0?[1-9][0-9]{3}|[1-5][0-9]{4}|'
+          + '6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))$';
+      }
+      type oc-inet:port-number;
+      type enumeration {
+        enum ANY {
+          description
+            "Indicates any valid port number (e.g., wildcard)";
+        }
+      }
+    }
+    description
+      "Port numbers may be represented as a single value,
+      an inclusive range as .., or as ANY to
+      indicate a wildcard.";
+  }
+
+  typedef ip-protocol-type {
+    type union {
+      type uint8 {
+        range 0..254;
+      }
+      type identityref {
+        base IP_PROTOCOL;
+      }
+    }
+    description
+      "The IP protocol number may be expressed as a valid protocol
+      number (integer) or using a protocol type defined by the
+      IP_PROTOCOL identity";
+  }
+
+  typedef ethertype-type {
+    type union {
+      type uint16 {
+        range 1536..65535;
+      }
+      type identityref {
+        base ETHERTYPE;
+      }
+    }
+    description
+      "The Ethertype value may be expressed as a 16-bit number in
+      decimal notation, or using a type defined by the
+      ETHERTYPE identity";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match.yang
new file mode 100644
index 0000000000000000000000000000000000000000..c287986642cc5bccfd1273570a84f77f1a4b0fcd
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/acl/openconfig-packet-match.yang
@@ -0,0 +1,727 @@
+module openconfig-packet-match {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/header-fields";
+
+  prefix "oc-pkt-match";
+
+  // import some basic types
+  import openconfig-inet-types { prefix oc-inet; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-packet-match-types { prefix oc-pkt-match-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-mpls-types { prefix oc-mpls; }
+  import openconfig-defined-sets { prefix oc-sets; }
+  import openconfig-icmpv4-types { prefix oc-icmpv4-types; }
+  import openconfig-icmpv6-types { prefix oc-icmpv6-types; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines data related to packet header fields
+    used in matching operations, for example in ACLs.  When a
+    field is omitted from a match expression, the effect is a
+    wildcard ('any') for that field.";
+
+
+  oc-ext:openconfig-version "2.1.0";
+
+  revision "2023-03-01" {
+    description
+      "Add ICMP Fields for filtering.";
+    reference "2.1.0";
+  }
+
+  revision "2023-01-27" {
+    description
+      "Update the mechanism to match detailed transport flags,
+      adding means for AND/OR in the explicitly specified flags
+      and commonly supported match aliases.";
+    reference "2.0.0";
+  }
+
+  revision "2022-06-01" {
+    description
+      "Add the ability to match source/destination ipv4 and
+      ipv6 prefix list and source/destination port list ";
+    reference "1.4.0";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace.";
+    reference "1.3.1";
+  }
+
+  revision "2021-05-19" {
+    description
+      "Add the ability to match multiple DSCPs in a rule.";
+    reference "1.3.0";
+  }
+
+  revision "2021-03-17" {
+    description
+      "Add MPLS filter Support.";
+      reference "1.2.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "1.1.1";
+  }
+
+  revision "2017-12-15" {
+    description
+      "Add MPLS packet field matches";
+    reference "1.1.0";
+  }
+
+  revision "2017-05-26" {
+    description
+      "Separated IP matches into AFs";
+    reference "1.0.0";
+  }
+
+  revision "2016-08-08" {
+    description
+      "OpenConfig public release";
+    reference "0.2.0";
+  }
+
+  revision "2016-04-27" {
+    description
+      "Initial revision";
+    reference "TBD";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+
+  // Physical Layer fields
+  // ethernet-header
+  grouping ethernet-header-config {
+    description
+      "Configuration data of fields in Ethernet header.";
+
+    leaf source-mac {
+      type oc-yang:mac-address;
+      description
+        "Source IEEE 802 MAC address.";
+    }
+
+    leaf source-mac-mask {
+      type oc-yang:mac-address;
+      description
+        "Source IEEE 802 MAC address mask.";
+    }
+
+    leaf destination-mac {
+      type oc-yang:mac-address;
+      description
+        "Destination IEEE 802 MAC address.";
+    }
+
+    leaf destination-mac-mask {
+      type oc-yang:mac-address;
+      description
+        "Destination IEEE 802 MAC address mask.";
+    }
+
+    leaf ethertype {
+      type oc-pkt-match-types:ethertype-type;
+      description
+        "Ethertype field to match in Ethernet packets";
+    }
+  }
+
+  grouping ethernet-header-state {
+    description
+      "State information of fields in Ethernet header.";
+  }
+
+  grouping ethernet-header-top {
+    description
+      "Top level container for fields in Ethernet header.";
+
+    container l2 {
+      description
+        "Ethernet header fields";
+
+      container config {
+        description
+          "Configuration data";
+        uses ethernet-header-config;
+      }
+
+      container state {
+        config false;
+        description
+          "State Information.";
+        uses ethernet-header-config;
+        uses ethernet-header-state;
+      }
+    }
+  }
+
+  grouping mpls-header-top {
+    description
+      "Top-level container for fields in an MPLS header.";
+
+    container mpls {
+      description
+        "MPLS header fields";
+
+      container config {
+        description
+          "Configuration parameters relating to fields within
+          the MPLS header.";
+        uses mpls-header-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state parameters relating to fields
+          within the MPLS header";
+        uses mpls-header-config;
+      }
+    }
+  }
+
+  grouping mpls-header-config {
+    description
+      "Configuration parameters relating to matches within
+      MPLS header fields.";
+
+    leaf traffic-class {
+      type oc-mpls:mpls-tc;
+      description
+        "The value of the MPLS traffic class (TC) bits,
+        formerly known as the EXP bits.";
+    }
+
+    leaf start-label-value {
+      type oc-mpls:mpls-label;
+      description
+        "Match MPLS label value on the MPLS header.
+        The usage of this field indicated the upper
+        range value in the top of the stack.
+        The range that is used is inclusive. The match that
+        is done for a particular received pkt_label is:
+        start-label-value <= pkt_label <= end-label-value.
+        The 20-bit label value in an MPLS label
+        stack as specified in RFC 3032.
+        This label value does not include the
+        encodings of Traffic Class and TTL.";
+      }
+
+    leaf end-label-value {
+      type oc-mpls:mpls-label;
+      description
+        "Match MPLS label value on the MPLS header.
+        The usage of this field indicated the upper
+        range value in the top of the stack.
+        The range that is used is inclusive. The match that
+        is done for a particular received pkt_label is:
+        start-label-value <= pkt_label <= end-label-value.
+        The 20-bit label value in an MPLS label
+        stack as specified in RFC 3032.
+        This label value does not include the
+        encodings of Traffic Class and TTL.";
+      }
+
+    leaf ttl-value {
+      type uint8;
+      description
+        "Time-to-live MPLS packet value match.";
+      reference
+        "RFC 3032: MPLS Label Stack Encoding.";
+    }
+  }
+
+  grouping ip-protocol-fields-common-config {
+    description
+      "IP protocol fields common to IPv4 and IPv6";
+
+    leaf dscp {
+      type oc-inet:dscp;
+      description
+        "Value of diffserv codepoint.";
+    }
+
+    leaf-list dscp-set {
+      type oc-inet:dscp;
+      description
+        "A list of DSCP values to be matched for incoming packets. AN OR match should
+        be performed, such that a packet must match one of the values defined in this
+        list. If the field is left empty then any DSCP value matches unless the 'dscp'
+        leaf is specified. It is not valid to specify both 'dscp' and 'dscp-set together.'";
+    }
+
+    leaf length {
+      type uint16;
+      description
+        "In the IPv4 header field, this field is known as the Total
+         Length.  Total Length is the length of the datagram, measured
+         in octets, including internet header and data.
+         In the IPv6 header field, this field is known as the Payload
+         Length, which is the length of the IPv6 payload, i.e., the rest
+         of the packet following the IPv6 header, in octets.";
+      reference
+        "RFC 791: Internet Protocol
+         RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.";
+    }
+
+    leaf protocol {
+      type oc-pkt-match-types:ip-protocol-type;
+      description
+        "The protocol carried in the IP packet, expressed either
+        as its IP protocol number, or by a defined identity.";
+    }
+
+    leaf hop-limit {
+      type uint8 {
+        range 0..255;
+      }
+      description
+        "The IP packet's hop limit -- known as TTL (in hops) in
+        IPv4 packets, and hop limit in IPv6";
+    }
+  }
+
+  // IP Layer
+  // ip-protocol-fields
+  grouping ipv4-protocol-fields-config {
+    description
+      "Configuration data of IP protocol fields
+      for IPv4";
+
+    leaf source-address {
+      type oc-inet:ipv4-prefix;
+      description
+        "Source IPv4 address prefix.";
+    }
+
+    leaf source-address-prefix-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets"
+            + "/oc-sets:ipv4-prefix-set/oc-sets:name";
+       }
+      description
+          "Reference to a IPv4 address prefix Set
+          to match the source address";
+    }
+
+    leaf destination-address {
+      type oc-inet:ipv4-prefix;
+      description
+        "Destination IPv4 address prefix.";
+    }
+
+    leaf destination-address-prefix-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:ipv4-prefix-sets"
+            + "/oc-sets:ipv4-prefix-set/oc-sets:name";
+       }
+      description
+          "Reference to a IPv4 address prefix set
+          to match the destination address";
+    }
+
+    uses ip-protocol-fields-common-config;
+
+  }
+
+  grouping ipv4-protocol-fields-state {
+    description
+      "State information of IP header fields for IPv4";
+  }
+
+  grouping ipv4-protocol-fields-top {
+    description
+      "IP header fields for IPv4";
+
+    container ipv4 {
+      description
+        "Top level container for IPv4 match field data";
+
+      container config {
+        description
+          "Configuration data for IPv4 match fields";
+        uses ipv4-protocol-fields-config;
+      }
+
+      container state {
+        config false;
+        description
+          "State information for IPv4 match fields";
+        uses ipv4-protocol-fields-config;
+        uses ipv4-protocol-fields-state;
+      }
+      uses ip-icmpv4-header-fields-top;
+    }
+  }
+
+  grouping ipv6-protocol-fields-config {
+    description
+      "Configuration data for IPv6 match fields";
+
+    leaf source-address {
+      type oc-inet:ipv6-prefix;
+      description
+        "Source IPv6 address prefix.";
+    }
+
+    leaf source-address-prefix-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets"
+            + "/oc-sets:ipv6-prefix-set/oc-sets:name";
+       }
+      description
+          "Reference to a IPv6 address prefix set
+          to match the source address";
+    }
+
+    leaf source-flow-label {
+      type oc-inet:ipv6-flow-label;
+      description
+        "Source IPv6 Flow label.";
+    }
+
+    leaf destination-address {
+      type oc-inet:ipv6-prefix;
+      description
+        "Destination IPv6 address prefix.";
+    }
+
+    leaf destination-address-prefix-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:ipv6-prefix-sets"
+            + "/oc-sets:ipv6-prefix-set/oc-sets:name";
+       }
+      description
+          "Reference to a IPv6 address prefix set
+          to match the destination address";
+    }
+
+    leaf destination-flow-label {
+      type oc-inet:ipv6-flow-label;
+      description
+        "Destination IPv6 Flow label.";
+    }
+
+    uses ip-protocol-fields-common-config;
+  }
+
+  grouping ipv6-protocol-fields-state {
+    description
+      "Operational state data for IPv6 match fields";
+  }
+
+  grouping ipv6-protocol-fields-top {
+    description
+      "Top-level grouping for IPv6 match fields";
+
+    container ipv6 {
+      description
+        "Top-level container for IPv6 match field data";
+
+      container config {
+        description
+          "Configuration data for IPv6 match fields";
+
+        uses ipv6-protocol-fields-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for IPv6 match fields";
+
+        uses ipv6-protocol-fields-config;
+        uses ipv6-protocol-fields-state;
+      }
+      uses ip-icmpv6-header-fields-top;
+    }
+  }
+
+  // Transport fields
+  grouping transport-fields-config {
+    description
+      "Configuration data of transport-layer packet fields";
+
+    leaf source-port {
+      type oc-pkt-match-types:port-num-range;
+      description
+        "Source port or range";
+    }
+
+    leaf source-port-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:port-sets"
+            + "/oc-sets:port-set/oc-sets:name";
+       }
+      description
+          "Reference to a port set
+          to match the source port";
+    }
+
+    leaf destination-port {
+      type oc-pkt-match-types:port-num-range;
+      description
+        "Destination port or range";
+    }
+
+    leaf destination-port-set {
+      type leafref {
+         path "/oc-sets:defined-sets/oc-sets:port-sets"
+            + "/oc-sets:port-set/oc-sets:name";
+       }
+      description
+          "Reference to a port set
+          to match the destination port";
+    }
+
+    leaf detail-mode {
+      type enumeration {
+        enum EXPLICIT {
+          description
+            "Specifies that the mode for matching details at the transport
+             layer is to explicitly match transport flags.";
+        }
+        enum BUILTIN {
+          description
+            "Specifies that the mode for matching details at the transport
+            layer is to using implementation built-ins which may map to
+            multiple flags.";
+        }
+      }
+      description
+        "Mode that is used for matching detailed fields at the transport
+        layer. When EXPLICIT is specified, the implementation should
+        match based on the explicit flags that are specified in the
+        corresponding leaf. When BUILTIN is specified, the implementation
+        must expand the contents of the corresponding leaf to the flags
+        and/or fields that match the pre-defined built-in values.";
+    }
+
+    leaf explicit-detail-match-mode {
+      type enumeration {
+        enum ANY {
+          description
+            "Matches of the explicit-detail-flags field are treated as
+            an OR between the values in the list.";
+        }
+        enum ALL {
+          description
+            "Matches of the explicit-details-flags field are treated
+            as an AND of the values in the list.";
+        }
+      }
+      description
+        "Specifies how the contents of the explicit-details-flags list
+        are to be treated. ANY implies that any of the flags may match,
+        where ALL indicates that all the flags must be matched.";
+      when "../detail-mode = 'EXPLICIT'" {
+        description
+          "This leaf is only valid when the mode for matches is specified to
+          be explicit.";
+      }
+    }
+
+    leaf-list explicit-tcp-flags {
+      type identityref {
+        base oc-pkt-match-types:TCP_FLAGS;
+      }
+      description
+        "An explicit list of the TCP flags that are to be matched. The
+        mechanism for the match is specified by the explicit-detail-match-mode
+        leaf.";
+      when "../detail-mode = 'EXPLICIT'" {
+        description
+          "This leaf is only valid when the mode for matches is specified to
+          be explicit.";
+      }
+    }
+
+    leaf builtin-detail {
+      type enumeration {
+        enum TCP_INITIAL {
+          description
+            "Matches the first packet of a TCP session based on a packet
+            not having the ACK flag set, and having the SYN flag set.";
+        }
+        enum TCP_ESTABLISHED {
+          description
+            "Matches an established TCP session based on a packet having
+            the ACK or RST flags set. This does not match the first
+            packet.";
+        }
+        enum FRAGMENT {
+          description
+            "Matches non-zero values of the fragment-offset field, indicating
+            this packet is a follow up to a fragmented datagram.";
+        }
+      }
+      description
+        "Specifies a built-in (alias) for a match condition that matches
+        multiple flags, or specifies particular logic as to the flag matches
+        to be implemented. This leaf is only valid when the detail-match-mode
+        leaf is BUILTIN.";
+      when "../detail-mode = 'BUILTIN'" {
+        description
+          "This leaf is only valid when the mode for matches is specified to
+          be builtin.";
+      }
+    }
+  }
+
+  grouping transport-fields-state {
+    description
+      "State data of transport-fields";
+  }
+
+  grouping transport-fields-top {
+    description
+      "Destination transport-fields top level grouping";
+
+    container transport {
+      description
+        "Transport fields container";
+
+      container config {
+        description
+          "Configuration data";
+        uses transport-fields-config;
+      }
+
+      container state {
+        config false;
+        description
+          "State data";
+        uses transport-fields-config;
+        uses transport-fields-state;
+      }
+    }
+  }
+
+  grouping ip-icmpv4-header-fields-top {
+    description
+      "Top grouping for ICMPv4 filtering";
+
+    container icmpv4 {
+      description
+        "Top container for ICMPv4 filtering";
+
+      container config {
+        description
+          "Configuration attributes for ICMPv4 filtering";
+
+        uses ip-icmpv4-header-fields-config;
+      }
+
+      container state {
+        description
+          "State attributes for ICMPv4 filtering";
+        config false;
+
+        uses ip-icmpv4-header-fields-config;
+      }
+    }
+  }
+
+  grouping ip-icmpv6-header-fields-top {
+    description
+      "Top grouping for ICMPv6 filtering";
+
+    container icmpv6 {
+      description
+        "Top container for ICMPv6 filtering";
+
+      container config {
+        description
+          "Configuration attributes for ICMPv6 filtering";
+
+        uses ip-icmpv6-header-fields-config;
+      }
+
+      container state {
+        description
+          "State attributes for ICMPv6 filtering";
+        config false;
+
+        uses ip-icmpv6-header-fields-config;
+      }
+    }
+  }
+
+  grouping ip-icmpv4-header-fields-config {
+    description
+      "Collection of ICMPv4 header fields that can be
+       used to set up a match filter.";
+
+    leaf type {
+      type identityref {
+        base oc-icmpv4-types:TYPE;
+      }
+      description
+        "ICMPv4 type to be matched.";
+      reference
+        "RFC 792: Internet Control Message Protocol";
+    }
+
+    leaf code {
+      type identityref {
+        base oc-icmpv4-types:CODE;
+      }
+      description
+        "ICMPv4 code to be matched.";
+      reference
+        "RFC 792: Internet Control Message Protocol";
+    }
+  }
+
+  grouping ip-icmpv6-header-fields-config {
+    description
+      "Collection of ICMPv6 header fields that can be
+       used to set up a match filter.";
+
+    leaf type {
+      type identityref {
+        base oc-icmpv6-types:TYPE;
+      }
+      description
+        "ICMPv6 type to be matched.";
+      reference
+        "RFC 4443: Internet Control Message Protocol (ICMPv6)
+                   for Internet Protocol Version 6 (IPv6)
+                   Specification.";
+    }
+
+    leaf code {
+      type identityref {
+        base oc-icmpv6-types:CODE;
+      }
+      description
+        "ICMP code to be matched.";
+      reference
+        "RFC 4443: Internet Control Message Protocol (ICMPv6)
+                   for Internet Protocol Version 6 (IPv6)
+                   Specification.";
+    }
+  }
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/defined-sets/openconfig-defined-sets.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/defined-sets/openconfig-defined-sets.yang
new file mode 100644
index 0000000000000000000000000000000000000000..0c2a92bece702ae8208d70176b66f0a1342d15e6
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/defined-sets/openconfig-defined-sets.yang
@@ -0,0 +1,227 @@
+module openconfig-defined-sets {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/defined-sets";
+
+  prefix "oc-sets";
+
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-inet-types { prefix oc-inet; }
+  import openconfig-packet-match-types { prefix oc-pkt-match-types; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines configuration and operational state
+    data for defined sets (sets of IPv4 prefixes, sets of
+    IPv6 prefixes, sets of ports, etc). These sets are used,
+    for example, in network access control lists (i.e., filters,
+    rules, etc.) in the matching fields.";
+
+  oc-ext:openconfig-version "1.0.0";
+
+  revision "2022-12-14" {
+    description
+      "Initial version of the defined set model";
+    reference "1.0.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  grouping ipv4-prefix-sets-config {
+    description "Configuration parameters of IPv4 prefix sets.";
+
+    leaf name {
+      type string;
+      description
+         "A user defined name of the IPv4 prefix set.";
+    }
+
+    leaf description {
+      type string;
+      description "A user defined IPv4 prefix set description.";
+    }
+
+    leaf-list prefix {
+       type oc-inet:ipv4-prefix;
+       description
+         "A user defined list of IPv4 prefixes to be used in match
+         conditions. Each entry is a IPv4 + mask combination.";
+    }
+  }
+
+  grouping ipv6-prefix-sets-config {
+    description "Configuration parameters of IPv6 prefix sets.";
+
+    leaf name {
+      type string;
+      description
+        "Name of the IPv6 prefix set.";
+    }
+
+    leaf description {
+      type string;
+      description
+        "A user defined IPv6 prefix set description.";
+    }
+
+    leaf-list prefix {
+       type oc-inet:ipv6-prefix;
+       description
+         "A user defined list of IPv6 prefixes to be used in match
+         conditions. Each entry is a IPv6 + mask combination.";
+    }
+  }
+
+  grouping port-sets-config {
+    description
+      "Configuration parameters of port sets.";
+
+    leaf name {
+        type string;
+        description
+          "A user defined name of the port set.";
+      }
+
+      leaf description {
+        type string;
+        description
+          "A user defined description for the port set";
+      }
+
+      leaf-list port {
+        type oc-pkt-match-types:port-num-range;
+        description
+          "A user defined set of ports to be
+          used in the match conditions.";
+      }
+  }
+
+  grouping defined-sets {
+    description "Configuration of Defined Sets.";
+
+    container ipv4-prefix-sets {
+      description
+        "Container to hold the list of IPv4 prefix sets.";
+
+      list ipv4-prefix-set {
+        key "name";
+        description
+          "List of IPv4 prefix sets.";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name of the IPv4 prefix set.";
+        }
+
+        container config {
+          description
+            "Configuration data for IPv4 prefix sets.";
+          uses ipv4-prefix-sets-config;
+        }
+
+        container state {
+          config false;
+          description
+            "State data for IPv4 prefix sets.";
+          uses ipv4-prefix-sets-config;
+        }
+      }
+    }
+
+    container ipv6-prefix-sets {
+      description
+        "Container to hold the list of IPv4 prefix sets.";
+
+      list ipv6-prefix-set {
+        key "name";
+        description "List of IPv6 prefix sets. Each defined set
+        is uniquely identified by a name";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name of the IPv6 prefix set.";
+        }
+
+        container config {
+          description
+            "Configuration data for IPv6 prefix sets.";
+          uses ipv6-prefix-sets-config;
+        }
+
+        container state {
+          config false;
+          description
+            "State data for prefix lists.";
+          uses ipv6-prefix-sets-config;
+        }
+      }
+    }
+
+    container port-sets {
+      description
+        "Container to hold the list of port sets.";
+
+      list port-set {
+        key "name";
+        description
+          "List of port sets. Each por set is uniquely
+          identified by its name";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Name of the port set. The name is used to
+             reference the set in match conditions.";
+        }
+
+        container config {
+          description
+            "Configuration data for port lists.";
+          uses port-sets-config;
+        }
+
+        container state {
+          config false;
+          description
+            "State data for port lists.";
+          uses port-sets-config;
+        }
+      }
+    }
+  }
+
+
+
+  grouping defined-sets-top {
+    description
+      "Top level grouping for defined-sets";
+
+    container defined-sets {
+      description
+        "Top level enclosing container for defined-set model
+        config and operational state data.";
+      uses defined-sets;
+    }
+  }
+
+  uses defined-sets-top;
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-aggregate.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-aggregate.yang
new file mode 100644
index 0000000000000000000000000000000000000000..f6a577bb0e8625572a3d32da8ee2ac6780bba7ed
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-aggregate.yang
@@ -0,0 +1,249 @@
+module openconfig-if-aggregate {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces/aggregate";
+
+  prefix "oc-lag";
+
+  // import some basic types
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-if-ethernet { prefix oc-eth; }
+  import iana-if-type { prefix ianaift; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "Model for managing aggregated (aka bundle, LAG) interfaces.";
+
+  oc-ext:openconfig-version "2.4.4";
+
+  revision "2022-06-28" {
+    description
+      "Remove reference to invalid oc-ift type check";
+    reference "2.4.4";
+  }
+
+  revision "2020-05-01" {
+    description
+      "Update when statements to reference config nodes
+      from config true elements.";
+    reference "2.4.3";
+  }
+
+  revision "2019-04-16" {
+    description
+      "Update import prefix for iana-if-type module";
+    reference "2.4.2";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "2.3.2";
+  }
+
+  revision "2018-03-23" {
+    description
+      "Fix/cleanup when statements in aggregates model.";
+    reference "2.3.1";
+  }
+
+  revision "2018-01-05" {
+    description
+      "Add logical loopback to interface.";
+    reference "2.3.0";
+  }
+
+  revision "2017-12-22" {
+    description
+      "Add IPv4 proxy ARP configuration.";
+    reference "2.2.0";
+  }
+
+  revision "2017-12-21" {
+    description
+      "Added IPv6 router advertisement configuration.";
+    reference "2.1.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Added Ethernet/IP state data; Add dhcp-client;
+      migrate to OpenConfig types modules; Removed or
+      renamed opstate values";
+    reference "2.0.0";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Fixes to Ethernet interfaces model";
+    reference "1.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  // typedef statements
+
+  typedef aggregation-type {
+    type enumeration {
+      enum LACP {
+        description "LAG managed by LACP";
+      }
+      enum STATIC {
+        description "Statically configured bundle / LAG";
+      }
+    }
+    description
+      "Type to define the lag-type, i.e., how the LAG is
+      defined and managed";
+  }
+
+  // grouping statements
+
+
+  grouping aggregation-logical-config {
+    description
+      "Configuration data for aggregate interfaces";
+
+
+    leaf lag-type {
+      type aggregation-type;
+      description
+        "Sets the type of LAG, i.e., how it is
+        configured / maintained";
+    }
+
+    leaf min-links {
+      type uint16;
+      description
+        "Specifies the mininum number of member
+        interfaces that must be active for the aggregate interface
+        to be available";
+    }
+  }
+
+  grouping aggregation-logical-state {
+    description
+      "Operational state data for aggregate interfaces";
+
+    leaf lag-speed {
+      type uint32;
+      units Mbps;
+      description
+        "Reports effective speed of the aggregate interface,
+        based on speed of active member interfaces";
+    }
+
+    leaf-list member {
+      when "../../config/lag-type = 'STATIC'" {
+        description
+          "The simple list of member interfaces is active
+          when the aggregate is statically configured";
+      }
+      type oc-if:base-interface-ref;
+      description
+        "List of current member interfaces for the aggregate,
+        expressed as references to existing interfaces";
+    }
+  }
+
+  grouping aggregation-logical-top {
+    description "Top-level data definitions for LAGs";
+
+    container aggregation {
+
+      description
+        "Options for logical interfaces representing
+        aggregates";
+
+      container config {
+        description
+          "Configuration variables for logical aggregate /
+          LAG interfaces";
+
+        uses aggregation-logical-config;
+      }
+
+      container state {
+
+        config false;
+        description
+          "Operational state variables for logical
+          aggregate / LAG interfaces";
+
+        uses aggregation-logical-config;
+        uses aggregation-logical-state;
+
+      }
+    }
+  }
+
+  grouping ethernet-if-aggregation-config {
+    description
+      "Adds configuration items for Ethernet interfaces
+      belonging to a logical aggregate / LAG";
+
+    leaf aggregate-id {
+      type leafref {
+        path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+      }
+      description
+        "Specify the logical aggregate interface to which
+        this interface belongs";
+    }
+  }
+
+  // data definition statements
+
+  // augment statements
+
+  augment "/oc-if:interfaces/oc-if:interface" {
+
+    description "Adds LAG configuration to the interface module";
+
+    uses aggregation-logical-top {
+      when "oc-if:config/oc-if:type = 'ianaift:ieee8023adLag'" {
+        description
+          "active when the interface is set to type LAG";
+      }
+    }
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/" +
+    "oc-eth:config" {
+    description
+      "Adds LAG settings to individual Ethernet interfaces";
+
+    uses ethernet-if-aggregation-config;
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-eth:ethernet/" +
+    "oc-eth:state" {
+    description
+      "Adds LAG settings to individual Ethernet interfaces";
+
+    uses ethernet-if-aggregation-config;
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ethernet.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ethernet.yang
new file mode 100644
index 0000000000000000000000000000000000000000..3991923f620eeb45326951e971312814f87f08c3
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ethernet.yang
@@ -0,0 +1,693 @@
+module openconfig-if-ethernet {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces/ethernet";
+
+  prefix "oc-eth";
+
+  // import some basic types
+  import openconfig-interfaces { prefix oc-if; }
+  import iana-if-type { prefix ianaift; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "Model for managing Ethernet interfaces -- augments the OpenConfig
+    model for interface configuration and state.";
+
+  oc-ext:openconfig-version "2.13.0";
+
+  revision "2023-03-10" {
+    description
+      "Allow Ethernet configuration parameters to be
+      used for aggregate (LAG) interfaces.";
+    reference "2.13.0";
+  }
+
+  revision "2022-04-20" {
+    description
+      "Remove unused import";
+    reference "2.12.2";
+  }
+
+  revision "2021-07-20" {
+    description
+      "Fix typo in hardware MAC address description.";
+    reference "2.12.1";
+  }
+
+  revision "2021-07-07" {
+    description
+      "Add support for configuring fec-mode per interface.";
+    reference "2.12.0";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace.";
+    reference "2.11.1";
+  }
+
+  revision "2021-06-09" {
+    description
+      "Add support for standalone link training.";
+    reference "2.11.0";
+  }
+
+  revision "2021-05-17" {
+    description
+      "Add ethernet counters: in-carrier-errors,
+      in-interrupted-tx, in-late-collision, in-mac-errors-rx,
+      in-single-collision, in-symbol-error and out-mac-errors-tx";
+    reference "2.10.0";
+  }
+
+  revision "2021-03-30" {
+    description
+      "Add counter for drops due to oversized frames.";
+    reference "2.9.0";
+  }
+
+  revision "2020-05-06" {
+    description
+      "Minor formatting fix.";
+    reference "2.8.1";
+  }
+
+  revision "2020-05-06" {
+    description
+      "Add 200G, 400G, 600G and 800G Ethernet speeds.";
+    reference "2.8.0";
+  }
+
+  revision "2020-05-05" {
+    description
+      "Fix when statement checks to use rw paths when
+      from a rw context.";
+    reference "2.7.3";
+  }
+
+  revision "2019-04-16" {
+    description
+      "Update import prefix for iana-if-type module";
+    reference "2.7.2";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "2.6.2";
+  }
+
+  revision "2018-09-04" {
+    description
+      "Remove in-crc-align-errors as it is a duplicate of
+      in-crc-errors";
+    reference "2.6.1";
+  }
+
+  revision "2018-08-28" {
+    description
+      "Add Ethernet counter in-block-errors";
+    reference "2.6.0";
+  }
+
+  revision "2018-07-02" {
+    description
+      "Add new ethernet counters of in-undersize-frames,
+      in-crc-align-errors and the distribution container";
+    reference "2.5.0";
+  }
+
+  revision "2018-04-10" {
+    description
+      "Add identities for 2.5 and 5 Gbps.";
+    reference "2.4.0";
+  }
+
+  revision "2018-01-05" {
+    description
+      "Add logical loopback to interface.";
+    reference "2.3.0";
+  }
+
+  revision "2017-12-21" {
+    description
+      "Added IPv6 router advertisement configuration.";
+    reference "2.1.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Added Ethernet/IP state data; Add dhcp-client;
+      migrate to OpenConfig types modules; Removed or
+      renamed opstate values";
+    reference "2.0.0";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Fixes to Ethernet interfaces model";
+    reference "1.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // identity statements
+  identity INTERFACE_FEC {
+    description
+      "Base type to specify FEC modes that can be configured on the interface.
+       These are FEC modes defined for applying to logical interfaces and their
+       underlying electrical channels.";
+  }
+
+  identity FEC_FC {
+    base INTERFACE_FEC;
+    description
+      "Firecode is used for channels with NRZ modulation and speeds less than 100G.
+      This FEC is designed to comply with the IEEE 802.3, Clause 74.";
+  }
+
+  identity FEC_RS528 {
+    base INTERFACE_FEC;
+    description
+      "RS528 is used for channels with NRZ modulation. This FEC is designed to
+      comply with IEEE 802.3, Clause 91.";
+  }
+
+  identity FEC_RS544 {
+    base INTERFACE_FEC;
+    description
+      "RS544 is used for channels with PAM4 modulation.";
+  }
+
+  identity FEC_RS544_2X_INTERLEAVE {
+    base INTERFACE_FEC;
+    description
+      "RS544-2x-interleave is used for channels with PAM4 modulation.";
+  }
+
+  identity FEC_DISABLED {
+    base INTERFACE_FEC;
+    description
+      "FEC is administratively disabled.";
+  }
+
+  identity ETHERNET_SPEED {
+    description "base type to specify available Ethernet link
+    speeds";
+  }
+
+  identity SPEED_10MB {
+    base ETHERNET_SPEED;
+    description "10 Mbps Ethernet";
+  }
+
+  identity SPEED_100MB {
+    base ETHERNET_SPEED;
+    description "100 Mbps Ethernet";
+  }
+
+  identity SPEED_1GB {
+    base ETHERNET_SPEED;
+    description "1 Gbps Ethernet";
+  }
+
+  identity SPEED_2500MB {
+    base ETHERNET_SPEED;
+    description "2.5 Gbps Ethernet";
+  }
+
+  identity SPEED_5GB {
+    base ETHERNET_SPEED;
+    description "5 Gbps Ethernet";
+  }
+
+  identity SPEED_10GB {
+    base ETHERNET_SPEED;
+    description "10 Gbps Ethernet";
+  }
+
+  identity SPEED_25GB {
+    base ETHERNET_SPEED;
+    description "25 Gbps Ethernet";
+  }
+
+  identity SPEED_40GB {
+    base ETHERNET_SPEED;
+    description "40 Gbps Ethernet";
+  }
+
+  identity SPEED_50GB {
+    base ETHERNET_SPEED;
+    description "50 Gbps Ethernet";
+  }
+
+  identity SPEED_100GB {
+    base ETHERNET_SPEED;
+    description "100 Gbps Ethernet";
+  }
+
+  identity SPEED_200GB {
+    base ETHERNET_SPEED;
+    description "200 Gbps Ethernet";
+  }
+
+  identity SPEED_400GB {
+    base ETHERNET_SPEED;
+    description "400 Gbps Ethernet";
+  }
+
+  identity SPEED_600GB {
+    base ETHERNET_SPEED;
+    description "600 Gbps Ethernet";
+  }
+
+  identity SPEED_800GB {
+    base ETHERNET_SPEED;
+    description "800 Gbps Ethernet";
+  }
+
+  identity SPEED_UNKNOWN {
+    base ETHERNET_SPEED;
+    description
+      "Interface speed is unknown.  Systems may report
+      speed UNKNOWN when an interface is down or unpopuplated (e.g.,
+      pluggable not present).";
+  }
+
+  // typedef statements
+
+
+  // grouping statements
+
+  grouping ethernet-interface-config {
+    description "Configuration items for Ethernet interfaces";
+
+    leaf mac-address {
+      type oc-yang:mac-address;
+      description
+        "Assigns a MAC address to the Ethernet interface.  If not
+        specified, the corresponding operational state leaf is
+        expected to show the system-assigned MAC address.";
+    }
+
+    leaf auto-negotiate {
+      type boolean;
+      default true;
+      description
+        "Set to TRUE to request the interface to auto-negotiate
+        transmission parameters with its peer interface.  When
+        set to FALSE, the transmission parameters are specified
+        manually.";
+      reference
+        "IEEE 802.3-2012 auto-negotiation transmission parameters";
+    }
+
+    leaf standalone-link-training {
+      type boolean;
+      default false;
+      description
+        "Link training is automatic tuning of the SerDes transmit and
+        receive parameters to ensure an optimal connection over copper
+        links. It is normally run as part of the auto negotiation
+        sequence as specified in IEEE 802.3 Clause 73.
+
+        Standalone link training is used when full auto negotiation is
+        not desired on an Ethernet link but link training is needed.
+        It is configured by setting the standalone-link-training leaf
+        to TRUE and augo-negotiate leaf to FALSE.
+
+        Note: If auto-negotiate is true, then the value of standalone
+        link training leaf will be ignored.";
+    }
+
+    leaf duplex-mode {
+      type enumeration {
+        enum FULL {
+          description "Full duplex mode";
+        }
+        enum HALF {
+          description "Half duplex mode";
+        }
+      }
+      description
+        "When auto-negotiate is TRUE, this optionally sets the
+        duplex mode that will be advertised to the peer.  If
+        unspecified, the interface should negotiate the duplex mode
+        directly (typically full-duplex).  When auto-negotiate is
+        FALSE, this sets the duplex mode on the interface directly.";
+    }
+
+    leaf port-speed {
+      type identityref {
+        base ETHERNET_SPEED;
+      }
+      description
+        "When auto-negotiate is TRUE, this optionally sets the
+        port-speed mode that will be advertised to the peer for
+        negotiation.  If unspecified, it is expected that the
+        interface will select the highest speed available based on
+        negotiation.  When auto-negotiate is set to FALSE, sets the
+        link speed to a fixed value -- supported values are defined
+        by ETHERNET_SPEED identities";
+    }
+
+    leaf enable-flow-control {
+      type boolean;
+      default false;
+      description
+        "Enable or disable flow control for this interface.
+        Ethernet flow control is a mechanism by which a receiver
+        may send PAUSE frames to a sender to stop transmission for
+        a specified time.
+
+        This setting should override auto-negotiated flow control
+        settings.  If left unspecified, and auto-negotiate is TRUE,
+        flow control mode is negotiated with the peer interface.";
+      reference
+        "IEEE 802.3x";
+    }
+
+    leaf fec-mode {
+      type identityref {
+        base INTERFACE_FEC;
+      }
+      description
+        "The FEC mode applied to the physical channels associated with
+        the interface.";
+    }
+  }
+
+  grouping ethernet-interface-state-counters {
+    description
+      "Ethernet-specific counters and statistics";
+
+    // ingress counters
+
+    leaf in-mac-control-frames {
+      type oc-yang:counter64;
+      description
+        "MAC layer control frames received on the interface";
+    }
+
+    leaf in-mac-pause-frames {
+      type oc-yang:counter64;
+      description
+        "MAC layer PAUSE frames received on the interface";
+    }
+
+    leaf in-oversize-frames {
+      type oc-yang:counter64;
+      description
+        "The total number of frames received that were
+        longer than 1518 octets (excluding framing bits,
+        but including FCS octets) and were otherwise
+        well formed.";
+    }
+
+    leaf in-undersize-frames {
+      type oc-yang:counter64;
+      description
+        "The total number of frames received that were
+        less than 64 octets long (excluding framing bits,
+        but including FCS octets) and were otherwise well
+        formed.";
+      reference
+        "RFC 2819: Remote Network Monitoring MIB -
+        etherStatsUndersizePkts";
+    }
+
+    leaf in-jabber-frames {
+      type oc-yang:counter64;
+      description
+        "Number of jabber frames received on the
+        interface.  Jabber frames are typically defined as oversize
+        frames which also have a bad CRC.  Implementations may use
+        slightly different definitions of what constitutes a jabber
+        frame.  Often indicative of a NIC hardware problem.";
+    }
+
+    leaf in-fragment-frames {
+      type oc-yang:counter64;
+      description
+        "The total number of frames received that were less than
+        64 octets in length (excluding framing bits but including
+        FCS octets) and had either a bad Frame Check Sequence
+        (FCS) with an integral number of octets (FCS Error) or a
+        bad FCS with a non-integral number of octets (Alignment
+        Error).";
+    }
+
+    leaf in-8021q-frames {
+      type oc-yang:counter64;
+      description
+        "Number of 802.1q tagged frames received on the interface";
+    }
+
+    leaf in-crc-errors {
+      type oc-yang:counter64;
+      description
+        "The total number of frames received that
+        had a length (excluding framing bits, but
+        including FCS octets) of between 64 and 1518
+        octets, inclusive, but had either a bad
+        Frame Check Sequence (FCS) with an integral
+        number of octets (FCS Error) or a bad FCS with
+        a non-integral number of octets (Alignment Error)";
+      reference
+        "RFC 2819: Remote Network Monitoring MIB -
+        etherStatsCRCAlignErrors";
+    }
+
+    leaf in-block-errors {
+      type oc-yang:counter64;
+      description
+        "The number of received errored blocks. Error detection codes
+        are capable of detecting whether one or more errors have
+        occurred in a given sequence of bits – the block. It is
+        normally not possible to determine the exact number of errored
+        bits within the block";
+    }
+
+    leaf in-carrier-errors {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to a carrier issue.
+        The value refers to MIB counter for
+        dot3StatsCarrierSenseErrors
+        oid=1.3.6.1.2.1.10.7.2.1.11";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+    }
+
+    leaf in-interrupted-tx {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to interrupted
+        transmission issue. The value refers to MIB counter for
+        dot3StatsDeferredTransmissions
+        oid=1.3.6.1.2.1.10.7.2.1.7";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+    }
+
+    leaf in-late-collision {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to late collision
+        issue. The value refers to MIB counter for
+        dot3StatsLateCollisions
+        oid=1.3.6.1.2.1.10.7.2.1.8";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+    }
+
+    leaf in-mac-errors-rx {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to MAC errors
+        received. The value refers to MIB counter for
+        dot3StatsInternalMacReceiveErrors
+        oid=1.3.6.1.2.1.10.7.2.1.16";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+    }
+
+    leaf in-single-collision {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to single collision
+        issue. The value refers to MIB counter for
+        dot3StatsSingleCollisionFrames
+        oid=1.3.6.1.2.1.10.7.2.1.4";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+     }
+
+    leaf in-symbol-error {
+      type oc-yang:counter64;
+      description
+        "The number of received errored frames due to symbol error.
+        The value refers to MIB counter for
+        in-symbol-error
+        oid=1.3.6.1.2.1.10.7.2.1.18";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+    }
+
+    leaf in-maxsize-exceeded {
+      type oc-yang:counter64;
+      description
+        "The total number frames received that are well-formed but
+        dropped due to exceeding the maximum frame size on the interface
+        (e.g., MTU or MRU)";
+    }
+
+    // egress counters
+
+    leaf out-mac-control-frames {
+      type oc-yang:counter64;
+      description
+        "MAC layer control frames sent on the interface";
+    }
+
+    leaf out-mac-pause-frames {
+      type oc-yang:counter64;
+      description
+        "MAC layer PAUSE frames sent on the interface";
+    }
+
+    leaf out-8021q-frames {
+      type oc-yang:counter64;
+      description
+        "Number of 802.1q tagged frames sent on the interface";
+    }
+
+     leaf out-mac-errors-tx {
+      type oc-yang:counter64;
+      description
+        "The number of sent errored frames due to MAC errors
+         transmitted. The value refers to MIB counter for
+         dot3StatsInternalMacTransmitErrors
+         oid=1.3.6.1.2.1.10.7.2.1.10";
+      reference
+        "RFC 1643 Definitions of Managed
+        Objects for the Ethernet-like Interface Types.";
+     }
+
+  }
+
+  grouping ethernet-interface-state {
+    description
+      "Grouping for defining Ethernet-specific operational state";
+
+    leaf hw-mac-address {
+      type oc-yang:mac-address;
+      description
+        "Represents the 'burned-in', or system-assigned, MAC
+        address for the Ethernet interface.";
+    }
+
+    leaf negotiated-duplex-mode {
+      type enumeration {
+        enum FULL {
+          description "Full duplex mode";
+        }
+        enum HALF {
+          description "Half duplex mode";
+        }
+      }
+      description
+        "When auto-negotiate is set to TRUE, and the interface has
+        completed auto-negotiation with the remote peer, this value
+        shows the duplex mode that has been negotiated.";
+    }
+
+    leaf negotiated-port-speed {
+      type identityref {
+        base ETHERNET_SPEED;
+      }
+      description
+        "When auto-negotiate is set to TRUE, and the interface has
+        completed auto-negotiation with the remote peer, this value
+        shows the interface speed that has been negotiated.";
+    }
+
+    container counters {
+      description "Ethernet interface counters";
+
+      uses ethernet-interface-state-counters;
+    }
+  }
+
+  // data definition statements
+
+  grouping ethernet-top {
+    description "top-level Ethernet config and state containers";
+
+    container ethernet {
+      description
+        "Top-level container for ethernet configuration
+        and state";
+
+      container config {
+        description "Configuration data for ethernet interfaces";
+
+        uses ethernet-interface-config;
+
+      }
+
+      container state {
+
+        config false;
+        description "State variables for Ethernet interfaces";
+
+        uses ethernet-interface-config;
+        uses ethernet-interface-state;
+
+      }
+
+    }
+  }
+
+  // augment statements
+
+  augment "/oc-if:interfaces/oc-if:interface" {
+    description "Adds addtional Ethernet-specific configuration to
+    interfaces model";
+
+    uses ethernet-top {
+      when "oc-if:config/oc-if:type = 'ianaift:ethernetCsmacd' or " +
+           "oc-if:config/oc-if:type = 'ianaift:ieee8023adLag'" {
+      description
+        "Additional interface configuration parameters when
+        the interface type is Ethernet, or the interface is an aggregate
+        interface.";
+      }
+    }
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ip.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ip.yang
new file mode 100644
index 0000000000000000000000000000000000000000..8aebaaa068ae3ef2605c09af280d6d61399b16aa
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-if-ip.yang
@@ -0,0 +1,1611 @@
+module openconfig-if-ip {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces/ip";
+
+  prefix "oc-ip";
+
+  // import some basic types
+  import openconfig-inet-types { prefix oc-inet; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-vlan { prefix oc-vlan; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "This model defines data for managing configuration and
+    operational state on IP (IPv4 and IPv6) interfaces.
+
+    This model reuses data items defined in the IETF YANG model for
+    interfaces described by RFC 7277 with an alternate structure
+    (particularly for operational state data) and with
+    additional configuration items.
+
+    Portions of this code were derived from IETF RFC 7277.
+    Please reproduce this note if possible.
+
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  oc-ext:openconfig-version "3.5.1";
+
+  revision "2024-03-13" {
+    description
+      "Update in-pkts and out-pkts descriptions.";
+    reference "3.5.1";
+  }
+
+  revision "2023-08-14" {
+    description
+      "Add multicast counters for IPv4, IPv6.";
+    reference "3.5.0";
+  }
+
+revision "2023-06-30" {
+    description
+      "Deprecate IPv6 router advertisment config suppress leaf and add config
+      mode leaf.";
+    reference "3.4.0";
+  }
+
+  revision "2023-04-12" {
+    description
+      "Add ipv4 address type configuration.";
+    reference "3.3.0";
+  }
+
+  revision "2023-02-06" {
+    description
+      "Add IPv6 link-local configuration.";
+    reference "3.2.0";
+  }
+
+  revision "2022-11-09" {
+    description
+      "Add additional IPv6 router-advertisement features.";
+    reference "3.1.0";
+  }
+
+  revision "2019-01-08" {
+    description
+      "Eliminate use of the 'empty' type.";
+    reference "3.0.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "2.3.1";
+  }
+
+  revision "2018-01-05" {
+    description
+      "Add logical loopback to interface.";
+    reference "2.3.0";
+  }
+
+  revision "2017-12-21" {
+    description
+      "Added IPv6 router advertisement configuration.";
+    reference "2.1.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Added Ethernet/IP state data; Add dhcp-client;
+      migrate to OpenConfig types modules; Removed or
+      renamed opstate values";
+    reference "2.0.0";
+  }
+
+  revision "2017-04-03"{
+    description
+      "Update copyright notice.";
+    reference "1.1.1";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Fixes to Ethernet interfaces model";
+    reference "1.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // typedef statements
+
+  typedef ip-address-origin {
+    type enumeration {
+      enum OTHER {
+        description
+          "None of the following.";
+        }
+      enum STATIC {
+        description
+          "Indicates that the address has been statically
+          configured - for example, using NETCONF or a Command Line
+          Interface.";
+      }
+      enum DHCP {
+        description
+          "Indicates an address that has been assigned to this
+          system by a DHCP server.";
+      }
+      enum LINK_LAYER {
+        description
+          "Indicates an address created by IPv6 stateless
+          autoconfiguration that embeds a link-layer address in its
+          interface identifier.";
+      }
+      enum RANDOM {
+        description
+          "Indicates an address chosen by the system at
+          random, e.g., an IPv4 address within 169.254/16, an
+          RFC 4941 temporary address, or an RFC 7217 semantically
+          opaque address.";
+        reference
+          "RFC 4941: Privacy Extensions for Stateless Address
+                    Autoconfiguration in IPv6
+          RFC 7217: A Method for Generating Semantically Opaque
+                    Interface Identifiers with IPv6 Stateless
+                    Address Autoconfiguration (SLAAC)";
+      }
+    }
+    description
+     "The origin of an address.";
+  }
+
+  typedef neighbor-origin {
+    type enumeration {
+      enum OTHER {
+       description
+         "None of the following.";
+      }
+      enum STATIC {
+       description
+         "Indicates that the mapping has been statically
+          configured - for example, using NETCONF or a Command Line
+          Interface.";
+      }
+      enum DYNAMIC {
+       description
+        "Indicates that the mapping has been dynamically resolved
+        using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+        protocol.";
+      }
+    }
+    description
+      "The origin of a neighbor entry.";
+  }
+
+  typedef ipv4-address-type {
+    type enumeration {
+      enum PRIMARY {
+        description
+          "The primary address on the interface. There can only be one primary
+          address associated on an interface.";
+      }
+      enum SECONDARY {
+        description
+          "Secondary address on an interface. There can be multiple secondary
+          addresses associated on an interface.";
+      }
+    }
+
+    description
+      "The type of an IPv4 address.";
+  }
+
+  // grouping statements
+
+  grouping ip-common-global-config {
+    description
+      "Shared configuration data for IPv4 or IPv6 assigned
+      globally on an interface.";
+
+    leaf dhcp-client {
+      type boolean;
+      default false;
+      description
+        "Enables a DHCP client on the interface in order to request
+        an address";
+    }
+  }
+
+  grouping ip-common-counters-state {
+    description
+      "Operational state for IP traffic statistics for IPv4 and
+      IPv6";
+
+    container counters {
+      description
+        "Packet and byte counters for IP transmission and
+        reception for the address family.";
+
+
+      leaf in-pkts {
+        type oc-yang:counter64;
+        description
+          "The total number of IP packets received for the specified
+          address family, including all IP unicast, multicast,
+          broadcast and error packets.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf in-octets {
+        type oc-yang:counter64;
+        description
+          "The total number of octets received in input IP packets
+          for the specified address family, including those received
+          in error.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf in-multicast-pkts {
+        type oc-yang:counter64;
+        description
+          "The number of IP packets received for the specified
+          address family that are multicast packets.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'last-clear'.";
+        reference
+          "RFC 4293: Management Information Base for the Internet
+          Protocol (IP) - ipSystemStatsHCInMcastPkts";
+      }
+
+      leaf in-multicast-octets {
+        type oc-yang:counter64;
+        description
+          "The total number of octets received in input IP
+           multicast packets for the specified address
+           family, including those received in error.";
+        reference
+          "RFC 4293: Management Information Base for the Internet
+          Protocol (IP) - ipSystemStatsHCInMcastOctets";
+        }
+
+      leaf in-error-pkts {
+        // TODO: this counter combines several error conditions --
+        // could consider breaking them out to separate leaf nodes
+        type oc-yang:counter64;
+        description
+          "Number of IP packets discarded due to errors for the
+          specified address family, including errors in the IP
+          header, no route found to the IP destination, invalid
+          address, unknown protocol, etc.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf in-forwarded-pkts {
+        type oc-yang:counter64;
+        description
+          "The number of input packets for which the device was not
+          their final IP destination and for which the device
+          attempted to find a route to forward them to that final
+          destination.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf in-forwarded-octets {
+        type oc-yang:counter64;
+        description
+          "The number of octets received in input IP packets
+          for the specified address family for which the device was
+          not their final IP destination and for which the
+          device attempted to find a route to forward them to that
+          final destination.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf in-discarded-pkts {
+        type oc-yang:counter64;
+        description
+          "The number of input IP packets for the
+          specified address family, for which no problems were
+          encountered to prevent their continued processing, but
+          were discarded (e.g., for lack of buffer space).";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-pkts {
+        type oc-yang:counter64;
+        description
+          "The total number of IP packets for the
+          specified address family that the device supplied
+          to the lower layers for transmission.  This includes
+          packets generated locally and those forwarded by the
+          device as well as unicast, multicast and broadcast
+          packets.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-octets {
+        type oc-yang:counter64;
+        description
+          "The total number of octets in IP packets for the
+          specified address family that the device
+          supplied to the lower layers for transmission.  This
+          includes packets generated locally and those forwarded by
+          the device.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-multicast-pkts {
+        type oc-yang:counter64;
+        description
+          "The total number of IP multicast packets transmitted.
+
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'last-clear'.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)
+            - ipSystemStatsHCOutMcastPkts";
+      }
+
+      leaf out-multicast-octets {
+        type oc-yang:counter64;
+        description
+          "The total number of IP multicast octets transmitted.  This
+          includes packets generated locally and those forwarded by
+          the device.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-error-pkts {
+        // TODO: this counter combines several error conditions --
+        // could consider breaking them out to separate leaf nodes
+        type oc-yang:counter64;
+        description
+          "Number of IP packets for the specified address family
+          locally generated and discarded due to errors, including
+          no route found to the IP destination.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-forwarded-pkts {
+        type oc-yang:counter64;
+        description
+          "The number of packets for which this entity was not their
+          final IP destination and for which it was successful in
+          finding a path to their final destination.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-forwarded-octets {
+        type oc-yang:counter64;
+        description
+          "The number of octets in packets for which this entity was
+          not their final IP destination and for which it was
+          successful in finding a path to their final destination.";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+
+      leaf out-discarded-pkts {
+        type oc-yang:counter64;
+        description
+          "The number of output IP packets for the
+          specified address family for which no problem was
+          encountered to prevent their transmission to their
+          destination, but were discarded (e.g., for lack of
+          buffer space).";
+        reference
+          "RFC 4293 - Management Information Base for the
+          Internet Protocol (IP)";
+      }
+    }
+
+  }
+
+
+
+  grouping ipv4-global-config {
+    description
+      "Configuration data for IPv4 interfaces across
+      all addresses assigned to the interface";
+
+    leaf enabled {
+     type boolean;
+     default true;
+     description
+       "Controls whether IPv4 is enabled or disabled on this
+        interface.  When IPv4 is enabled, this interface is
+        connected to an IPv4 stack, and the interface can send
+        and receive IPv4 packets.";
+    }
+
+    leaf mtu {
+     type uint16 {
+       range "68..max";
+     }
+     units octets;
+     description
+       "The size, in octets, of the largest IPv4 packet that the
+        interface will send and receive.
+
+        The server may restrict the allowed values for this leaf,
+        depending on the interface's type.
+
+        If this leaf is not configured, the operationally used MTU
+        depends on the interface's type.";
+     reference
+       "RFC 791: Internet Protocol";
+    }
+
+    uses ip-common-global-config;
+
+
+  }
+
+  grouping ipv4-address-config {
+    description
+      "Per IPv4 adresss configuration data for the
+      interface.";
+
+    leaf ip {
+       type oc-inet:ipv4-address;
+       description
+        "The IPv4 address on the interface.";
+    }
+
+    leaf prefix-length {
+      type uint8 {
+       range "0..32";
+      }
+      description
+       "The length of the subnet prefix.";
+    }
+
+    leaf type {
+      type ipv4-address-type;
+      default PRIMARY;
+      description
+        "Specifies the explicit type of the IPv4 address being assigned
+        to the interface. By default, addresses are assumed to be a primary address.
+        Where secondary addresses is to be configured, this leaf should be set
+        to SECONDARY.";
+    }
+  }
+
+  grouping ipv4-neighbor-config {
+    description
+      "Per IPv4 neighbor configuration data. Neighbor
+      entries are analagous to static ARP entries, i.e., they
+      create a correspondence between IP and link-layer addresses";
+
+    leaf ip {
+     type oc-inet:ipv4-address;
+     description
+       "The IPv4 address of the neighbor node.";
+    }
+    leaf link-layer-address {
+     type oc-yang:phys-address;
+     mandatory true;
+     description
+       "The link-layer address of the neighbor node.";
+    }
+  }
+
+  grouping ipv4-address-state {
+    description
+      "State variables for IPv4 addresses on the interface";
+
+    leaf origin {
+      type ip-address-origin;
+      description
+       "The origin of this address, e.g., statically configured,
+       assigned by DHCP, etc..";
+    }
+  }
+
+  grouping ipv4-neighbor-state {
+    description
+      "State variables for IPv4 neighbor entries on the interface.";
+
+    leaf origin {
+      type neighbor-origin;
+      description
+        "The origin of this neighbor entry, static or dynamic.";
+    }
+  }
+
+  grouping ipv6-global-config {
+    description
+      "Configuration data at the global level for each
+      IPv6 interface";
+
+    leaf enabled {
+      type boolean;
+      default true;
+      description
+        "Controls whether IPv6 is enabled or disabled on this
+        interface.  When IPv6 is enabled, this interface is
+        connected to an IPv6 stack, and the interface can send
+        and receive IPv6 packets.";
+    }
+
+    leaf mtu {
+      type uint32 {
+       range "1280..max";
+      }
+      units octets;
+      description
+        "The size, in octets, of the largest IPv6 packet that the
+        interface will send and receive.
+
+        The server may restrict the allowed values for this leaf,
+        depending on the interface's type.
+
+        If this leaf is not configured, the operationally used MTU
+        depends on the interface's type.";
+      reference
+        "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+                  Section 5";
+    }
+
+    leaf dup-addr-detect-transmits {
+      type uint32;
+      default 1;
+      description
+        "The number of consecutive Neighbor Solicitation messages
+        sent while performing Duplicate Address Detection on a
+        tentative address.  A value of zero indicates that
+        Duplicate Address Detection is not performed on
+        tentative addresses.  A value of one indicates a single
+        transmission with no follow-up retransmissions.";
+      reference
+        "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+    }
+
+    uses ip-common-global-config;
+  }
+
+  grouping ipv6-address-config {
+    description "Per-address configuration data for IPv6 interfaces";
+
+    leaf ip {
+      type oc-inet:ipv6-address;
+      description
+        "The IPv6 address on the interface.";
+    }
+
+    leaf prefix-length {
+      type uint8 {
+        range "0..128";
+      }
+      mandatory true;
+      description
+        "The length of the subnet prefix.";
+    }
+
+    leaf type {
+      type oc-inet:ipv6-address-type;
+      default GLOBAL_UNICAST;
+      description
+        "Specifies the explicit type of the IPv6 address being assigned
+        to the interface. By default, addresses are assumed to be
+        global unicast.  Where a link-local address is to be explicitly
+        configured, this leaf should be set to LINK_LOCAL.";
+    }
+
+  }
+
+  grouping ipv6-address-state {
+    description
+      "Per-address operational state data for IPv6 interfaces";
+
+    leaf origin {
+      type ip-address-origin;
+      description
+        "The origin of this address, e.g., static, dhcp, etc.";
+    }
+
+    leaf status {
+      type enumeration {
+        enum PREFERRED {
+          description
+            "This is a valid address that can appear as the
+            destination or source address of a packet.";
+        }
+        enum DEPRECATED {
+          description
+            "This is a valid but deprecated address that should
+            no longer be used as a source address in new
+            communications, but packets addressed to such an
+            address are processed as expected.";
+        }
+        enum INVALID {
+          description
+            "This isn't a valid address, and it shouldn't appear
+            as the destination or source address of a packet.";
+        }
+        enum INACCESSIBLE {
+          description
+            "The address is not accessible because the interface
+            to which this address is assigned is not
+            operational.";
+        }
+        enum UNKNOWN {
+          description
+            "The status cannot be determined for some reason.";
+        }
+        enum TENTATIVE {
+          description
+            "The uniqueness of the address on the link is being
+            verified.  Addresses in this state should not be
+            used for general communication and should only be
+            used to determine the uniqueness of the address.";
+        }
+        enum DUPLICATE {
+          description
+           "The address has been determined to be non-unique on
+            the link and so must not be used.";
+        }
+        enum OPTIMISTIC {
+          description
+            "The address is available for use, subject to
+            restrictions, while its uniqueness on a link is
+            being verified.";
+        }
+      }
+      description
+        "The status of an address.  Most of the states correspond
+        to states from the IPv6 Stateless Address
+        Autoconfiguration protocol.";
+      reference
+          "RFC 4293: Management Information Base for the
+                      Internet Protocol (IP)
+                      - IpAddressStatusTC
+            RFC 4862: IPv6 Stateless Address Autoconfiguration";
+    }
+  }
+
+  grouping ipv6-neighbor-config {
+    description
+      "Per-neighbor configuration data for IPv6 interfaces";
+
+    leaf ip {
+      type oc-inet:ipv6-address;
+      description
+        "The IPv6 address of the neighbor node.";
+    }
+
+    leaf link-layer-address {
+      type oc-yang:phys-address;
+      mandatory true;
+      description
+        "The link-layer address of the neighbor node.";
+    }
+  }
+
+  grouping ipv6-neighbor-state {
+    description "Per-neighbor state variables for IPv6 interfaces";
+
+    leaf origin {
+      type neighbor-origin;
+      description
+        "The origin of this neighbor entry.";
+    }
+    leaf is-router {
+      type boolean;
+      description
+        "Indicates that the neighbor node acts as a router.";
+    }
+    leaf neighbor-state {
+      type enumeration {
+        enum INCOMPLETE {
+          description
+          "Address resolution is in progress, and the link-layer
+                address of the neighbor has not yet been
+                determined.";
+        }
+        enum REACHABLE {
+          description
+          "Roughly speaking, the neighbor is known to have been
+                reachable recently (within tens of seconds ago).";
+        }
+        enum STALE {
+          description
+          "The neighbor is no longer known to be reachable, but
+                until traffic is sent to the neighbor no attempt
+                should be made to verify its reachability.";
+        }
+        enum DELAY {
+          description
+          "The neighbor is no longer known to be reachable, and
+                traffic has recently been sent to the neighbor.
+                Rather than probe the neighbor immediately, however,
+                delay sending probes for a short while in order to
+                give upper-layer protocols a chance to provide
+                reachability confirmation.";
+        }
+        enum PROBE {
+          description
+          "The neighbor is no longer known to be reachable, and
+                unicast Neighbor Solicitation probes are being sent
+                to verify reachability.";
+        }
+      }
+      description
+        "The Neighbor Unreachability Detection state of this
+        entry.";
+      reference
+        "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+             Section 7.3.2";
+    }
+  }
+
+  grouping ip-vrrp-ipv6-config {
+    description
+      "IPv6-specific configuration data for VRRP on IPv6
+      interfaces";
+
+      leaf virtual-link-local {
+        type oc-inet:ip-address;
+        description
+          "For VRRP on IPv6 interfaces, sets the virtual link local
+          address";
+      }
+  }
+
+  grouping ip-vrrp-ipv6-state {
+    description
+      "IPv6-specific operational state for VRRP on IPv6 interfaces";
+
+    uses ip-vrrp-ipv6-config;
+  }
+
+  grouping ip-vrrp-tracking-config {
+    description
+      "Configuration data for tracking interfaces
+      in a VRRP group";
+
+    leaf-list track-interface {
+      type leafref {
+        path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+      }
+      // TODO: we may need to add some restriction to ethernet
+      // or IP interfaces.
+      description
+        "Sets a list of one or more interfaces that should
+        be tracked for up/down events to dynamically change the
+        priority state of the VRRP group, and potentially
+        change the mastership if the tracked interface going
+        down lowers the priority sufficiently.  Any of the tracked
+        interfaces going down will cause the priority to be lowered.
+        Some implementations may only support a single
+        tracked interface.";
+    }
+
+    leaf priority-decrement {
+      type uint8 {
+        range 0..254;
+      }
+      default 0;
+      description "Set the value to subtract from priority when
+      the tracked interface goes down";
+    }
+  }
+
+  grouping ip-vrrp-tracking-state {
+    description
+      "Operational state data for tracking interfaces in a VRRP
+      group";
+  }
+
+  grouping ip-vrrp-tracking-top {
+    description
+      "Top-level grouping for VRRP interface tracking";
+
+    container interface-tracking {
+      description
+        "Top-level container for VRRP interface tracking";
+
+      container config {
+        description
+          "Configuration data for VRRP interface tracking";
+
+        uses ip-vrrp-tracking-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for VRRP interface tracking";
+
+        uses ip-vrrp-tracking-config;
+        uses ip-vrrp-tracking-state;
+      }
+    }
+  }
+
+  grouping ip-vrrp-config {
+    description
+      "Configuration data for VRRP on IP interfaces";
+
+    leaf virtual-router-id {
+      type uint8 {
+        range 1..255;
+      }
+      description
+        "Set the virtual router id for use by the VRRP group.  This
+        usually also determines the virtual MAC address that is
+        generated for the VRRP group";
+    }
+
+    leaf-list virtual-address {
+      type oc-inet:ip-address;
+      description
+        "Configure one or more virtual addresses for the
+        VRRP group";
+    }
+
+    leaf priority {
+      type uint8 {
+        range 1..254;
+      }
+      default 100;
+      description
+        "Specifies the sending VRRP interface's priority
+        for the virtual router.  Higher values equal higher
+        priority";
+    }
+
+    leaf preempt {
+      type boolean;
+      default true;
+      description
+        "When set to true, enables preemption by a higher
+        priority backup router of a lower priority master router";
+    }
+
+    leaf preempt-delay {
+      type uint16 {
+        range 0..3600;
+      }
+      default 0;
+      description
+        "Set the delay the higher priority router waits
+        before preempting";
+    }
+
+    leaf accept-mode {
+      type boolean;
+      // TODO: should we adopt the RFC default given the common
+      // operational practice of setting to true?
+      default false;
+      description
+        "Configure whether packets destined for
+        virtual addresses are accepted even when the virtual
+        address is not owned by the router interface";
+    }
+
+    leaf advertisement-interval {
+      type uint16 {
+        range 1..4095;
+      }
+      // TODO this range is theoretical -- needs to be validated
+      // against major implementations.
+      units "centiseconds";
+      default 100;
+      description
+        "Sets the interval between successive VRRP
+        advertisements -- RFC 5798 defines this as a 12-bit
+        value expressed as 0.1 seconds, with default 100, i.e.,
+        1 second.  Several implementation express this in units of
+        seconds";
+    }
+  }
+
+  grouping ip-vrrp-state {
+    description
+      "Operational state data for VRRP on IP interfaces";
+
+    leaf current-priority {
+      type uint8;
+      description "Operational value of the priority for the
+      interface in the VRRP group";
+    }
+  }
+
+  grouping ip-vrrp-top {
+    description
+      "Top-level grouping for Virtual Router Redundancy Protocol";
+
+    container vrrp {
+      description
+        "Enclosing container for VRRP groups handled by this
+        IP interface";
+
+      reference "RFC 5798 - Virtual Router Redundancy Protocol
+        (VRRP) Version 3 for IPv4 and IPv6";
+
+      list vrrp-group {
+        key "virtual-router-id";
+        description
+          "List of VRRP groups, keyed by virtual router id";
+
+        leaf virtual-router-id {
+          type leafref {
+            path "../config/virtual-router-id";
+          }
+          description
+            "References the configured virtual router id for this
+            VRRP group";
+        }
+
+        container config {
+          description
+            "Configuration data for the VRRP group";
+
+          uses ip-vrrp-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for the VRRP group";
+
+          uses ip-vrrp-config;
+          uses ip-vrrp-state;
+        }
+
+        uses ip-vrrp-tracking-top;
+      }
+    }
+  }
+
+  grouping ipv6-ra-config {
+    description
+      "Configuration parameters for IPv6 router advertisements.";
+
+    leaf enable {
+      type boolean;
+      default true;
+      description
+        "If set to false, all IPv6 router advertisement functions are
+        disabled.  The local system will not transmit router advertisement
+        messages and will not respond to router solicitation messages.";
+    }
+
+    leaf interval {
+      type uint32;
+      units seconds;
+      description
+        "The interval between periodic router advertisement neighbor
+        discovery messages sent on this interface expressed in
+        seconds.";
+    }
+
+    leaf lifetime {
+      type uint32;
+      units seconds;
+      description
+        "The lifetime advertised in the router advertisement neighbor
+        discovery message on this interface.";
+    }
+
+    leaf suppress {
+      status deprecated;
+      type boolean;
+      default false;
+      description
+        "When set to true, router advertisement neighbor discovery
+        messages are not transmitted on this interface.";
+    }
+
+    leaf mode {
+      type enumeration {
+        enum ALL {
+          description
+            "The system will transmit unsolicited router advertisement
+            messages and respond to router solicitation requests.";
+        }
+        enum DISABLE_UNSOLICITED_RA {
+          description
+            "Unsolicted router advertisement messages are not transmitted on
+            this interface.  Responses to router solicitation messages will
+            be transmitted.";
+        }
+      }
+      default "ALL";
+      description
+        "Mode controls which set of behaviors the local system should perform
+        to support IPv6 router advertisements.";
+      reference "RFC4861: Neighbor Discovery for IP version 6 (IPv6)";
+    }
+
+    leaf managed {
+      type boolean;
+      default false;
+      description
+        "When set to true, the managed address configuration (M) flag is set in
+        the advertised router advertisement. The M flag indicates that there are
+        addresses available via DHCPv6.";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.2";
+    }
+
+    leaf other-config {
+      type boolean;
+      default false;
+      description
+        "When set to true, the other configuration (O) flag is set in the
+        advertised router advertisement. The O flag indicates that there is
+        other configuration available via DHCPv6 (e.g., DNS servers).";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.2";
+    }
+  }
+
+  grouping ipv6-ra-prefix-config {
+    description
+      "Configuration parameters for an individual prefix within an IPv6
+      router advertisement.";
+
+    leaf prefix {
+      type oc-inet:ipv6-prefix;
+      description
+        "IPv6 prefix to be advertised within the router advertisement
+        message.";
+    }
+
+    leaf valid-lifetime {
+      type uint32;
+      units seconds;
+      description
+        "The length of time that the prefix is valid relative to the time
+        the packet was sent.";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.6.2";
+    }
+
+    leaf preferred-lifetime {
+      type uint32;
+      units seconds;
+      description
+        "The length of time that the address within the prefix remains
+        in the preferred state, i.e., unrestricted use is allowed by
+        upper-layer protocols. See RFC4862 for a complete definition
+        of preferred behaviours.";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.6.2";
+    }
+
+    leaf disable-advertisement {
+      type boolean;
+      description
+        "When set to true, the prefix is not advertised within
+        router advertisement messages that are sent as a result of
+        router soliciation messages.";
+    }
+
+    leaf disable-autoconfiguration {
+      type boolean;
+      description
+        "When set to true, the prefix is marked as not to be used for stateless
+        address configuration. This is achieved by setting the autonomous address
+        configuration bit for the prefix.";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.6.1";
+    }
+
+    leaf enable-onlink {
+      type boolean;
+      description
+        "When set to true, the prefix is marked as being on link by setting the
+        L-bit for the prefix within a router advertisement.";
+      reference "RFC4861: Neighbor Discovery for IPv6, section 4.6.1";
+    }
+  }
+
+  grouping ipv4-proxy-arp-config {
+    description
+      "Configuration parameters for IPv4 proxy ARP";
+
+    leaf mode {
+      type enumeration {
+        enum DISABLE {
+          description
+            "The system should not respond to ARP requests that
+            do not specify an IP address configured on the local
+            subinterface as the target address.";
+        }
+        enum REMOTE_ONLY {
+          description
+            "The system responds to ARP requests only when the
+            sender and target IP addresses are in different
+            subnets.";
+        }
+        enum ALL {
+          description
+            "The system responds to ARP requests where the sender
+            and target IP addresses are in different subnets, as well
+            as those where they are in the same subnet.";
+        }
+      }
+      default "DISABLE";
+      description
+        "When set to a value other than DISABLE, the local system should
+        respond to ARP requests that are for target addresses other than
+        those that are configured on the local subinterface using its own
+        MAC address as the target hardware address. If the REMOTE_ONLY
+        value is specified, replies are only sent when the target address
+        falls outside the locally configured subnets on the interface,
+        whereas with the ALL value, all requests, regardless of their
+        target address are replied to.";
+      reference "RFC1027: Using ARP to Implement Transparent Subnet Gateways";
+    }
+  }
+
+  grouping ipv4-top {
+    description "Top-level configuration and state for IPv4
+    interfaces";
+
+    container ipv4 {
+      description
+        "Parameters for the IPv4 address family.";
+
+      container addresses {
+        description
+          "Enclosing container for address list";
+
+        list address {
+          key "ip";
+          description
+           "The list of configured IPv4 addresses on the interface.";
+
+          leaf ip {
+            type leafref {
+              path "../config/ip";
+            }
+            description "References the configured IP address";
+          }
+
+          container config {
+            description "Configuration data for each configured IPv4
+            address on the interface";
+
+            uses ipv4-address-config;
+
+          }
+
+          container state {
+
+            config false;
+            description "Operational state data for each IPv4 address
+            configured on the interface";
+
+            uses ipv4-address-config;
+            uses ipv4-address-state;
+          }
+
+        }
+      }
+
+      container proxy-arp {
+        description
+          "Configuration and operational state parameters
+          relating to proxy ARP. This functionality allows a
+          system to respond to ARP requests that are not
+          explicitly destined to the local system.";
+
+        container config {
+          description
+            "Configuration parameters for proxy ARP";
+          uses ipv4-proxy-arp-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters for proxy ARP";
+          uses ipv4-proxy-arp-config;
+        }
+      }
+
+      container neighbors {
+        description
+          "Enclosing container for neighbor list";
+
+        list neighbor {
+          key "ip";
+          description
+           "A list of mappings from IPv4 addresses to
+            link-layer addresses.
+
+            Entries in this list are used as static entries in the
+            ARP Cache.";
+          reference
+           "RFC 826: An Ethernet Address Resolution Protocol";
+
+          leaf ip {
+            type leafref  {
+              path "../config/ip";
+            }
+            description "References the configured IP address";
+          }
+
+          container config {
+            description "Configuration data for each configured IPv4
+            address on the interface";
+
+            uses ipv4-neighbor-config;
+
+          }
+
+          container state {
+
+            config false;
+            description "Operational state data for each IPv4 address
+            configured on the interface";
+
+            uses ipv4-neighbor-config;
+            uses ipv4-neighbor-state;
+          }
+        }
+      }
+
+      uses oc-if:sub-unnumbered-top;
+
+      container config {
+        description
+          "Top-level IPv4 configuration data for the interface";
+
+        uses ipv4-global-config;
+      }
+
+      container state {
+
+        config false;
+        description
+          "Top level IPv4 operational state data";
+
+        uses ipv4-global-config;
+        uses ip-common-counters-state;
+      }
+    }
+  }
+
+  grouping ipv6-top {
+    description
+      "Top-level configuration and state for IPv6 interfaces";
+
+    container ipv6 {
+      description
+       "Parameters for the IPv6 address family.";
+
+      container addresses {
+        description
+          "Enclosing container for address list";
+
+        list address {
+          key "ip";
+          description
+           "The list of configured IPv6 addresses on the interface.";
+
+          leaf ip {
+            type leafref {
+              path "../config/ip";
+            }
+            description "References the configured IP address";
+          }
+
+          container config {
+            description
+              "Configuration data for each IPv6 address on
+              the interface";
+
+            uses ipv6-address-config;
+
+          }
+
+          container state {
+
+            config false;
+            description
+              "State data for each IPv6 address on the
+              interface";
+
+            uses ipv6-address-config;
+            uses ipv6-address-state;
+          }
+        }
+      }
+
+      container router-advertisement {
+        description
+          "Configuration and operational state parameters relating to
+          router advertisements.";
+
+        container config {
+          description
+            "Configuration parameters relating to router advertisements
+            for IPv6.";
+          uses ipv6-ra-config;
+        }
+
+        container state {
+          config false;
+          description
+            "Operational state parameters relating to router
+             advertisements for IPv6.";
+          uses ipv6-ra-config;
+        }
+
+        container prefixes {
+          description
+            "Container for a list of prefixes that are included in the
+            router advertisement message.";
+
+          list prefix {
+            key "prefix";
+
+            description
+              "List of prefixes that are to be included in the IPv6
+              router-advertisement messages for the interface. The list
+              is keyed by the IPv6 prefix in CIDR representation.
+
+              Prefixes that are listed are those that are to be
+              advertised in router advertisement messages. Where there
+              are IPv6 global addresses configured on an interface and
+              the prefix is not listed in the prefix list, it MUST NOT
+              be advertised in the router advertisement message.";
+
+            leaf prefix {
+              type leafref {
+                path "../config/prefix";
+              }
+              description
+                "Reference to the IPv6 prefix key for the prefix list.";
+            }
+
+            container config {
+              description
+                "Configuration parameters corresponding to an IPv6 prefix
+                within the router advertisement.";
+
+              uses ipv6-ra-prefix-config;
+            }
+
+            container state {
+              config false;
+              description
+                "Operational state parameters corresponding to an IPv6 prefix
+                within the router advertisement.";
+
+              uses ipv6-ra-prefix-config;
+            }
+          }
+        }
+      }
+
+      container neighbors {
+        description
+          "Enclosing container for list of IPv6 neighbors";
+
+        list neighbor {
+          key "ip";
+          description
+            "List of IPv6 neighbors";
+
+          leaf ip {
+            type leafref {
+              path "../config/ip";
+            }
+            description
+              "References the configured IP neighbor address";
+          }
+
+          container config {
+            description "Configuration data for each IPv6 address on
+            the interface";
+
+            uses ipv6-neighbor-config;
+
+          }
+
+          container state {
+
+            config false;
+            description "State data for each IPv6 address on the
+            interface";
+
+            uses ipv6-neighbor-config;
+            uses ipv6-neighbor-state;
+          }
+        }
+      }
+      uses oc-if:sub-unnumbered-top;
+
+      container config {
+        description "Top-level config data for the IPv6 interface";
+
+        uses ipv6-global-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Top-level operational state data for the IPv6 interface";
+
+        uses ipv6-global-config;
+        uses ip-common-counters-state;
+
+      }
+    }
+  }
+
+  // augment statements
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+    "oc-if:subinterface" {
+    description
+      "IPv4 address family configuration for
+      interfaces";
+
+    uses ipv4-top;
+
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+    "oc-if:subinterface" {
+    description
+      "IPv6 address family configuration for
+      interfaces";
+
+    uses ipv6-top;
+
+  }
+
+  // VRRP for IPv4 interfaces
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+    "oc-if:subinterface/oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
+
+    description
+      "Additional IP addr family configuration for
+      interfaces";
+
+    uses ip-vrrp-top;
+
+  }
+
+  // VRRP for IPv6 interfaces
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+    "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
+    description
+      "Additional IP addr family configuration for
+      interfaces";
+
+    uses ip-vrrp-top;
+
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+    "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/" +
+    "vrrp/vrrp-group/config" {
+    description
+      "Additional VRRP data for IPv6 interfaces";
+
+    uses ip-vrrp-ipv6-config;
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:subinterfaces/" +
+  "oc-if:subinterface/oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/" +
+    "vrrp-group/state" {
+    description
+      "Additional VRRP data for IPv6 interfaces";
+
+    uses ip-vrrp-ipv6-state;
+  }
+
+  // Augments for for routed VLANs
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
+    description
+      "IPv4 address family configuration for
+      interfaces";
+
+    uses ipv4-top;
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan" {
+    description
+      "IPv6 address family configuration for
+      interfaces";
+
+    uses ipv6-top;
+  }
+
+  // VRRP for routed VLAN interfaces
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+    "oc-ip:ipv4/oc-ip:addresses/oc-ip:address" {
+    description
+      "Additional IP addr family configuration for
+      interfaces";
+
+    uses ip-vrrp-top;
+
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+    "oc-ip:ipv6/oc-ip:addresses/oc-ip:address" {
+    description
+      "Additional IP addr family configuration for
+      interfaces";
+
+    uses ip-vrrp-top;
+
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+    "oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/config" {
+    description
+      "Additional VRRP data for IPv6 interfaces";
+
+    uses ip-vrrp-ipv6-config;
+  }
+
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-vlan:routed-vlan/" +
+    "oc-ip:ipv6/oc-ip:addresses/oc-ip:address/vrrp/vrrp-group/state" {
+    description
+      "Additional VRRP data for IPv6 interfaces";
+
+    uses ip-vrrp-ipv6-state;
+  }
+
+  // rpc statements
+
+  // notification statements
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-interfaces.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-interfaces.yang
new file mode 100644
index 0000000000000000000000000000000000000000..2cf2bdc84f11d0688eb56574620cd787f2d5c56f
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/interfaces/openconfig-interfaces.yang
@@ -0,0 +1,1336 @@
+module openconfig-interfaces {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces";
+
+  prefix "oc-if";
+
+  // import some basic types
+  import ietf-interfaces { prefix ietf-if; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-types { prefix oc-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-transport-types { prefix oc-opt-types; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "Model for managing network interfaces and subinterfaces.  This
+    module also defines convenience types / groupings for other
+    models to create references to interfaces:
+
+      base-interface-ref (type) -  reference to a base interface
+      interface-ref (grouping) -  container for reference to a
+        interface + subinterface
+      interface-ref-state (grouping) - container for read-only
+        (opstate) reference to interface + subinterface
+
+    This model reuses data items defined in the IETF YANG model for
+    interfaces described by RFC 7223 with an alternate structure
+    (particularly for operational state data) and with
+    additional configuration items.
+
+    Portions of this code were derived from IETF RFC 7223.
+    Please reproduce this note if possible.
+
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  oc-ext:openconfig-version "3.7.1";
+
+  revision "2024-04-04" {
+      description
+        "Use single quotes in descriptions.";
+      reference
+        "3.7.1";
+  }
+
+  revision "2023-11-06" {
+      description
+        "Clarify description for admin-status TESTING.";
+      reference
+        "3.7.0";
+  }
+
+  revision "2023-08-29" {
+      description
+        "Add augment for penalty-based additive-increase, exponential-decrease link damping algorithm.";
+      reference
+        "3.6.0";
+  }
+
+  revision "2023-07-14" {
+    description
+      "Move counters which apply to both interfaces and subinterfaces to
+      a common grouping.  Deprecate physical counters from subinterface";
+    reference "3.5.0";
+  }
+
+  revision "2023-02-06" {
+    description
+      "Add further specification to interface-ref type to
+       clarify that the interface and subinterface leaves
+       are how an interface is referenced, regardless of
+       context.";
+    reference "3.0.2";
+  }
+
+  revision "2022-10-25" {
+    description
+      "change loopback-mode to align with available modes";
+    reference "3.0.1";
+  }
+
+  revision "2021-04-06" {
+    description
+      "Add leaves for management and cpu interfaces";
+    reference "2.5.0";
+  }
+
+  revision "2019-11-19" {
+    description
+      "Update description of interface name.";
+    reference "2.4.3";
+  }
+
+  revision "2019-07-10" {
+    description
+      "Remove redundant nanosecond units statements to reflect
+      universal definition of timeticks64 type.";
+    reference "2.4.2";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "2.4.1";
+  }
+
+  revision "2018-08-07" {
+    description
+      "Add leaf to indicate whether an interface is physical or
+      logical.";
+    reference "2.4.0";
+  }
+
+  revision "2018-07-02" {
+    description
+      "Add in-pkts and out-pkts in counters";
+    reference "2.3.2";
+  }
+
+  revision "2018-04-24" {
+    description
+      "Clarified behavior of last-change state leaf";
+    reference "2.3.1";
+  }
+
+  revision "2018-01-05" {
+    description
+      "Add logical loopback to interface.";
+    reference "2.3.0";
+  }
+
+  revision "2017-12-22" {
+    description
+      "Add IPv4 proxy ARP configuration.";
+    reference "2.2.0";
+  }
+
+  revision "2017-12-21" {
+    description
+      "Added IPv6 router advertisement configuration.";
+    reference "2.1.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Added Ethernet/IP state data; Add dhcp-client;
+      migrate to OpenConfig types modules; Removed or
+      renamed opstate values";
+    reference "2.0.0";
+  }
+
+  revision "2017-04-03" {
+    description
+      "Update copyright notice.";
+    reference "1.1.1";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Fixes to Ethernet interfaces model";
+    reference "1.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // typedef statements
+
+  typedef base-interface-ref {
+    type leafref {
+      path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+    }
+    description
+      "Reusable type for by-name reference to a base interface.
+      This type may be used in cases where ability to reference
+      a subinterface is not required.";
+  }
+
+  typedef interface-id {
+    type string;
+    description
+      "User-defined identifier for an interface, generally used to
+      name a interface reference.  The id can be arbitrary but a
+      useful convention is to use a combination of base interface
+      name and subinterface index.";
+  }
+
+  // grouping statements
+
+  grouping interface-ref-common {
+    description
+      "Reference leafrefs to interface / subinterface";
+
+    leaf interface {
+      type leafref {
+        path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+      }
+      description
+        "Reference to a base interface.  If a reference to a
+        subinterface is required, this leaf must be specified
+        to indicate the base interface.";
+    }
+
+    leaf subinterface {
+      type leafref {
+        path "/oc-if:interfaces/" +
+          "oc-if:interface[oc-if:name=current()/../interface]/" +
+          "oc-if:subinterfaces/oc-if:subinterface/oc-if:index";
+      }
+      description
+        "Reference to a subinterface -- this requires the base
+        interface to be specified using the interface leaf in
+        this container.  If only a reference to a base interface
+        is requuired, this leaf should not be set.";
+    }
+  }
+
+  grouping interface-ref-state-container {
+    description
+      "Reusable opstate w/container for a reference to an
+      interface or subinterface";
+
+    container state {
+      config false;
+      description
+        "Operational state for interface-ref";
+
+      uses interface-ref-common;
+    }
+  }
+
+  grouping interface-ref {
+    description
+      "Reusable definition for a reference to an interface or
+      subinterface";
+
+    container interface-ref {
+      description
+        "Reference to an interface or subinterface. The interface
+        that is being referenced is uniquely referenced based on
+        the specified interface and subinterface leaves. In contexts
+        where a Layer 3 interface is to be referenced, both the
+        interface and subinterface leaves must be populated, as
+        Layer 3 configuration within the OpenConfig models is
+        associated with a subinterface. In the case where a
+        Layer 2 interface is to be referenced, only the
+        interface is specified.
+
+        The interface/subinterface leaf tuple must be used as
+        the means by which the interface is specified, regardless
+        of any other context information (e.g., key in a list).";
+
+      container config {
+        description
+          "Configured reference to interface / subinterface";
+        oc-ext:telemetry-on-change;
+
+        uses interface-ref-common;
+      }
+
+      uses interface-ref-state-container;
+    }
+  }
+
+  grouping interface-ref-state {
+    description
+      "Reusable opstate w/container for a reference to an
+      interface or subinterface";
+
+    container interface-ref {
+      description
+        "Reference to an interface or subinterface";
+
+      uses interface-ref-state-container;
+    }
+  }
+
+  grouping base-interface-ref-state {
+    description
+      "Reusable opstate w/container for a reference to a
+      base interface (no subinterface).";
+
+      container state {
+        config false;
+        description
+          "Operational state for base interface reference";
+
+        leaf interface {
+          type base-interface-ref;
+          description
+            "Reference to a base interface.";
+        }
+      }
+  }
+
+
+  grouping interface-common-config {
+    description
+      "Configuration data data nodes common to physical interfaces
+      and subinterfaces";
+
+    leaf description {
+      type string;
+      description
+        "A textual description of the interface.
+
+        A server implementation MAY map this leaf to the ifAlias
+        MIB object.  Such an implementation needs to use some
+        mechanism to handle the differences in size and characters
+        allowed between this leaf and ifAlias.  The definition of
+        such a mechanism is outside the scope of this document.
+
+        Since ifAlias is defined to be stored in non-volatile
+        storage, the MIB implementation MUST map ifAlias to the
+        value of 'description' in the persistently stored
+        datastore.
+
+        Specifically, if the device supports ':startup', when
+        ifAlias is read the device MUST return the value of
+        'description' in the 'startup' datastore, and when it is
+        written, it MUST be written to the 'running' and 'startup'
+        datastores.  Note that it is up to the implementation to
+
+        decide whether to modify this single leaf in 'startup' or
+        perform an implicit copy-config from 'running' to
+        'startup'.
+
+        If the device does not support ':startup', ifAlias MUST
+        be mapped to the 'description' leaf in the 'running'
+        datastore.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAlias";
+    }
+
+    leaf enabled {
+      type boolean;
+      default "true";
+      description
+        "This leaf contains the configured, desired state of the
+        interface.
+
+        Systems that implement the IF-MIB use the value of this
+        leaf in the 'running' datastore to set
+        IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+        has been initialized, as described in RFC 2863.
+
+        Changes in this leaf in the 'running' datastore are
+        reflected in ifAdminStatus, but if ifAdminStatus is
+        changed over SNMP, this leaf is not affected.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+    }
+
+  }
+
+  grouping interface-phys-config {
+    description
+      "Configuration data for physical interfaces";
+
+    leaf name {
+      type string;
+      description
+        "The name of the interface.
+
+        A device MAY restrict the allowed values for this leaf,
+        possibly depending on the type of the interface.
+        For system-controlled interfaces, this leaf is the
+        device-specific name of the interface.  The 'config false'
+        list interfaces/interface[name]/state contains the currently
+        existing interfaces on the device.
+
+        If a client tries to create configuration for a
+        system-controlled interface that is not present in the
+        corresponding state list, the server MAY reject
+        the request if the implementation does not support
+        pre-provisioning of interfaces or if the name refers to
+        an interface that can never exist in the system.  A
+        NETCONF server MUST reply with an rpc-error with the
+        error-tag 'invalid-value' in this case.
+
+        The IETF model in RFC 7223 provides YANG features for the
+        following (i.e., pre-provisioning and arbitrary-names),
+        however they are omitted here:
+
+          If the device supports pre-provisioning of interface
+          configuration, the 'pre-provisioning' feature is
+          advertised.
+
+          If the device allows arbitrarily named user-controlled
+          interfaces, the 'arbitrary-names' feature is advertised.
+
+        When a configured user-controlled interface is created by
+        the system, it is instantiated with the same name in the
+        /interfaces/interface[name]/state list.";
+    }
+
+    leaf type {
+      type identityref {
+        base ietf-if:interface-type;
+      }
+      mandatory true;
+      description
+        "The type of the interface.
+
+        When an interface entry is created, a server MAY
+        initialize the type leaf with a valid value, e.g., if it
+        is possible to derive the type from the name of the
+        interface.
+
+        If a client tries to set the type of an interface to a
+        value that can never be used by the system, e.g., if the
+        type is not supported or if the type does not match the
+        name of the interface, the server MUST reject the request.
+        A NETCONF server MUST reply with an rpc-error with the
+        error-tag 'invalid-value' in this case.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifType";
+    }
+
+    leaf mtu {
+      type uint16;
+      description
+        "Set the max transmission unit size in octets
+        for the physical interface.  If this is not set, the mtu is
+        set to the operational default -- e.g., 1514 bytes on an
+        Ethernet interface.";
+    }
+
+    leaf loopback-mode {
+      type oc-opt-types:loopback-mode-type;
+      description
+        "Sets the loopback type on the interface. Setting the
+        mode to something besides NONE activates the loopback in
+        the specified mode.";
+    }
+
+    uses interface-common-config;
+  }
+
+  grouping interface-phys-holdtime-config {
+    description
+      "Configuration data for interface hold-time settings --
+      applies to physical interfaces.";
+
+    leaf up {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description
+        "Dampens advertisement when the interface
+        transitions from down to up.  A zero value means dampening
+        is turned off, i.e., immediate notification.";
+    }
+
+    leaf down {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description
+        "Dampens advertisement when the interface transitions from
+        up to down.  A zero value means dampening is turned off,
+        i.e., immediate notification.";
+    }
+  }
+
+  grouping interface-phys-holdtime-state {
+    description
+      "Operational state data for interface hold-time.";
+  }
+
+  grouping interface-phys-holdtime-top {
+    description
+      "Top-level grouping for setting link transition
+      dampening on physical and other types of interfaces.";
+
+    container hold-time {
+      description
+        "Top-level container for hold-time settings to enable
+        dampening advertisements of interface transitions.";
+
+      container config {
+        description
+          "Configuration data for interface hold-time settings.";
+        oc-ext:telemetry-on-change;
+
+        uses interface-phys-holdtime-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for interface hold-time.";
+
+        uses interface-phys-holdtime-config;
+        uses interface-phys-holdtime-state;
+      }
+    }
+  }
+
+  grouping interface-link-damping-config {
+    description
+      "Configuration data for interface link damping settings.";
+
+    leaf max-suppress-time {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description
+        "Maximum time an interface can remain damped since the last link down event no matter how unstable it has been prior to this period of stability. In a damped state, the interface's state change will not be advertised.";
+    }
+
+    leaf decay-half-life {
+      type uint32;
+      units milliseconds;
+      default 0;
+        description
+          "The amount of time after which an interface's penalty is decreased by half. Decay-half-time should not be more than max-suppress-time.";
+    }
+
+    leaf suppress-threshold {
+      type uint32;
+      default 0;
+        description
+          "The accumulated penalty that triggers the damping of an interface. A value of 0 indicates config is disabled.";
+    }
+
+    leaf reuse-threshold {
+      type uint32;
+      default 0;
+      description
+        "When the accumulated penalty decreases to this reuse threshold, the interface is not damped anymore. Interface state changes are advertised to applications. A value of 0 indicates config is disabled.";
+    }
+
+    leaf flap-penalty {
+      type uint32;
+      default 0;
+      description
+        "A penalty that each down event costs. A value of 0 indicates the config is disabled.";
+    }
+  }
+  grouping interface-link-damping-state {
+    description
+      "Operational state data for interface link damping settings.";
+  }
+  grouping link-damping-top {
+    description
+      "Top level grouping for link damping parameters.";
+
+    container penalty-based-aied {
+      description
+        "Top level container to suppress UP->DOWN link events using a penalty based additive-increase, exponential-decrease algorithm.";
+
+      container config {
+        description
+          "Configuration data for link damping settings.";
+          uses interface-link-damping-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for link damping settings.";
+        uses interface-link-damping-config;
+        uses interface-link-damping-state;
+      }
+    }
+  }
+
+  grouping interface-common-state {
+    description
+      "Operational state data (in addition to intended configuration)
+      at the global level for this interface";
+
+    oc-ext:operational;
+
+    leaf ifindex {
+      type uint32;
+      description
+        "System assigned number for each interface.  Corresponds to
+        ifIndex object in SNMP Interface MIB";
+      reference
+        "RFC 2863 - The Interfaces Group MIB";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf admin-status {
+      type enumeration {
+        enum UP {
+          description
+            "Ready to pass packets.";
+        }
+        enum DOWN {
+          description
+            "Not ready to pass packets and not in some test mode.";
+        }
+        enum TESTING {
+          description
+            "The interface should be treated as if in admin-down state for
+            control plane protocols.  In addition, while in TESTING state the
+            device should remove the interface from aggregate interfaces.
+            An interface transition to the TESTING state based on a qualification
+            workflow, or internal device triggered action - such as the gNOI Link
+            Qualification service";
+            reference
+              "gNOI Link Qualification Service
+               https://github.com/openconfig/gnoi/blob/main/packet_link_qualification/index.md";
+        }
+      }
+      //TODO:consider converting to an identity to have the
+      //flexibility to remove some values defined by RFC 7223 that
+      //are not used or not implemented consistently.
+      mandatory true;
+      description
+        "The desired state of the interface.  In RFC 7223 this leaf
+        has the same read semantics as ifAdminStatus.  Here, it
+        reflects the administrative state as set by enabling or
+        disabling the interface.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf oper-status {
+      type enumeration {
+        enum UP {
+          value 1;
+          description
+            "Ready to pass packets.";
+        }
+        enum DOWN {
+          value 2;
+          description
+            "The interface does not pass any packets.";
+        }
+        enum TESTING {
+          value 3;
+          description
+            "In test mode.  No operational packets can
+             be passed.";
+        }
+        enum UNKNOWN {
+          value 4;
+          description
+            "Status cannot be determined for some reason.";
+        }
+        enum DORMANT {
+          value 5;
+          description
+            "Waiting for some external event.";
+        }
+        enum NOT_PRESENT {
+          value 6;
+          description
+            "Some component (typically hardware) is missing.";
+        }
+        enum LOWER_LAYER_DOWN {
+          value 7;
+          description
+            "Down due to state of lower-layer interface(s).";
+        }
+      }
+      //TODO:consider converting to an identity to have the
+      //flexibility to remove some values defined by RFC 7223 that
+      //are not used or not implemented consistently.
+      mandatory true;
+      description
+        "The current operational state of the interface.
+
+         This leaf has the same semantics as ifOperStatus.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf last-change {
+      type oc-types:timeticks64;
+      description
+        "This timestamp indicates the absolute time of the last
+        state change of the interface (e.g., up-to-down transition).
+        This is different than the SNMP ifLastChange object in the
+        standard interface MIB in that it is not relative to the
+        system boot time (i.e,. sysUpTime).
+
+        The value is the timestamp in nanoseconds relative to
+        the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf logical {
+      type boolean;
+      description
+        "When set to true, the interface is a logical interface
+        which does not have an associated physical port or
+        channel on the system.";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf management {
+      type boolean;
+      description
+        "When set to true, the interface is a dedicated
+        management interface that is not connected to dataplane
+        interfaces.  It may be used to connect the system to an
+        out-of-band management network, for example.";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf cpu {
+      type boolean;
+      description
+        "When set to true, the interface is for traffic
+        that is handled by the system CPU, sometimes also called the
+        control plane interface.  On systems that represent the CPU
+        interface as an Ethernet interface, for example, this leaf
+        should be used to distinguish the CPU interface from dataplane
+        interfaces.";
+      oc-ext:telemetry-on-change;
+    }
+  }
+
+  grouping interface-common-counters-state {
+    description
+      "Operational state representing interface counters and statistics
+      applicable to (physical) interfaces and (logical) subinterfaces.";
+
+    leaf in-octets {
+      type oc-yang:counter64;
+      description
+        "The total number of octets received on the interface,
+        including framing characters.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCInOctets.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-pkts {
+      type oc-yang:counter64;
+      description
+        "The total number of packets received on the interface,
+        including all unicast, multicast, broadcast and bad packets
+        etc.";
+      reference
+        "RFC 2819: Remote Network Monitoring Management Information Base.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-unicast-pkts {
+      type oc-yang:counter64;
+      description
+        "The number of packets, delivered by this sub-layer to a
+        higher (sub-)layer, that were not addressed to a
+        multicast or broadcast address at this sub-layer.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-broadcast-pkts {
+      type oc-yang:counter64;
+      description
+        "The number of packets, delivered by this sub-layer to a
+        higher (sub-)layer, that were addressed to a broadcast
+        address at this sub-layer.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCInBroadcastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-multicast-pkts {
+      type oc-yang:counter64;
+      description
+        "The number of packets, delivered by this sub-layer to a
+        higher (sub-)layer, that were addressed to a multicast
+        address at this sub-layer.  For a MAC-layer protocol,
+        this includes both Group and Functional addresses.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCInMulticastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-errors {
+      type oc-yang:counter64;
+      description
+        "For packet-oriented interfaces, the number of inbound
+        packets that contained errors preventing them from being
+        deliverable to a higher-layer protocol.  For character-
+        oriented or fixed-length interfaces, the number of
+        inbound transmission units that contained errors
+        preventing them from being deliverable to a higher-layer
+        protocol.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifInErrors.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf in-discards {
+      type oc-yang:counter64;
+      description
+        "The number of inbound packets that were chosen to be
+        discarded even though no errors had been detected to
+        prevent their being deliverable to a higher-layer
+        protocol.  One possible reason for discarding such a
+        packet could be to free up buffer space.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+
+
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifInDiscards.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-octets {
+      type oc-yang:counter64;
+      description
+        "The total number of octets transmitted out of the
+        interface, including framing characters.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCOutOctets.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-pkts {
+      type oc-yang:counter64;
+      description
+        "The total number of packets transmitted out of the
+        interface, including all unicast, multicast, broadcast,
+        and bad packets etc.";
+      reference
+        "RFC 2819: Remote Network Monitoring Management Information Base.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-unicast-pkts {
+      type oc-yang:counter64;
+      description
+        "The total number of packets that higher-level protocols
+        requested be transmitted, and that were not addressed
+        to a multicast or broadcast address at this sub-layer,
+        including those that were discarded or not sent.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-broadcast-pkts {
+      type oc-yang:counter64;
+      description
+        "The total number of packets that higher-level protocols
+        requested be transmitted, and that were addressed to a
+        broadcast address at this sub-layer, including those
+        that were discarded or not sent.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCOutBroadcastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-multicast-pkts {
+      type oc-yang:counter64;
+      description
+        "The total number of packets that higher-level protocols
+        requested be transmitted, and that were addressed to a
+        multicast address at this sub-layer, including those
+        that were discarded or not sent.  For a MAC-layer
+        protocol, this includes both Group and Functional
+        addresses.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifHCOutMulticastPkts.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-discards {
+      type oc-yang:counter64;
+      description
+        "The number of outbound packets that were chosen to be
+        discarded even though no errors had been detected to
+        prevent their being transmitted.  One possible reason
+        for discarding such a packet could be to free up buffer
+        space.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifOutDiscards.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf out-errors {
+      type oc-yang:counter64;
+      description
+        "For packet-oriented interfaces, the number of outbound
+        packets that could not be transmitted because of errors.
+        For character-oriented or fixed-length interfaces, the
+        number of outbound transmission units that could not be
+        transmitted because of errors.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifOutErrors.
+        RFC 4293: Management Information Base for the
+        Internet Protocol (IP).";
+    }
+
+    leaf last-clear {
+      type oc-types:timeticks64;
+      description
+        "Timestamp of the last time the interface counters were
+        cleared.
+
+        The value is the timestamp in nanoseconds relative to
+        the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
+      oc-ext:telemetry-on-change;
+    }
+  }
+
+  grouping interface-counters-state {
+    description
+      "Operational state representing interface counters
+      and statistics.";
+
+    oc-ext:operational;
+
+    leaf in-unknown-protos {
+      type oc-yang:counter64;
+      description
+        "For packet-oriented interfaces, the number of packets
+        received via the interface that were discarded because
+        of an unknown or unsupported protocol.  For
+        character-oriented or fixed-length interfaces that
+        support protocol multiplexing, the number of
+        transmission units received via the interface that were
+        discarded because of an unknown or unsupported protocol.
+        For any interface that does not support protocol
+        multiplexing, this counter is not present.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+    }
+
+    leaf in-fcs-errors {
+      type oc-yang:counter64;
+      description
+        "Number of received packets which had errors in the
+        frame check sequence (FCS), i.e., framing errors.
+
+        Discontinuities in the value of this counter can occur
+        when the device is re-initialization as indicated by the
+        value of 'last-clear'.";
+    }
+
+    leaf carrier-transitions {
+      type oc-yang:counter64;
+      description
+        "Number of times the interface state has transitioned
+        between up and down since the time the device restarted
+        or the last-clear time, whichever is most recent.";
+      oc-ext:telemetry-on-change;
+    }
+
+    leaf resets {
+      type oc-yang:counter64;
+      description
+        "Number of times the interface hardware has been reset.  The
+        triggers and effects of this event are hardware-specifc.";
+      oc-ext:telemetry-on-change;
+
+    }
+  }
+
+  grouping subinterfaces-counters-state {
+    description
+      "Operational state representing counters unique to subinterfaces";
+
+    oc-ext:operational;
+    leaf in-unknown-protos {
+      type oc-yang:counter64;
+      status deprecated;
+      description
+        "For packet-oriented interfaces, the number of packets
+        received via the interface that were discarded because
+        of an unknown or unsupported protocol.  For
+        character-oriented or fixed-length interfaces that
+        support protocol multiplexing, the number of
+        transmission units received via the interface that were
+        discarded because of an unknown or unsupported protocol.
+        For any interface that does not support protocol
+        multiplexing, this counter is not present.
+
+        Discontinuities in the value of this counter can occur
+        at re-initialization of the management system, and at
+        other times as indicated by the value of
+        'last-clear'.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+    }
+
+    leaf in-fcs-errors {
+      type oc-yang:counter64;
+      status deprecated;
+      description
+        "Number of received packets which had errors in the
+        frame check sequence (FCS), i.e., framing errors.
+
+        Discontinuities in the value of this counter can occur
+        when the device is re-initialization as indicated by the
+        value of 'last-clear'.";
+    }
+
+    leaf carrier-transitions {
+      type oc-yang:counter64;
+      status deprecated;
+      description
+        "Number of times the interface state has transitioned
+        between up and down since the time the device restarted
+        or the last-clear time, whichever is most recent.";
+      oc-ext:telemetry-on-change;
+    }
+
+  }
+
+  // data definition statements
+
+  grouping sub-unnumbered-config {
+    description
+      "Configuration data for unnumbered subinterfaces";
+
+    leaf enabled {
+      type boolean;
+      default false;
+      description
+        "Indicates that the subinterface is unnumbered.  By default
+        the subinterface is numbered, i.e., expected to have an
+        IP address configuration.";
+    }
+  }
+
+  grouping sub-unnumbered-state {
+    description
+      "Operational state data unnumbered subinterfaces";
+  }
+
+  grouping sub-unnumbered-top {
+    description
+      "Top-level grouping unnumbered subinterfaces";
+
+    container unnumbered {
+      description
+        "Top-level container for setting unnumbered interfaces.
+        Includes reference the interface that provides the
+        address information";
+
+      container config {
+        description
+          "Configuration data for unnumbered interface";
+        oc-ext:telemetry-on-change;
+
+        uses sub-unnumbered-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for unnumbered interfaces";
+
+        uses sub-unnumbered-config;
+        uses sub-unnumbered-state;
+      }
+
+      uses oc-if:interface-ref;
+    }
+  }
+
+  grouping subinterfaces-config {
+    description
+      "Configuration data for subinterfaces";
+
+    leaf index {
+      type uint32;
+      default 0;
+      description
+        "The index of the subinterface, or logical interface number.
+        On systems with no support for subinterfaces, or not using
+        subinterfaces, this value should default to 0, i.e., the
+        default subinterface.";
+    }
+
+    uses interface-common-config;
+
+  }
+
+  grouping subinterfaces-state {
+    description
+      "Operational state data for subinterfaces";
+
+    oc-ext:operational;
+
+    leaf name {
+      type string;
+      description
+        "The system-assigned name for the sub-interface.  This MAY
+        be a combination of the base interface name and the
+        subinterface index, or some other convention used by the
+        system.";
+      oc-ext:telemetry-on-change;
+    }
+
+    uses interface-common-state;
+
+    container counters {
+      description
+        "A collection of interface specific statistics entitites which are
+        not common to subinterfaces.";
+
+      uses interface-common-counters-state;
+      uses subinterfaces-counters-state;
+     }
+  }
+
+  grouping subinterfaces-top {
+    description
+      "Subinterface data for logical interfaces associated with a
+      given interface";
+
+    container subinterfaces {
+      description
+        "Enclosing container for the list of subinterfaces associated
+        with a physical interface";
+
+      list subinterface {
+        key "index";
+
+        description
+          "The list of subinterfaces (logical interfaces) associated
+          with a physical interface";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "The index number of the subinterface -- used to address
+            the logical interface";
+        }
+
+        container config {
+          description
+            "Configurable items at the subinterface level";
+          oc-ext:telemetry-on-change;
+
+          uses subinterfaces-config;
+        }
+
+        container state {
+
+          config false;
+          description
+            "Operational state data for logical interfaces";
+
+          uses subinterfaces-config;
+          uses subinterfaces-state;
+        }
+      }
+    }
+  }
+
+  grouping interfaces-top {
+    description
+      "Top-level grouping for interface configuration and
+      operational state data";
+
+    container interfaces {
+      description
+        "Top level container for interfaces, including configuration
+        and state data.";
+
+
+      list interface {
+        key "name";
+
+        description
+          "The list of named interfaces on the device.";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "References the name of the interface";
+            //TODO: need to consider whether this should actually
+            //reference the name in the state subtree, which
+            //presumably would be the system-assigned name, or the
+            //configured name.  Points to the config/name now
+            //because of YANG 1.0 limitation that the list
+            //key must have the same "config" as the list, and
+            //also can't point to a non-config node.
+        }
+
+        container config {
+          description
+            "Configurable items at the global, physical interface
+            level";
+          oc-ext:telemetry-on-change;
+
+          uses interface-phys-config;
+        }
+
+        container state {
+
+          config false;
+          description
+            "Operational state data at the global interface level";
+
+          uses interface-phys-config;
+          uses interface-common-state;
+
+          container counters {
+            description
+              "A collection of interface specific statistics entitites which are
+              not common to subinterfaces.";
+
+            uses interface-common-counters-state;
+            uses interface-counters-state;
+          }
+        }
+
+        uses interface-phys-holdtime-top {
+          when "./penalty-based-aied/config/suppress-threshold = 0
+          or ./penalty-based-aied/config/reuse-threshold = 0
+          or ./penalty-based-aied/config/flap-penalty = 0" {
+          description
+            "Hold time and penalty-based-aied are two algorithms to suppress
+            link transitions and must be mutually exclusive.";
+          }
+        }
+        uses link-damping-top;
+        uses subinterfaces-top;
+      }
+    }
+  }
+
+  uses interfaces-top;
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/mpls/openconfig-mpls-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/mpls/openconfig-mpls-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..765e467cf8cc7d10950753160a90fee321016a94
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/mpls/openconfig-mpls-types.yang
@@ -0,0 +1,548 @@
+module openconfig-mpls-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/mpls-types";
+
+  prefix "oc-mplst";
+
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "General types for MPLS / TE data model";
+
+  oc-ext:openconfig-version "3.5.0";
+
+  revision "2023-12-14" {
+    description
+      "Added additional attributes oc-if:interface-ref
+      and metric attributes to static lsp";
+    reference "3.5.0";
+  }
+
+  revision "2021-12-01" {
+    description
+      "Add new identity for RSVP authentication types";
+    reference "3.4.0";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace";
+    reference "3.3.1";
+  }
+
+  revision "2021-03-23" {
+    description
+      "Add new identity for path metric types.";
+    reference "3.3.0";
+  }
+
+  revision "2020-02-04" {
+    description
+      "Consistent prefix for openconfig-mpls-types.";
+    reference "3.2.0";
+  }
+
+  revision "2019-03-26" {
+    description
+      "Add Pseudowire encapsulation.";
+    reference "3.1.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "3.0.1";
+  }
+
+  revision "2018-07-02" {
+    description
+      "Add new RSVP-TE statistics, remove associated-rsvp-session
+      leaf. Remove use of date-and-time.";
+    reference "3.0.0";
+  }
+
+  revision "2018-06-16" {
+    description
+      "Included attributes for base LDP configuration.";
+     reference "2.6.0";
+  }
+
+  revision "2018-06-13" {
+    description
+      "Add ttl-propagation to global MPLS config";
+    reference "2.5.0";
+  }
+
+  revision "2018-06-05" {
+    description
+      "Fixed bugs in when statements on RSVP-TE attributes";
+    reference "2.4.2";
+  }
+
+  revision "2017-08-24" {
+    description
+      "Minor formatting fixes.";
+    reference "2.4.1";
+  }
+
+  revision "2017-06-21" {
+    description
+      "Add TC bits typedef.";
+    reference "2.4.0";
+  }
+
+  revision "2017-03-22" {
+    description
+      "Add RSVP calculated-absolute-subscription-bw";
+    reference "2.3.0";
+  }
+
+  revision "2017-01-26" {
+    description
+      "Add RSVP Tspec, clarify units for RSVP, remove unused LDP";
+    reference "2.2.0";
+  }
+
+  revision "2016-12-15" {
+    description
+      "Add additional MPLS parameters";
+    reference "2.1.0";
+  }
+
+  revision "2016-09-01" {
+    description
+      "Revisions based on implementation feedback";
+    reference "2.0.0";
+  }
+
+  revision "2016-08-08" {
+    description
+      "Public release of MPLS models";
+    reference "1.0.1";
+  }
+
+  // identity statements
+
+  identity PATH_COMPUTATION_METHOD {
+    description
+     "base identity for supported path computation
+      mechanisms";
+  }
+
+  identity LOCALLY_COMPUTED {
+    base PATH_COMPUTATION_METHOD;
+    description
+      "indicates a constrained-path LSP in which the
+      path is computed by the local LER";
+  }
+
+  identity EXTERNALLY_QUERIED {
+    base PATH_COMPUTATION_METHOD;
+    description
+     "Constrained-path LSP in which the path is
+      obtained by querying an external source, such as a PCE server.
+      In the case that an LSP is defined to be externally queried, it may
+      also have associated explicit definitions (which are provided to the
+      external source to aid computation); and the path that is returned by
+      the external source is not required to provide a wholly resolved
+      path back to the originating system - that is to say, some local
+      computation may also be required";
+  }
+
+  identity EXPLICITLY_DEFINED {
+    base PATH_COMPUTATION_METHOD;
+    description
+     "constrained-path LSP in which the path is
+      explicitly specified as a collection of strict or/and loose
+      hops";
+  }
+
+
+  // using identities rather than enum types to simplify adding new
+  // signaling protocols as they are introduced and supported
+  identity PATH_SETUP_PROTOCOL {
+    description
+      "base identity for supported MPLS signaling
+      protocols";
+  }
+
+  identity PATH_SETUP_RSVP {
+    base PATH_SETUP_PROTOCOL;
+    description
+      "RSVP-TE signaling protocol";
+  }
+
+  identity PATH_SETUP_SR {
+    base PATH_SETUP_PROTOCOL;
+    description
+      "Segment routing";
+  }
+
+  identity PATH_SETUP_LDP {
+    base PATH_SETUP_PROTOCOL;
+    description
+      "LDP - RFC 5036";
+  }
+
+
+  identity PROTECTION_TYPE {
+    description
+      "base identity for protection type";
+  }
+
+  identity UNPROTECTED {
+    base PROTECTION_TYPE;
+    description
+      "no protection is desired";
+  }
+
+  identity LINK_PROTECTION_REQUIRED {
+    base PROTECTION_TYPE;
+    description
+      "link protection is desired";
+  }
+
+  identity LINK_NODE_PROTECTION_REQUESTED {
+    base PROTECTION_TYPE;
+    description
+      "node and link protection are both desired";
+  }
+
+  identity LSP_ROLE {
+    description
+      "Base identity for describing the role of
+       label switched path at the current node";
+  }
+
+  identity INGRESS {
+    base LSP_ROLE;
+    description
+      "Label switched path is an ingress (headend)
+       LSP";
+  }
+
+  identity EGRESS {
+    base LSP_ROLE;
+    description
+      "Label switched path is an egress (tailend)
+       LSP";
+  }
+
+  identity TRANSIT {
+    base LSP_ROLE;
+    description
+      "Label switched path is a transit LSP";
+  }
+
+
+  identity TUNNEL_TYPE {
+    description
+      "Base identity from which specific tunnel types are
+      derived.";
+  }
+
+  identity P2P {
+    base TUNNEL_TYPE;
+    description
+      "TE point-to-point tunnel type.";
+  }
+
+  identity P2MP {
+    base TUNNEL_TYPE;
+    description
+      "TE point-to-multipoint tunnel type.";
+  }
+
+
+  identity LSP_OPER_STATUS {
+    description
+      "Base identity for LSP operational status";
+  }
+
+  identity DOWN {
+    base LSP_OPER_STATUS;
+    description
+      "LSP is operationally down or out of service";
+  }
+
+  identity UP {
+    base LSP_OPER_STATUS;
+    description
+      "LSP is operationally active and available
+       for traffic.";
+  }
+
+  identity TUNNEL_ADMIN_STATUS {
+    description
+      "Base identity for tunnel administrative status";
+  }
+
+  identity ADMIN_DOWN {
+    base TUNNEL_ADMIN_STATUS;
+    description
+      "LSP is administratively down";
+  }
+
+  identity ADMIN_UP {
+    base TUNNEL_ADMIN_STATUS;
+    description
+      "LSP is administratively up";
+  }
+
+  identity NULL_LABEL_TYPE {
+    description
+      "Base identity from which specific null-label types are
+      derived.";
+  }
+
+  identity EXPLICIT {
+    base NULL_LABEL_TYPE;
+    description
+      "Explicit null label is used.";
+  }
+
+  identity IMPLICIT {
+    base NULL_LABEL_TYPE;
+    description
+      "Implicit null label is used.";
+  }
+
+  identity LSP_METRIC_TYPE {
+    description
+      "Base identity for types of LSP metric specification";
+  }
+
+  identity LSP_METRIC_RELATIVE {
+    base LSP_METRIC_TYPE;
+    description
+      "The metric specified for the LSPs to which this identity refers
+      is specified as a relative value to the IGP metric cost to the
+      LSP's tail-end.";
+  }
+
+  identity LSP_METRIC_ABSOLUTE {
+    base LSP_METRIC_TYPE;
+    description
+      "The metric specified for the LSPs to which this identity refers
+      is specified as an absolute value";
+  }
+
+  identity LSP_METRIC_INHERITED {
+    base LSP_METRIC_TYPE;
+    description
+      "The metric for for the LSPs to which this identity refers is
+      not specified explicitly - but rather inherited from the IGP
+      cost directly";
+  }
+
+  // Note: The IANA PWE3 Types Registry has several more values than these
+  identity PSEUDOWIRE_ENCAPSULATION {
+    description
+      "Sets the PDU type of the PSEUDOWIRE Example in RFC4448. This value
+      should be enumerated from the IANA Pseudowire types registry";
+  }
+
+  identity PWE_ETHERNET_TAGGED_MODE {
+    base PSEUDOWIRE_ENCAPSULATION;
+    description
+      "Ethernet Tagged Mode RFC4448";
+    reference "IANA PWE3 0x0004";
+  }
+
+  identity PWE_ETHERNET_RAW_MODE {
+    base PSEUDOWIRE_ENCAPSULATION;
+    description
+      "Ethernet Raw Mode RFC4448";
+    reference "IANA PWE3 0x0005";
+  }
+
+  identity PATH_METRIC_TYPE {
+    description
+      "Base identity for path metric type.";
+  }
+
+  identity TE_METRIC {
+    base PATH_METRIC_TYPE;
+    description
+      "TE path metric.";
+    reference
+      "RFC3785: Use of Interior Gateway Protocol (IGP) Metric as a
+      second MPLS Traffic Engineering (TE) Metric.
+      RFC5440: Path Computation Element (PCE) Communication Protocol (PCEP).";
+  }
+
+  identity IGP_METRIC {
+    base PATH_METRIC_TYPE;
+    description
+      "IGP path metric.";
+    reference
+      "RFC5440: Path Computation Element (PCE) Communication Protocol (PCEP).";
+  }
+
+  identity HOP_COUNT {
+    base PATH_METRIC_TYPE;
+    description
+      "Hop count path metric.";
+    reference
+      "RFC5440: Path Computation Element (PCE) Communication Protocol (PCEP).";
+  }
+
+  identity PATH_DELAY {
+    base PATH_METRIC_TYPE;
+    description
+      "Unidirectional average link delay.
+      It represents the sum of the Link Delay metric
+      of all links along a P2P path.";
+    reference
+      "RFC8570 IS-IS Traffic Engineering (TE) Metric Extensions.
+      RFC7471 OSPF Traffic Engineering (TE) Metric Extensions.
+      RFC 8233: Extensions to the Path Computation Element Communication Protocol (PCEP)
+      to Compute Service-Aware Label Switched Paths (LSPs) Path Computation Element (PCE)
+      Communication Protocol (PCEP).";
+  }
+
+  identity RSVP_AUTH_TYPE {
+    description
+      "Base identity for RSVP message authentication types";
+    reference
+      "RFC2747: RSVP Cryptographic Authentication";
+  }
+
+  identity RSVP_AUTH_MD5 {
+    base RSVP_AUTH_TYPE;
+    description
+      "HMAC-MD5 message authentication";
+  }
+
+  // typedef statements
+  typedef mpls-label {
+    type union {
+      type uint32 {
+        range 16..1048575;
+      }
+      type enumeration {
+        enum IPV4_EXPLICIT_NULL {
+          value 0;
+          description
+            "valid at the bottom of the label stack,
+            indicates that stack must be popped and packet forwarded
+            based on IPv4 header";
+        }
+        enum ROUTER_ALERT {
+          value 1;
+          description
+            "allowed anywhere in the label stack except
+            the bottom, local router delivers packet to the local CPU
+            when this label is at the top of the stack";
+        }
+        enum IPV6_EXPLICIT_NULL {
+          value 2;
+          description
+            "valid at the bottom of the label stack,
+            indicates that stack must be popped and packet forwarded
+            based on IPv6 header";
+        }
+        enum IMPLICIT_NULL {
+          value 3;
+          description
+            "assigned by local LSR but not carried in
+            packets";
+        }
+        enum ENTROPY_LABEL_INDICATOR {
+          value 7;
+          description
+            "Entropy label indicator, to allow an LSR
+            to distinguish between entropy label and applicaiton
+            labels RFC 6790";
+        }
+        enum NO_LABEL {
+          description
+            "This value is utilised to indicate that the packet that
+            is forwarded by the local system does not have an MPLS
+            header applied to it. Typically, this is used at the
+            egress of an LSP";
+        }
+      }
+    }
+    description
+      "type for MPLS label value encoding";
+    reference "RFC 3032 - MPLS Label Stack Encoding";
+  }
+
+  typedef tunnel-type {
+    type enumeration {
+      enum P2P {
+        description
+          "point-to-point label-switched-path";
+      }
+      enum P2MP {
+        description
+          "point-to-multipoint label-switched-path";
+      }
+      enum MP2MP {
+        description
+          "multipoint-to-multipoint label-switched-path";
+      }
+    }
+    description
+      "defines the tunnel type for the LSP";
+    reference
+      "RFC 6388 - Label Distribution Protocol Extensions for
+      Point-to-Multipoint and Multipoint-to-Multipoint Label Switched
+      Paths
+      RFC 4875 - Extensions to  Resource Reservation Protocol
+      - Traffic Engineering (RSVP-TE) for Point-to-Multipoint TE
+      Label Switched Paths (LSPs)";
+  }
+
+  typedef bandwidth-kbps {
+    type uint64;
+    units "Kbps";
+    description
+      "Bandwidth values expressed in kilobits per second";
+  }
+
+  typedef bandwidth-mbps {
+    type uint64;
+    units "Mbps";
+    description
+      "Bandwidth values expressed in megabits per second";
+  }
+
+  typedef bandwidth-gbps {
+    type uint64;
+    units "Gbps";
+    description
+      "Bandwidth values expressed in gigabits per second";
+  }
+
+  typedef mpls-tc {
+    type uint8 {
+      range "0..7";
+    }
+    description
+      "Values of the MPLS Traffic Class (formerly known as
+      Experimental, EXP) bits";
+  }
+
+  // grouping statements
+
+  // data definition statements
+
+  // augment statements
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-extensions.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-extensions.yang
new file mode 100644
index 0000000000000000000000000000000000000000..2e0fd9f075b235e90ebc58a5f56072cbaceccb56
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-extensions.yang
@@ -0,0 +1,206 @@
+module openconfig-extensions {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/openconfig-ext";
+
+  prefix "oc-ext";
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module provides extensions to the YANG language to allow
+    OpenConfig specific functionality and meta-data to be defined.";
+
+  oc-ext:openconfig-version "0.5.1";
+
+  revision "2022-10-05" {
+    description
+      "Add missing version statement.";
+    reference "0.5.1";
+  }
+
+  revision "2020-06-16" {
+    description
+      "Add extension for POSIX pattern statements.";
+    reference "0.5.0";
+  }
+
+  revision "2018-10-17" {
+    description
+      "Add extension for regular expression type.";
+    reference "0.4.0";
+  }
+
+  revision "2017-04-11" {
+    description
+      "rename password type to 'hashed' and clarify description";
+    reference "0.3.0";
+  }
+
+  revision "2017-01-29" {
+    description
+      "Added extension for annotating encrypted values.";
+    reference "0.2.0";
+  }
+
+  revision "2015-10-09" {
+    description
+      "Initial OpenConfig public release";
+    reference "0.1.0";
+  }
+
+
+  // extension statements
+  extension openconfig-version {
+    argument "semver" {
+      yin-element false;
+    }
+    description
+      "The OpenConfig version number for the module. This is
+      expressed as a semantic version number of the form:
+        x.y.z
+      where:
+        * x corresponds to the major version,
+        * y corresponds to a minor version,
+        * z corresponds to a patch version.
+      This version corresponds to the model file within which it is
+      defined, and does not cover the whole set of OpenConfig models.
+
+      Individual YANG modules are versioned independently -- the
+      semantic version is generally incremented only when there is a
+      change in the corresponding file.  Submodules should always
+      have the same semantic version as their parent modules.
+
+      A major version number of 0 indicates that this model is still
+      in development (whether within OpenConfig or with industry
+      partners), and is potentially subject to change.
+
+      Following a release of major version 1, all modules will
+      increment major revision number where backwards incompatible
+      changes to the model are made.
+
+      The minor version is changed when features are added to the
+      model that do not impact current clients use of the model.
+
+      The patch-level version is incremented when non-feature changes
+      (such as bugfixes or clarifications to human-readable
+      descriptions that do not impact model functionality) are made
+      that maintain backwards compatibility.
+
+      The version number is stored in the module meta-data.";
+  }
+
+  extension openconfig-hashed-value {
+    description
+      "This extension provides an annotation on schema nodes to
+      indicate that the corresponding value should be stored and
+      reported in hashed form.
+
+      Hash algorithms are by definition not reversible. Clients
+      reading the configuration or applied configuration for the node
+      should expect to receive only the hashed value. Values written
+      in cleartext will be hashed. This annotation may be used on
+      nodes such as secure passwords in which the device never reports
+      a cleartext value, even if the input is provided as cleartext.";
+  }
+
+  extension regexp-posix {
+     description
+      "This extension indicates that the regular expressions included
+      within the YANG module specified are conformant with the POSIX
+      regular expression format rather than the W3C standard that is
+      specified by RFC6020 and RFC7950.";
+  }
+
+  extension posix-pattern {
+    argument "pattern" {
+      yin-element false;
+    }
+    description
+      "Provides a POSIX ERE regular expression pattern statement as an
+      alternative to YANG regular expresssions based on XML Schema Datatypes.
+      It is used the same way as the standard YANG pattern statement defined in
+      RFC6020 and RFC7950, but takes an argument that is a POSIX ERE regular
+      expression string.";
+    reference
+      "POSIX Extended Regular Expressions (ERE) Specification:
+      https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04";
+  }
+
+  extension telemetry-on-change {
+    description
+      "The telemetry-on-change annotation is specified in the context
+      of a particular subtree (container, or list) or leaf within the
+      YANG schema. Where specified, it indicates that the value stored
+      by the nodes within the context change their value only in response
+      to an event occurring. The event may be local to the target, for
+      example - a configuration change, or external - such as the failure
+      of a link.
+
+      When a telemetry subscription allows the target to determine whether
+      to export the value of a leaf in a periodic or event-based fashion
+      (e.g., TARGET_DEFINED mode in gNMI), leaves marked as
+      telemetry-on-change should only be exported when they change,
+      i.e., event-based.";
+  }
+
+  extension telemetry-atomic {
+    description
+      "The telemetry-atomic annotation is specified in the context of
+      a subtree (containre, or list), and indicates that all nodes
+      within the subtree are always updated together within the data
+      model. For example, all elements under the subtree may be updated
+      as a result of a new alarm being raised, or the arrival of a new
+       protocol message.
+
+      Transport protocols may use the atomic specification to determine
+      optimisations for sending or storing the corresponding data.";
+  }
+
+  extension operational {
+    description
+      "The operational annotation is specified in the context of a
+      grouping, leaf, or leaf-list within a YANG module. It indicates
+      that the nodes within the context are derived state on the device.
+
+      OpenConfig data models divide nodes into the following three categories:
+
+       - intended configuration - these are leaves within a container named
+         'config', and are the writable configuration of a target.
+       - applied configuration - these are leaves within a container named
+         'state' and are the currently running value of the intended configuration.
+       - derived state - these are the values within the 'state' container which
+         are not part of the applied configuration of the device. Typically, they
+         represent state values reflecting underlying operational counters, or
+         protocol statuses.";
+  }
+
+  extension catalog-organization {
+    argument "org" {
+      yin-element false;
+    }
+    description
+      "This extension specifies the organization name that should be used within
+      the module catalogue on the device for the specified YANG module. It stores
+      a pithy string where the YANG organization statement may contain more
+      details.";
+  }
+
+  extension origin {
+    argument "origin" {
+      yin-element false;
+    }
+    description
+      "This extension specifies the name of the origin that the YANG module
+      falls within. This allows multiple overlapping schema trees to be used
+      on a single network element without requiring module based prefixing
+      of paths.";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-transport/openconfig-transport-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-transport/openconfig-transport-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..dc56998428f8facb7e810249bb8b9ecff51f6005
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/openconfig-transport/openconfig-transport-types.yang
@@ -0,0 +1,1883 @@
+module openconfig-transport-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/transport-types";
+
+  prefix "oc-opt-types";
+
+  import openconfig-platform-types { prefix oc-platform-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-types { prefix oc-types; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module contains general type definitions and identities
+    for optical transport models.";
+
+  oc-ext:openconfig-version "0.24.0";
+
+  revision "2024-03-20" {
+    description
+      "FlexO support, 800G trib protocol, and OSFP
+       description update for 800G.";
+     reference "0.24.0";
+  }
+
+  revision "2024-03-12" {
+    description
+      "Add TRIBUTARY_RATE_CLASS_TYPE's up to 3200G to support
+       mating of two 1600G line rates.";
+     reference "0.23.0";
+  }
+
+  revision "2024-01-17" {
+    description
+      "Update loopback-mode types.";
+    reference "0.22.0";
+  }
+
+  revision "2024-01-16" {
+    description
+      "Added form factors QSFP28_DD and CSFP.
+       Added new PMDs: ETH_100GBASE_ER4L (MSA 100GBASE-ER4 Lite),
+       ETH_1GBASE_LX10.
+       Added References for 100GBASE-CR4 and 40GGBASE-CR4 for DACs";
+     reference "0.21.0";
+  }
+
+  revision "2023-08-03" {
+    description
+      "Add QSFP56 and QSFP56_DD form factor identities and
+      deprecated QSFP56_DD_TYPE1 and QSFP56_DD_TYPE2 form factor identities.";
+    reference "0.20.0";
+  }
+
+  revision "2023-07-24" {
+    description
+      "Add SFP_DD and DSFP form factor identities.";
+    reference "0.19.0";
+  }
+
+  revision "2023-02-08" {
+    description
+      "Add ETH_100GBASE_DR PMD type";
+    reference "0.18.1";
+  }
+
+  revision "2022-12-05" {
+    description
+      "Fix trailing whitespace";
+    reference "0.17.1";
+  }
+
+  revision "2022-10-18" {
+    description
+      "Add ETH_400GMSA_PSM4 PMD type";
+    reference "0.17.0";
+  }
+
+  revision "2022-09-26" {
+    description
+      "Add SFP28 and SFP56 form factor identities.";
+    reference "0.16.0";
+  }
+
+  revision "2021-07-29" {
+    description
+      "Add several avg-min-max-instant-stats groupings";
+    reference "0.15.0";
+  }
+
+  revision "2021-03-22" {
+    description
+      "Add client mapping mode identityref.";
+    reference "0.14.0";
+  }
+
+  revision "2021-02-26" {
+    description
+      "Additional PMD types, form factors, and protocol types.";
+    reference "0.13.0";
+  }
+
+  revision "2020-08-12" {
+    description
+      "Additional tributary rates.";
+    reference "0.12.0";
+  }
+
+  revision "2020-04-24" {
+    description
+      "Add 400G protocol and additional tributary half rates.";
+    reference "0.11.0";
+  }
+
+  revision "2020-04-22" {
+    description
+      "Add AOC and DAC connector identities.";
+    reference "0.10.0";
+  }
+
+  revision "2019-06-27" {
+    description
+      "Add FIBER_JUMPER_TYPE identityref.";
+    reference "0.9.0";
+  }
+
+  revision "2019-06-21" {
+    description
+      "Generalize and rename optical port type identity";
+    reference "0.8.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.7.1";
+  }
+
+  revision "2018-10-23" {
+    description
+      "Added frame mapping protocols for logical channels assignments
+      and tributary slot granularity for OTN logical channels";
+    reference "0.7.0";
+  }
+
+  revision "2018-05-16" {
+    description
+      "Added interval,min,max time to interval stats.";
+    reference "0.6.0";
+  }
+
+  revision "2017-08-16" {
+    description
+      "Added ODU Cn protocol type";
+    reference "0.5.0";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Fixes and additions for terminal optics model";
+    reference "0.4.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // typedef statements
+
+  typedef frequency-type {
+    type uint64;
+    units "MHz";
+    description
+      "Type for optical spectrum frequency values";
+  }
+
+  typedef admin-state-type {
+    type enumeration {
+      enum ENABLED {
+        description
+        "Sets the channel admin state to enabled";
+      }
+      enum DISABLED {
+        description
+        "Sets the channel admin state to disabled";
+      }
+      enum MAINT {
+        description
+        "Sets the channel to maintenance / diagnostic mode";
+      }
+    }
+    description "Administrative state modes for
+    logical channels in the transponder model.";
+  }
+
+  typedef loopback-mode-type {
+    type enumeration {
+      enum NONE {
+        description
+          "No loopback is applied";
+      }
+      enum FACILITY {
+        description
+          "A port internal loopback at ASIC level. The loopback directs
+          traffic normally transmitted on the port back to the device as
+          if received on the same port from an external source. Note this
+          mode is used when internal loopback does NOT specify MAC or PHY.";
+      }
+      enum TERMINAL {
+        description
+          "A port external loopback at ASIC level. The loopback which
+          directs traffic received from an external source on the port
+          back out the transmit side of the same port. Note this mode is
+          used when external loopback does NOT specify MAC or PHY";
+      }
+      enum ASIC_PHY_LOCAL {
+        description
+          "A port internal loopback at PHY module. The loopback directs
+          traffic normally transmitted on the port back to the device as
+          if received on the same port from an external source.";
+      }
+      enum ASIC_PHY_REMOTE {
+        description
+          "A port external loopback at PHY module. The loopback which
+          directs traffic received from an external source on the port
+          back out the transmit side of the same port.";
+      }
+      enum ASIC_MAC_LOCAL {
+        description
+          "A port internal loopback at MAC module. The loopback directs
+          traffic normally transmitted on the port back to the device as
+          if received on the same port from an external source.";
+      }
+      enum ASIC_MAC_REMOTE {
+        description
+          "A port external loopback at MAC module. The loopback which
+          directs traffic received from an external source on the port
+          back out the transmit side of the same port.";
+      }
+    }
+    default NONE;
+    description
+      "Loopback modes for transponder logical channels";
+  }
+
+  identity FRAME_MAPPING_PROTOCOL {
+    description
+      "Base identity for frame mapping protocols that can be used
+      when mapping Ethernet, OTN or other client signals to OTN
+      logical channels.";
+  }
+
+  identity AMP {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Asynchronous Mapping Procedure";
+  }
+
+  identity GMP {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Generic Mapping Procedure";
+  }
+
+  identity BMP {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Bit-synchronous Mapping Procedure";
+  }
+
+  identity CBR {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Constant Bit Rate Mapping Procedure";
+  }
+
+  identity GFP_T {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Transparent Generic Framing Protocol";
+  }
+
+  identity GFP_F {
+    base FRAME_MAPPING_PROTOCOL;
+    description "Framed-Mapped Generic Framing Protocol";
+  }
+
+  identity TRIBUTARY_SLOT_GRANULARITY {
+    description
+      "Base identity for tributary slot granularity for OTN
+      logical channels.";
+  }
+
+  identity TRIB_SLOT_1.25G {
+    base TRIBUTARY_SLOT_GRANULARITY;
+    description
+      "The tributary slot with a bandwidth of approximately 1.25 Gb/s
+      as defined in ITU-T G.709 standard.";
+  }
+
+  identity TRIB_SLOT_2.5G {
+    base TRIBUTARY_SLOT_GRANULARITY;
+    description
+      "The tributary slot with a bandwidth of approximately 2.5 Gb/s
+      as defined in ITU-T G.709 standard.";
+  }
+
+  identity TRIB_SLOT_5G {
+    base TRIBUTARY_SLOT_GRANULARITY;
+    description
+      "The tributary slot with a bandwidth of approximately 5 Gb/s
+      as defined in ITU-T G.709 standard.";
+  }
+
+  // grouping statements
+
+  grouping avg-min-max-instant-stats-precision2-ps-nm {
+    description
+      "Common grouping for recording picosecond per nanometer
+      values with 2 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics.
+      Statistics are computed and reported based on a moving time
+      interval (e.g., the last 30s).  If supported by the device,
+      the time interval over which the statistics are computed, and
+      the times at which the minimum and maximum values occurred,
+      are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-ps {
+    description
+      "Common grouping for recording picosecond values with
+      2 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics.
+      Statistics are computed and reported based on a moving time
+      interval (e.g., the last 30s).  If supported by the device,
+      the time interval over which the statistics are computed, and
+      the times at which the minimum and maximum values occurred,
+      are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-ps2 {
+    description
+      "Common grouping for recording picosecond^2 values with
+      2 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics.
+      Statistics are computed and reported based on a moving time
+      interval (e.g., the last 30s).  If supported by the device,
+      the time interval over which the statistics are computed, and
+      the times at which the minimum and maximum values occurred,
+      are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The maximum value of the statistic over the time
+        interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision18-ber {
+    description
+      "Common grouping for recording bit error rate (BER) values
+      with 18 decimal precision. Note that decimal64 supports
+      values as small as i x 10^-18 where i is an integer. Values
+      smaller than this should be reported as 0 to inidicate error
+      free or near error free performance. Values include the
+      instantaneous, average, minimum, and maximum statistics.
+      Statistics are computed and reported based on a moving time
+      interval (e.g., the last 30s).  If supported by the device,
+      the time interval over which the statistics are computed, and
+      the times at which the minimum and maximum values occurred,
+      are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The minimum value of the statistic over the time
+        interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The maximum value of the statistic over the time
+        interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision1-mhz {
+    description
+      "Common grouping for recording frequency values in MHz with
+      1 decimal precision. Values include the instantaneous, average,
+      minimum, and maximum statistics. Statistics are computed and
+      reported based on a moving time interval (e.g., the last 30s).
+      If supported by the device, the time interval over which the
+      statistics are computed, and the times at which the minimum and
+      maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units MHz;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units MHz;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units MHz;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units MHz;
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision1-krads {
+    description
+      "Common grouping for recording kiloradian per second (krad/s) values
+      with 1 decimal precision. Values include the instantaneous,
+      average, minimum, and maximum statistics. Statistics are computed
+      and reported based on a moving time interval (e.g., the last 30s).
+      If supported by the device, the time interval over which the
+      statistics are computed, and the times at which the minimum and
+      maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units "krad/s";
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units "krad/s";
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units "krad/s";
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units "krad/s";
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-pct {
+    description
+      "Common grouping for percentage statistics with 2 decimal precision.
+      Values include the instantaneous, average, minimum, and maximum
+      statistics. Statistics are computed and reported based on a moving
+      time interval (e.g., the last 30s). If supported by the device,
+      the time interval over which the statistics are computed, and the
+      times at which the minimum and maximum values occurred, are also
+      reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units percentage;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units percentage;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units percentage;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units percentage;
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+
+  // identity statements
+
+  identity TRIBUTARY_PROTOCOL_TYPE {
+    description
+      "Base identity for protocol framing used by tributary
+      signals.";
+  }
+
+  identity PROT_1GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "1G Ethernet protocol";
+  }
+
+  identity PROT_OC48 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC48 protocol";
+  }
+
+  identity PROT_STM16 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 16 protocol";
+  }
+
+  identity PROT_10GE_LAN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "10G Ethernet LAN protocol";
+  }
+
+  identity PROT_10GE_WAN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "10G Ethernet WAN protocol";
+  }
+
+  identity PROT_OC192 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC 192 (9.6GB) port protocol";
+  }
+
+  identity PROT_STM64 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 64 protocol";
+  }
+
+  identity PROT_OTU2 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 2 protocol";
+  }
+
+  identity PROT_OTU2E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 2e protocol";
+  }
+
+  identity PROT_OTU1E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 1e protocol";
+  }
+
+  identity PROT_ODU2 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 2 protocol";
+  }
+
+  identity PROT_ODU2E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 2e protocol";
+  }
+
+  identity PROT_40GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "40G Ethernet port protocol";
+  }
+
+  identity PROT_OC768 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC 768 protocol";
+  }
+
+  identity PROT_STM256 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 256 protocol";
+  }
+
+  identity PROT_OTU3 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 3 protocol";
+  }
+
+  identity PROT_ODU3 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 3 protocol";
+  }
+
+  identity PROT_100GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "100G Ethernet protocol";
+  }
+
+  identity PROT_100G_MLG {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "100G MLG protocol";
+  }
+
+  identity PROT_OTU4 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU4 signal protocol (112G) for transporting
+    100GE signal";
+  }
+
+  identity PROT_OTUCN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU Cn protocol";
+  }
+
+  identity PROT_ODUCN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU Cn protocol";
+  }
+
+  identity PROT_ODU4 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 4 protocol";
+  }
+
+  identity PROT_400GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "400G Ethernet protocol";
+  }
+
+  identity PROT_800GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "800G Ethernet protocol";
+  }
+
+  identity PROT_OTSIG {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "Optical tributary signal group protocol";
+  }
+
+  identity PROT_ODUFLEX_CBR {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU Flex with CBR protocol";
+  }
+
+  identity PROT_FLEXO {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description
+      "FlexO protocol as defined in ITU-T G.709.1 and ITU-T G.709.3";
+  }
+
+  identity PROT_ODUFLEX_GFP {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU Flex with GFP protocol";
+  }
+
+  identity TRANSCEIVER_FORM_FACTOR_TYPE {
+    description
+      "Base identity for identifying the type of pluggable optic
+      transceiver (i.e,. form factor) used in a port.";
+  }
+
+  identity CFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "C form-factor pluggable, that can support up to a
+      100 Gb/s signal with 10x10G or 4x25G physical channels";
+  }
+
+  identity CFP2 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "1/2 C form-factor pluggable, that can support up to a
+      200 Gb/s signal with 10x10G, 4x25G, or 8x25G physical
+      channels";
+  }
+
+  identity CFP2_ACO {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "CFP2 analog coherent optics transceiver, supporting
+      100 Gb, 200Gb, and 250 Gb/s signal.";
+  }
+
+  identity CFP4 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "1/4 C form-factor pluggable, that can support up to a
+      100 Gb/s signal with 10x10G or 4x25G physical channels";
+  }
+
+  identity QSFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "OriginalQuad Small Form-factor Pluggable transceiver that can
+      support 4x1G physical channels.  Not commonly used.";
+  }
+
+  identity QSFP_PLUS {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Quad Small Form-factor Pluggable transceiver that can support
+      up to 4x10G physical channels.";
+  }
+
+  identity QSFP28 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "QSFP pluggable optic with support for up to 4x28G physical
+      channels";
+  }
+
+  identity QSFP28_DD {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "QSFP-DD with electrical interfaces consisting of 8 lanes that operate at up to
+      25 Gbps with NRZ modulation";
+    reference "http://qsfp-dd.com";
+  }
+
+  identity QSFP56 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "QSFP pluggable optic with support for up to 4x56G physical
+      channels";
+  }
+
+  identity QSFP56_DD {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "QSFP-DD electrical interfaces will employ 8 lanes that operate up to
+      25 Gbps NRZ modulation or 50 Gbps PAM4 modulation, providing
+      solutions up to 200 Gbps or 400 Gbps aggregate";
+    reference "http://qsfp-dd.com";
+  }
+
+  identity QSFP56_DD_TYPE1 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    status deprecated;
+    description
+      "QSFP DD pluggable optic with support for up to 8x56G physical
+      channels. Type 1 uses eight optical and electrical signals.";
+  }
+
+  identity QSFP56_DD_TYPE2 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    status deprecated;
+    description
+      "QSFP DD pluggable optic with support for up to 4x112G physical
+      channels. Type 2 uses four optical and eight electrical
+      signals.";
+  }
+
+  identity CPAK {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Cisco CPAK transceiver supporting 100 Gb/s.";
+  }
+
+  identity SFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Small form-factor pluggable transceiver supporting up to
+      10 Gb/s signal";
+  }
+
+  identity SFP_PLUS {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Enhanced small form-factor pluggable transceiver supporting
+      up to 16 Gb/s signals, including 10 GbE and OTU2";
+  }
+
+  identity CSFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Compact Small form-factor pluggable transceiver. It is a version
+      of SFP with the same mechanical form factor allowing two independent
+      bidirectional channels per port.";
+  }
+
+
+
+  identity SFP28 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Small form-factor pluggable transceiver supporting up to
+      25 Gb/s signal";
+  }
+
+  identity SFP56 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Small form-factor pluggable transceiver supporting up to
+      50 Gb/s signal";
+  }
+
+  identity SFP_DD {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "SFP-DD electrical interfaces will employ 2 lanes that operate up to
+      25 Gbps NRZ modulation or 56 Gbps PAM4 modulation, providing
+      solutions up to 50 Gbps or 112 Gbps PAM4 aggregate";
+    reference "http://sfp-dd.com";
+  }
+
+  identity DSFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "A transceiver implementing the DSFP Transceiver specification";
+    reference "https://dsfpmsa.org/";
+  }
+
+  identity XFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "10 Gigabit small form factor pluggable transceiver supporting
+      10 GbE and OTU2";
+  }
+
+  identity X2 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "10 Gigabit small form factor pluggable transceiver supporting
+      10 GbE using a XAUI inerface and 4 data channels.";
+  }
+
+  identity OSFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Octal small form factor pluggable transceiver supporting
+      400 Gb/s or 800 Gb/s.";
+  }
+
+  identity NON_PLUGGABLE {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Represents a port that does not require a pluggable optic,
+      e.g., with on-board optics like COBO";
+  }
+
+  identity OTHER {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Represents a transceiver form factor not otherwise listed";
+  }
+
+  identity FIBER_CONNECTOR_TYPE {
+    description
+      "Type of optical fiber connector";
+  }
+
+  identity SC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "SC type fiber connector";
+  }
+
+  identity LC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "LC type fiber connector";
+  }
+
+  identity MPO_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "MPO (multi-fiber push-on/pull-off) type fiber connector
+      1x12 fibers";
+  }
+
+  identity AOC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "AOC (active optical cable) type fiber connector";
+  }
+
+  identity DAC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "DAC (direct attach copper) type fiber connector";
+  }
+
+  identity ETHERNET_PMD_TYPE {
+    description
+      "Ethernet compliance codes (PMD) supported by transceivers";
+  }
+
+  identity ETH_1000BASE_LX10 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: ETH_1000BASE_LX10";
+    reference "802.3ah-2004(CL59)";
+  }
+
+  identity ETH_10GBASE_LRM {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_LRM";
+  }
+
+  identity ETH_10GBASE_LR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_LR";
+  }
+
+  identity ETH_10GBASE_ZR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_ZR";
+  }
+
+  identity ETH_10GBASE_ER {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_ER";
+  }
+
+  identity ETH_10GBASE_SR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_SR";
+  }
+
+  identity ETH_40GBASE_CR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_CR4.
+    This PMD is used in Direct Attach Cables (DAC)
+    and Active Optical Cables (AOC)";
+    reference "IEEE 802.3ba 40GBASE-CR4";
+  }
+
+  identity ETH_40GBASE_SR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_SR4";
+  }
+
+  identity ETH_40GBASE_LR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_LR4";
+  }
+
+  identity ETH_40GBASE_ER4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_ER4";
+  }
+
+  identity ETH_40GBASE_PSM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_PSM4";
+  }
+
+  identity ETH_4X10GBASE_LR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 4x10GBASE_LR";
+  }
+
+  identity ETH_4X10GBASE_SR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 4x10GBASE_SR";
+  }
+
+  identity ETH_100G_AOC {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100G_AOC";
+  }
+
+  identity ETH_100G_ACC {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100G_ACC";
+  }
+
+  identity ETH_100GBASE_SR10 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_SR10";
+  }
+
+  identity ETH_100GBASE_SR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_SR4";
+  }
+
+  identity ETH_100GBASE_LR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_LR4";
+  }
+
+  identity ETH_100GBASE_ER4L {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_ER4L";
+  }
+
+  identity ETH_100GBASE_ER4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_ER4";
+  }
+
+  identity ETH_100GBASE_CWDM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CWDM4";
+  }
+
+  identity ETH_100GBASE_CLR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CLR4";
+  }
+
+  identity ETH_100GBASE_PSM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_PSM4";
+  }
+
+  identity ETH_100GBASE_CR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CR4.
+      This PMD is used in Direct Attach Cables (DAC)
+      and Active Optical Cables (AOC)";
+    reference "IEEE 802.3bj 100GBASE-CR4";
+  }
+
+  identity ETH_100GBASE_FR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_FR";
+  }
+
+  identity ETH_100GBASE_DR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_DR";
+  }
+
+  identity ETH_400GBASE_ZR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GBASE_ZR";
+  }
+
+  identity ETH_400GBASE_LR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GBASE_LR4";
+  }
+
+  identity ETH_400GBASE_FR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GBASE_FR4";
+  }
+
+  identity ETH_400GBASE_LR8 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GBASE_LR8";
+  }
+
+  identity ETH_400GBASE_DR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GBASE_DR4";
+  }
+
+  identity ETH_400GMSA_PSM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 400GMSA_PSM4";
+  }
+
+  identity ETH_UNDEFINED {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: undefined";
+  }
+
+  identity SONET_APPLICATION_CODE {
+    description
+      "Supported SONET/SDH application codes";
+  }
+
+  identity VSR2000_3R2 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R2";
+  }
+
+  identity VSR2000_3R3 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R3";
+  }
+
+  identity VSR2000_3R5 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R5";
+  }
+
+  identity SONET_UNDEFINED {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: undefined";
+  }
+
+  identity OTN_APPLICATION_CODE {
+    description
+      "Supported OTN application codes";
+  }
+
+  identity P1L1_2D1 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1L1_2D1";
+  }
+
+  identity P1S1_2D2 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1S1_2D2";
+  }
+
+  identity P1L1_2D2 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1L1_2D2";
+  }
+
+  identity OTN_UNDEFINED {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: undefined";
+  }
+
+  identity TRIBUTARY_RATE_CLASS_TYPE {
+    description
+      "Rate of tributary signal _- identities will typically reflect
+      rounded bit rate.";
+  }
+
+  identity TRIB_RATE_1G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2.5G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2.5G tributary signal rate";
+  }
+
+  identity TRIB_RATE_10G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "10G tributary signal rate";
+  }
+
+  identity TRIB_RATE_40G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "40G tributary signal rate";
+  }
+
+  identity TRIB_RATE_100G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "100G tributary signal rate";
+  }
+
+  identity TRIB_RATE_150G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "150G tributary signal rate";
+  }
+
+  identity TRIB_RATE_200G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "200G tributary signal rate";
+  }
+
+  identity TRIB_RATE_250G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "250G tributary signal rate";
+  }
+
+  identity TRIB_RATE_300G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "300G tributary signal rate";
+  }
+
+  identity TRIB_RATE_350G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "350G tributary signal rate";
+  }
+
+  identity TRIB_RATE_400G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "400G tributary signal rate";
+  }
+
+  identity TRIB_RATE_450G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "450G tributary signal rate";
+  }
+
+  identity TRIB_RATE_500G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "500G tributary signal rate";
+  }
+
+  identity TRIB_RATE_550G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "550G tributary signal rate";
+  }
+
+  identity TRIB_RATE_600G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "600G tributary signal rate";
+  }
+
+  identity TRIB_RATE_650G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "650G tributary signal rate";
+  }
+
+  identity TRIB_RATE_700G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "700G tributary signal rate";
+  }
+
+  identity TRIB_RATE_750G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "750G tributary signal rate";
+  }
+
+  identity TRIB_RATE_800G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "800G tributary signal rate";
+  }
+
+  identity TRIB_RATE_850G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "850G tributary signal rate";
+  }
+
+  identity TRIB_RATE_900G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "900G tributary signal rate";
+  }
+
+  identity TRIB_RATE_950G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "950G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1000G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1000G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1050G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1050G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1100G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1100G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1150G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1150G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1200G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1200G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1250G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1250G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1300G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1300G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1350G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1350G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1400G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1400G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1450G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1450G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1500G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1500G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1550G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1550G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1600G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1600G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1650G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1650G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1700G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1700G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1750G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1750G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1800G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1800G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1850G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1850G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1900G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1900G tributary signal rate";
+  }
+
+  identity TRIB_RATE_1950G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1950G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2000G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2000G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2050G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2050G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2100G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2100G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2150G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2150G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2200G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2200G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2250G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2250G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2300G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2300G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2350G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2350G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2400G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2400G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2450G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2450G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2500G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2500G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2550G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2550G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2600G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2600G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2650G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2650G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2700G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2700G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2750G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2750G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2800G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2800G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2850G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2850G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2900G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2900G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2950G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2950G tributary signal rate";
+  }
+
+  identity TRIB_RATE_3000G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "3000G tributary signal rate";
+  }
+
+  identity TRIB_RATE_3050G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "3050G tributary signal rate";
+  }
+
+  identity TRIB_RATE_3100G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "3100G tributary signal rate";
+  }
+
+  identity TRIB_RATE_3150G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "3150G tributary signal rate";
+  }
+
+  identity TRIB_RATE_3200G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "3200G tributary signal rate";
+  }
+
+  identity LOGICAL_ELEMENT_PROTOCOL_TYPE {
+    description
+      "Type of protocol framing used on the logical channel or
+      tributary";
+  }
+
+  identity PROT_ETHERNET {
+    base LOGICAL_ELEMENT_PROTOCOL_TYPE;
+    description
+      "Ethernet protocol framing";
+  }
+
+  identity PROT_OTN {
+    base LOGICAL_ELEMENT_PROTOCOL_TYPE;
+    description
+      "OTN protocol framing";
+  }
+
+  identity OPTICAL_CHANNEL {
+    base oc-platform-types:OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Optical channels act as carriers for transport traffic
+      directed over a line system.  They are represented as
+      physical components in the physical inventory model.";
+  }
+
+  identity FIBER_JUMPER_TYPE {
+    description
+      "Types of fiber jumpers used for connecting device ports";
+  }
+
+  identity FIBER_JUMPER_SIMPLEX {
+    base FIBER_JUMPER_TYPE;
+    description
+      "Simplex fiber jumper";
+  }
+
+  identity FIBER_JUMPER_MULTI_FIBER_STRAND {
+    base FIBER_JUMPER_TYPE;
+    description
+      "One strand of a fiber jumper which contains multiple fibers
+      within it, such as an MPO based fiber jumper";
+  }
+
+  identity OPTICAL_PORT_TYPE {
+    description
+      "Type definition for optical transport port types";
+  }
+
+  identity INGRESS {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Ingress port, corresponding to a signal entering
+      a line system device such as an amplifier or wavelength
+      router.";
+  }
+
+  identity EGRESS {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Egress port, corresponding to a signal exiting
+      a line system device such as an amplifier or wavelength
+      router.";
+  }
+
+  identity ADD {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Add port, corresponding to a signal injected
+      at a wavelength router.";
+  }
+
+  identity DROP {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Drop port, corresponding to a signal dropped
+      at a wavelength router.";
+  }
+
+  identity MONITOR {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Monitor port, corresponding to a signal used by an optical
+      channel monitor. This is used to represent the connection
+      that a channel monitor port is connected to, typically on a
+      line system device. This  connection may be via physical cable
+      and faceplate ports or internal to the device";
+  }
+
+  identity TERMINAL_CLIENT {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Client-facing port on a terminal optics device (e.g.,
+      transponder or muxponder).";
+  }
+
+  identity TERMINAL_LINE {
+    base OPTICAL_PORT_TYPE;
+    description
+      "Line-facing port on a terminal optics device (e.g.,
+      transponder or muxponder).";
+  }
+
+  identity CLIENT_MAPPING_MODE {
+    description
+      "Type definition for optical transport client mapping modes.";
+  }
+
+  identity MODE_1X100G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "1 x 100G client mapping mode.";
+  }
+
+  identity MODE_1X200G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "1 x 200G client mapping mode.";
+  }
+
+  identity MODE_1X400G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "1 x 400G client mapping mode.";
+  }
+
+  identity MODE_2X100G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "2 x 100G client mapping mode.";
+  }
+
+  identity MODE_2X200G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "2 x 200G client mapping mode.";
+  }
+
+  identity MODE_3X100G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "3 x 100G client mapping mode.";
+  }
+
+  identity MODE_4X100G {
+    base CLIENT_MAPPING_MODE;
+    description
+      "4 x 100G client mapping mode.";
+  }
+
+  identity TRANSCEIVER_MODULE_FUNCTIONAL_TYPE {
+    description
+      "Type definition for transceiver module functional types.";
+  }
+
+  identity TYPE_STANDARD_OPTIC {
+    base TRANSCEIVER_MODULE_FUNCTIONAL_TYPE;
+    description
+      "Standard optic using a grey wavelength (i.e. 1310, 1550, etc.)
+      and on-off-keying (OOK) modulation.";
+  }
+
+  identity TYPE_DIGITAL_COHERENT_OPTIC {
+    base TRANSCEIVER_MODULE_FUNCTIONAL_TYPE;
+    description
+      "Digital coherent module which transmits a phase / amplitude
+      modulated signal and uses a digital signal processor to receive
+      and decode the received signal.";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-common.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-common.yang
new file mode 100644
index 0000000000000000000000000000000000000000..afb5330674db317a3cd71bedc911d4913ac59b8e
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-common.yang
@@ -0,0 +1,246 @@
+submodule openconfig-platform-common {
+
+  yang-version "1";
+
+  belongs-to openconfig-platform {
+    prefix "oc-platform";
+  }
+
+  import openconfig-platform-types { prefix oc-platform-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-types { prefix oc-types; }
+
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This modules contains common groupings that are used in multiple
+    components within the platform module.";
+
+  oc-ext:openconfig-version "0.24.0";
+
+  revision "2023-11-28" {
+    description
+      "Add model-name";
+    reference "0.24.0";
+  }
+
+  revision "2023-02-13" {
+    description
+      "Refactor resource utilization threshold config into a separate grouping.
+      Update 'utilization resource' to 'resource utilization'.";
+    reference "0.23.0";
+  }
+
+  revision "2022-12-20" {
+    description
+      "Add threshold and threshold-exceeded for resource usage.";
+    reference "0.22.0";
+  }
+
+  revision "2022-12-19" {
+    description
+      "Update last-high-watermark timestamp documentation.";
+    reference "0.21.1";
+  }
+
+  revision "2022-09-26" {
+    description
+      "Add state data for base-mac-address.";
+    reference "0.21.0";
+  }
+
+  revision "2022-08-31" {
+    description
+      "Add new state data for component CLEI code.";
+    reference "0.20.0";
+  }
+
+  revision "2022-07-28" {
+    description
+      "Add grouping for component power management";
+    reference "0.19.0";
+  }
+
+  revision "2022-07-11" {
+    description
+      "Add switchover ready";
+    reference "0.18.0";
+  }
+
+  revision "2022-06-10" {
+    description
+      "Specify units and epoch for switchover and reboot times.";
+    reference "0.17.0";
+  }
+
+  revision "2022-04-21" {
+    description
+      "Add platform utilization.";
+    reference "0.16.0";
+  }
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  // typedef statements
+
+  // grouping statements
+
+  grouping platform-resource-utilization-top {
+    description
+      "Top level grouping of platform resource utilization.";
+
+    container utilization {
+      description
+        "Resource utilization of the component.";
+
+      container resources {
+        description
+          "Enclosing container for the resources in this component.";
+
+        list resource {
+          key "name";
+          description
+            "List of resources, keyed by resource name.";
+
+          leaf name {
+            type leafref {
+              path "../config/name";
+            }
+            description
+              "References the resource name.";
+          }
+
+          container config {
+            description
+              "Configuration data for each resource.";
+
+            uses platform-resource-utilization-config;
+          }
+
+          container state {
+            config false;
+            description
+              "Operational state data for each resource.";
+
+            uses platform-resource-utilization-config;
+            uses platform-resource-utilization-state;
+          }
+        }
+      }
+    }
+  }
+
+  grouping resource-utilization-threshold-common {
+    description
+      "Common threshold configuration model for resource utilization.";
+    leaf used-threshold-upper {
+      type oc-types:percentage;
+      description
+        "The used percentage value (used / (used + free) * 100) that
+        when crossed will set utilization-threshold-exceeded to 'true'.";
+    }
+
+    leaf used-threshold-upper-clear {
+      type oc-types:percentage;
+      description
+        "The used percentage value (used / (used + free) * 100) that when
+        crossed will set utilization-threshold-exceeded to 'false'.";
+    }
+  }
+
+  grouping platform-resource-utilization-config {
+    description
+      "Configuration data for resource utilization.";
+
+    leaf name {
+      type string;
+      description
+        "Resource name within the component.";
+    }
+
+    uses resource-utilization-threshold-common;
+  }
+
+  grouping platform-resource-utilization-state {
+    description
+      "Operational state data for resource utilization.";
+
+    leaf used {
+      type uint64;
+      description
+        "Number of entries currently in use for the resource.";
+    }
+
+    leaf committed {
+      type uint64;
+      description
+        "Number of entries currently reserved for this resource. This is only
+        relevant to tables which allocate a block of resource for a given
+        feature.";
+    }
+
+    leaf free {
+      type uint64;
+      description
+        "Number of entries available to use.";
+    }
+
+    leaf max-limit {
+      type uint64;
+      description
+        "Maximum number of entries available for the resource. The value
+        is the theoretical maximum resource utilization possible.";
+    }
+
+    leaf high-watermark {
+      type uint64;
+      description
+        "A watermark of highest number of entries used for this resource.";
+    }
+
+    leaf last-high-watermark {
+      type oc-types:timeticks64;
+      description
+        "The timestamp when the high-watermark was last updated. The value
+        is the timestamp in nanoseconds relative to the Unix Epoch
+        (Jan 1, 1970 00:00:00 UTC).";
+    }
+
+    leaf used-threshold-upper-exceeded {
+      type boolean;
+      description
+        "This value is set to true when the used percentage value
+        (used / (used + free) * 100) has crossed the used-threshold-upper for this
+        resource and false when the used percentage value has crossed the configured
+        used-threshold-upper-clear value for this resource.";
+    }
+  }
+
+  grouping component-power-management {
+    description
+      "Common grouping for managing component power";
+
+    leaf power-admin-state {
+      type oc-platform-types:component-power-type;
+      default POWER_ENABLED;
+      description
+        "Enable or disable power to the component";
+    }
+  }
+
+  // data definition statements
+
+  // augment statements
+
+  // rpc statements
+
+  // notification statements
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-port.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-port.yang
new file mode 100644
index 0000000000000000000000000000000000000000..effb85bb761105620bba88c8578d101e57179c30
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-port.yang
@@ -0,0 +1,327 @@
+module openconfig-platform-port {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/platform/port";
+
+  prefix "oc-port";
+
+  // import some basic types
+  import openconfig-platform { prefix oc-platform; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-if-ethernet { prefix oc-eth; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines data related to PORT components in the
+    openconfig-platform model";
+
+  oc-ext:openconfig-version "1.0.1";
+
+  revision "2023-03-22" {
+    description
+      "Clarify use of the interface-ref type.";
+    reference "1.0.1";
+  }
+
+  revision "2023-01-19" {
+    description
+      "Add clarification of the definition of a physical channel, and
+      example configurations.";
+    reference "1.0.0";
+  }
+
+  revision "2021-10-01" {
+    description
+      "Fix indentation for 'list group'";
+    reference "0.4.2";
+  }
+
+  revision "2021-06-16" {
+    description
+      "Remove trailing whitespace";
+    reference "0.4.1";
+  }
+
+  revision "2021-04-22" {
+    description
+      "Adding support for flexible port breakout.";
+    reference "0.4.0";
+  }
+
+  revision "2020-05-06" {
+    description
+      "Ensure that when statements in read-write contexts
+      reference only read-write leaves.";
+    reference "0.3.3";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.3.2";
+  }
+
+  revision "2018-11-07" {
+    description
+      "Fixed error in when statement path";
+    reference "0.3.1";
+  }
+
+  revision "2018-01-20" {
+    description
+      "Added augmentation for interface-to-port reference";
+    reference "0.3.0";
+  }
+
+  revision "2017-11-17" {
+    description
+      "Corrected augmentation path for port data";
+    reference "0.2.0";
+  }
+
+  revision "2016-10-24" {
+    description
+      "Initial revision";
+    reference "0.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  // typedef statements
+
+  // grouping statements
+
+  grouping group-config {
+    description
+      "Configuration data for the breakout group.";
+
+    leaf index {
+      type uint8;
+      description
+        "Each index specifies breakouts that are identical in
+        terms of speed and the number of physical channels.";
+    }
+
+    leaf num-breakouts {
+      type uint8;
+      description
+        "Sets the number of interfaces using this breakout group.";
+    }
+
+    leaf breakout-speed {
+      type identityref {
+        base oc-eth:ETHERNET_SPEED;
+      }
+      description
+        "Speed of interfaces in this breakout group, supported
+        values are defined by the ETHERNET_SPEED identity.";
+    }
+
+    leaf num-physical-channels {
+      type uint8;
+      description
+        "Sets the number of lanes or physical channels assigned
+        to the interfaces in this breakout group. This leaf need
+        not be set if there is only one breakout group where all
+        the interfaces are of equal speed and have equal number
+        of physical channels.
+
+        The physical channels referred to by this leaf are
+        electrical channels towards the transceiver.";
+    }
+  }
+
+  grouping group-state {
+    description
+      "Operational state data for the port breakout group.";
+  }
+
+  grouping port-breakout-top {
+    description
+      "Top-level grouping for port breakout data.";
+
+    container breakout-mode {
+      description
+        "Top-level container for port breakout-mode data.";
+
+      container groups {
+        description
+          "Top level container for breakout groups data.
+
+           When a device has the capability to break a port into
+           interfaces of different speeds and different number of
+           physical channels, it can breakout a 400G OSFP port with
+           8 physical channels (with support for 25G NRZ, 50G PAM4
+           and 100G PAM4) into  mixed speed interfaces. Particularly, to
+           break out into two 100G ports with different modulation, and a 200G
+           port, a user must configure 1 interface with 2 physical channels
+          1 interface with 4 physical channels and 1 interface with
+           2 physical channels. With this configuration the interface in
+           1st breakout group would use 50G PAM4 modulation, interface
+           in 2nd breakout group would use 25G NRZ modulation and the
+           interface in 3rd breakout group would use 100G PAM4 modulation
+           This configuration would result in 3 entries in the breakout
+           groups list. The example configuration for this case is shown below:
+
+              {
+                \"groups\": {
+                  \"group\": [
+                    {
+                      \"config\": {
+                        \"breakout-speed\": \"SPEED_100GB\",
+                        \"index\": 0,
+                        \"num-breakouts\": 1,
+                        \"num-physical-channels\": 2
+                      },
+                      \"index\": 0
+                    },
+                    {
+                      \"config\": {
+                        \"breakout-speed\": \"SPEED_100GB\",
+                        \"index\": 1,
+                        \"num-breakouts\": 1,
+                        \"num-physical-channels\": 4
+                      },
+                      \"index\": 1
+                    },
+                    {
+                      \"config\": {
+                        \"breakout-speed\": \"SPEED_200GB\",
+                        \"index\": 2,
+                        \"num-breakouts\": 1,
+                        \"num-physical-channels\": 2
+                      },
+                      \"index\": 2
+                    }
+                  ]
+                }
+              }
+
+           When a device does not have the capability to break a port
+           into interfaces of different speeds and different number of
+           physical channels, in order to  breakout a 400G OSFP port with
+           8 physical channels into 50G breakout ports it would use 8 interfaces
+           with 1 physical channel each. This would result in 1 entry in the
+           breakout groups list. The example configuration for this case is
+           shown below:
+
+            {
+              \"groups\": {
+                \"group\": [
+                  {
+                    \"config\": {
+                      \"breakout-speed\": \"SPEED_50GB\",
+                      \"index\": 0,
+                      \"num-breakouts\": 8,
+                      \"num-physical-channels\": 1
+                    },
+                    \"index\": 0
+                  }
+                ]
+              }
+            }
+
+           Similarly, if a 400G-DR4 interface (8 electrical channels at 50Gbps)
+           is to be broken out into 4 100Gbps ports, the following configuration
+           is used:
+
+            {
+              \"groups\": {
+                \"group\": [
+                  {
+                    \"config\": {
+                      \"breakout-speed\": \"SPEED_100GB\",
+                      \"index\": 0,
+                      \"num-breakouts\": 4,
+                      \"num-physical-channels\": 2
+                    },
+                    \"index\": 0
+                  }
+                ]
+              }
+            }";
+
+        list group {
+          key "index";
+          description
+            "List of breakout groups.";
+
+          leaf index {
+            type leafref {
+              path "../config/index";
+            }
+            description
+              "Index of the breakout group entry in the breakout groups list.";
+          }
+
+          container config {
+            description
+              "Configuration data for breakout group.";
+            uses group-config;
+          }
+
+          container state {
+            config false;
+            description
+              "Operational state data for breakout group.";
+
+            uses group-config;
+            uses group-state;
+          }
+        }
+      }
+    }
+  }
+
+  // data definition statements
+
+  // augment statements
+
+  augment "/oc-platform:components/oc-platform:component/" +
+    "oc-platform:port" {
+    description
+      "Adding port breakout data to physical platform data. This subtree
+      is only valid when the type of the component is PORT.";
+
+    uses port-breakout-top;
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:state" {
+    description
+      "Adds a reference from the base interface to the corresponding
+      port component in the device inventory.";
+
+    leaf hardware-port {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+          "oc-platform:name";
+      }
+      description
+        "For non-channelized interfaces, references the hardware port
+        corresponding to the base interface.";
+    }
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..d28881f9e23327e82d281f3f76d7abe8f376df57
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform-types.yang
@@ -0,0 +1,541 @@
+module openconfig-platform-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/platform-types";
+
+  prefix "oc-platform-types";
+
+  import openconfig-types { prefix oc-types; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines data types (e.g., YANG identities)
+    to support the OpenConfig component inventory model.";
+
+  oc-ext:openconfig-version "1.6.0";
+
+  revision "2023-06-27" {
+    description
+      "Add WIFI_ACCESS_POINT";
+    reference "1.6.0";
+  }
+
+  revision "2022-07-28" {
+    description
+      "Add grouping for component power management";
+    reference "1.5.0";
+  }
+
+  revision "2022-03-27" {
+    description
+      "Add identity for BIOS";
+    reference "1.4.0";
+  }
+
+  revision "2022-02-02" {
+    description
+      "Add support for component reboot and switchover.";
+    reference "1.3.0";
+  }
+
+  revision "2021-07-29" {
+    description
+      "Add several avg-min-max-instant-stats groupings";
+    reference "1.2.0";
+  }
+
+  revision "2021-01-18" {
+    description
+      "Add identity for software modules";
+    reference "1.1.0";
+  }
+
+  revision "2019-06-03" {
+    description
+      "Add OpenConfig component operating system patch type.";
+    reference "1.0.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.10.1";
+  }
+
+  revision "2018-11-16" {
+    description
+      "Added FEC_MODE_TYPE and FEC_STATUS_TYPE";
+    reference "0.10.0";
+  }
+
+  revision "2018-05-05" {
+    description
+      "Added min-max-time to
+      avg-min-max-instant-stats-precision1-celsius,
+      added new CONTROLLER_CARD identity";
+    reference "0.9.0";
+  }
+
+  revision "2018-01-16" {
+    description
+      "Added new per-component common data; add temp alarm";
+    reference "0.8.0";
+  }
+
+  revision "2017-12-14" {
+    description
+      "Added anchor containers for component data, added new
+      component types";
+    reference "0.7.0";
+  }
+
+  revision "2017-08-16" {
+    description
+      "Added power state enumerated type";
+    reference "0.6.0";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Added temperature state variable to component";
+    reference "0.5.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // grouping statements
+  grouping avg-min-max-instant-stats-precision1-celsius {
+    description
+      "Common grouping for recording temperature values in
+      Celsius with 1 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units celsius;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units celsius;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units celsius;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      units celsius;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-volts {
+    description
+      "Common grouping for recording voltage values in
+      volts with 2 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics.
+      If supported by the device, the time interval over which
+      the statistics are computed, and the times at which the
+      minimum and maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units volts;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units volts;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units volts;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units volts;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+
+    uses oc-types:stat-interval-state;
+    uses oc-types:min-max-time;
+  }
+
+  grouping component-redundant-role-switchover-reason {
+    description
+      "Common grouping for recording the reason of a component's
+      redundant role switchover. For example two supervisors in
+      a device, one as primary the other as secondary, switchover
+      can happen in different scenarios, e.g. user requested,
+      system error, priority contention, etc.";
+
+    leaf trigger {
+      type component-redundant-role-switchover-reason-trigger;
+      description
+        "Records the generic triggers, e.g. user or system
+        initiated the switchover.";
+    }
+
+    leaf details {
+      type string;
+      description
+        "Records detailed description of why the switchover happens.
+        For example, when system initiated the switchover, this leaf
+        can be used to record the specific reason, e.g. due to critical
+        errors of the routing daemon in the primary role.";
+    }
+  }
+
+  // identity statements
+  identity OPENCONFIG_HARDWARE_COMPONENT {
+    description
+      "Base identity for hardware related components in a managed
+      device.  Derived identities are partially based on contents
+      of the IANA Entity MIB.";
+    reference
+      "IANA Entity MIB and RFC 6933";
+  }
+
+  identity OPENCONFIG_SOFTWARE_COMPONENT {
+    description
+      "Base identity for software-related components in a managed
+      device";
+  }
+
+  // hardware types
+  identity CHASSIS {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Chassis component, typically with multiple slots / shelves";
+  }
+
+  identity BACKPLANE {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Backplane component for aggregating traffic, typically
+      contained in a chassis component";
+  }
+
+  identity FABRIC {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Interconnect between ingress and egress ports on the
+      device (e.g., a crossbar switch).";
+  }
+
+  identity POWER_SUPPLY {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Component that is supplying power to the device";
+  }
+
+  identity FAN {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Cooling fan, or could be some other heat-reduction component";
+  }
+
+  identity SENSOR {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Physical sensor, e.g., a temperature sensor in a chassis";
+  }
+
+  identity FRU {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Replaceable hardware component that does not have a more
+      specific defined schema.";
+  }
+
+  identity LINECARD {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Linecard component, typically inserted into a chassis slot";
+  }
+
+  identity CONTROLLER_CARD {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "A type of linecard whose primary role is management or control
+      rather than data forwarding.";
+  }
+
+  identity PORT {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Physical port, e.g., for attaching pluggables and networking
+      cables";
+  }
+
+  identity TRANSCEIVER {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Pluggable module present in a port";
+  }
+
+  identity CPU {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Processing unit, e.g., a management processor";
+  }
+
+  identity STORAGE {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "A storage subsystem on the device (disk, SSD, etc.)";
+  }
+
+  identity INTEGRATED_CIRCUIT {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "A special purpose processing unit, typically for traffic
+      switching/forwarding (e.g., switching ASIC, NPU, forwarding
+      chip, etc.)";
+  }
+
+  identity WIFI_ACCESS_POINT {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "A device that attaches to a an Ethernet network and creates a wireless
+       local area network";
+  }
+
+  identity OPERATING_SYSTEM {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "Operating system running on a component";
+  }
+
+  identity OPERATING_SYSTEM_UPDATE {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "An operating system update - which should be a subcomponent
+      of the `OPERATING_SYSTEM` running on a component. An update is
+      defined to be a set of software changes that are atomically
+      installed (and uninstalled) together. Multiple updates may be
+      present for the Operating System. A system should not list all
+      installed software packages using this type -- but rather
+      updates that are bundled together as a single installable
+      item";
+  }
+
+  identity BIOS {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "Legacy BIOS or UEFI firmware interface responsible for
+      initializing hardware components and first stage boot loader.";
+  }
+
+  identity BOOT_LOADER {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "Software layer responsible for loading and booting the
+      device OS or network OS.";
+  }
+
+  identity SOFTWARE_MODULE {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "A base identity for software modules installed and/or
+      running on the device.  Modules include user-space programs
+      and kernel modules that provide specific functionality.
+      A component with type SOFTWARE_MODULE should also have a
+      module type that indicates the specific type of software module";
+  }
+
+  identity COMPONENT_OPER_STATUS {
+    description
+      "Current operational status of a platform component";
+  }
+
+  identity ACTIVE {
+    base COMPONENT_OPER_STATUS;
+    description
+      "Component is enabled and active (i.e., up)";
+  }
+
+  identity INACTIVE {
+    base COMPONENT_OPER_STATUS;
+    description
+      "Component is enabled but inactive (i.e., down)";
+  }
+
+  identity DISABLED {
+    base COMPONENT_OPER_STATUS;
+    description
+      "Component is administratively disabled.";
+  }
+
+  identity FEC_MODE_TYPE {
+    description
+      "Base identity for FEC operational modes.";
+  }
+
+  identity FEC_ENABLED {
+    base FEC_MODE_TYPE;
+    description
+      "FEC is administratively enabled.";
+  }
+
+  identity FEC_DISABLED {
+    base FEC_MODE_TYPE;
+    description
+      "FEC is administratively disabled.";
+  }
+
+  identity FEC_AUTO {
+    base FEC_MODE_TYPE;
+    description
+      "System will determine whether to enable or disable
+      FEC on a transceiver.";
+  }
+
+  identity FEC_STATUS_TYPE {
+    description
+      "Base identity for FEC operational statuses.";
+  }
+
+  identity FEC_STATUS_LOCKED {
+    base FEC_STATUS_TYPE;
+    description
+      "FEC is operationally locked.";
+  }
+
+  identity FEC_STATUS_UNLOCKED {
+    base FEC_STATUS_TYPE;
+    description
+      "FEC is operationally unlocked.";
+  }
+
+  // typedef statements
+  typedef component-power-type {
+    type enumeration {
+      enum POWER_ENABLED {
+        description
+          "Enable power on the component";
+      }
+      enum POWER_DISABLED {
+        description
+          "Disable power on the component";
+      }
+    }
+    description
+      "A generic type reflecting whether a hardware component
+      is powered on or off";
+  }
+
+  identity COMPONENT_REBOOT_REASON {
+    description
+      "Base entity for component reboot reasons.";
+  }
+
+  identity REBOOT_USER_INITIATED {
+    base COMPONENT_REBOOT_REASON;
+    description
+      "User initiated the reboot of the componenent.";
+  }
+
+  identity REBOOT_POWER_FAILURE {
+    base COMPONENT_REBOOT_REASON;
+    description
+      "The component reboots due to power failure.";
+  }
+
+  identity REBOOT_CRITICAL_ERROR {
+    base COMPONENT_REBOOT_REASON;
+    description
+      "The component reboots due to critical errors.";
+  }
+
+  typedef component-redundant-role {
+    type enumeration {
+      enum PRIMARY {
+        description
+          "Component is acting the primary role.";
+      }
+      enum SECONDARY {
+        description
+          "Component is acting the secondary role.";
+      }
+    }
+    description
+      "A generic type reflecting the component's redundanty role.
+      For example, a device might have dual supervisors components
+      for redundant purpose, with one being the primary and the
+      other secondary.";
+  }
+
+  typedef component-redundant-role-switchover-reason-trigger {
+    type enumeration {
+      enum USER_INITIATED {
+        description
+          "User initiated the switchover, e.g. via command line.";
+      }
+      enum SYSTEM_INITIATED {
+        description
+          "The system initiated the switchover, e.g. due to
+          critical errors in the component of the primar role.";
+      }
+    }
+    description
+      "Records how the role switchover is triggered.";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform.yang
new file mode 100644
index 0000000000000000000000000000000000000000..bbcf931a6deb0beeb891ed8327f40786f565cd7b
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/platform/openconfig-platform.yang
@@ -0,0 +1,1221 @@
+module openconfig-platform {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/platform";
+
+  prefix "oc-platform";
+
+  import openconfig-platform-types { prefix oc-platform-types; }
+  import openconfig-extensions { prefix oc-ext; }
+  import openconfig-alarm-types { prefix oc-alarm-types; }
+  import openconfig-yang-types { prefix oc-yang; }
+  import openconfig-types { prefix oc-types; }
+
+  include openconfig-platform-common;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines a data model for representing a system
+    component inventory, which can include hardware or software
+    elements arranged in an arbitrary structure. The primary
+    relationship supported by the model is containment, e.g.,
+    components containing subcomponents.
+
+    It is expected that this model reflects every field replacable
+    unit on the device at a minimum (i.e., additional information
+    may be supplied about non-replacable components).
+
+    Every element in the inventory is termed a 'component' with each
+    component expected to have a unique name and type, and optionally
+    a unique system-assigned identifier and FRU number.  The
+    uniqueness is guaranteed by the system within the device.
+
+    Components may have properties defined by the system that are
+    modeled as a list of key-value pairs. These may or may not be
+    user-configurable.  The model provides a flag for the system
+    to optionally indicate which properties are user configurable.
+
+    Each component also has a list of 'subcomponents' which are
+    references to other components. Appearance in a list of
+    subcomponents indicates a containment relationship as described
+    above.  For example, a linecard component may have a list of
+    references to port components that reside on the linecard.
+
+    This schema is generic to allow devices to express their own
+    platform-specific structure.  It may be augmented by additional
+    component type-specific schemas that provide a common structure
+    for well-known component types.  In these cases, the system is
+    expected to populate the common component schema, and may
+    optionally also represent the component and its properties in the
+    generic structure.
+
+    The properties for each component may include dynamic values,
+    e.g., in the 'state' part of the schema.  For example, a CPU
+    component may report its utilization, temperature, or other
+    physical properties.  The intent is to capture all platform-
+    specific physical data in one location, including inventory
+    (presence or absence of a component) and state (physical
+    attributes or status).";
+
+  oc-ext:openconfig-version "0.24.0";
+
+  revision "2023-11-28" {
+    description
+      "Add model-name";
+    reference "0.24.0";
+  }
+
+  revision "2023-02-13" {
+    description
+      "Refactor resource utilization threshold config into a separate grouping.
+      Update 'utilization resource' to 'resource utilization'.";
+    reference "0.23.0";
+  }
+
+  revision "2022-12-20" {
+     description
+        "Add threshold and threshold-exceeded for resource usage.";
+      reference "0.22.0";
+   }
+
+  revision "2022-12-19" {
+    description
+      "Update last-high-watermark timestamp documentation.";
+    reference "0.21.1";
+  }
+
+  revision "2022-09-26" {
+    description
+      "Add state data for base-mac-address.";
+    reference "0.21.0";
+  }
+
+  revision "2022-08-31" {
+    description
+      "Add new state data for component CLEI code.";
+    reference "0.20.0";
+  }
+
+  revision "2022-07-28" {
+    description
+      "Add container for controller card component";
+    reference "0.19.0";
+  }
+
+  revision "2022-07-11" {
+    description
+      "Add switchover ready";
+    reference "0.18.0";
+  }
+
+  revision "2022-06-10" {
+    description
+      "Specify units and epoch for switchover and reboot times.";
+    reference "0.17.0";
+  }
+
+  revision "2022-04-21" {
+    description
+      "Add platform utilization.";
+    reference "0.16.0";
+  }
+
+  revision "2022-02-02" {
+    description
+      "Add new state data for component reboot and
+      switchover.";
+    reference "0.15.0";
+  }
+
+  revision "2021-08-13" {
+    description
+      "Add container for PCIe error statistics";
+    reference "0.14.0";
+  }
+
+  revision "2021-01-18" {
+    description
+      "Add container for software module component";
+    reference "0.13.0";
+  }
+
+  revision "2019-04-16" {
+    description
+      "Fix bug in parent path reference";
+    reference "0.12.2";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.12.1";
+  }
+
+  revision "2018-06-29" {
+    description
+      "Added location description for components";
+    reference "0.12.0";
+  }
+
+  revision "2018-06-03" {
+    description
+      "Added parent reference, empty flag and preconfiguration
+      for components";
+    reference "0.11.0";
+  }
+
+  revision "2018-04-20" {
+    description
+      "Added new per-component state data: mfg-date and removable";
+    reference "0.10.0";
+  }
+
+  revision "2018-01-30" {
+    description
+      "Amended approach for modelling CPU - rather than having
+      a local CPU utilisation state variable, a component with
+      a CPU should create a subcomponent of type CPU to report
+      statistics.";
+    reference "0.9.0";
+  }
+
+  revision "2018-01-16" {
+    description
+      "Added new per-component common data; add temp alarm;
+      moved hardware-port reference to port model";
+    reference "0.8.0";
+  }
+
+  revision "2017-12-14" {
+    description
+      "Added anchor containers for component data, added new
+      component types";
+    reference "0.7.0";
+  }
+
+  revision "2017-08-16" {
+    description
+      "Added power state enumerated type";
+    reference "0.6.0";
+  }
+
+  revision "2016-12-22" {
+    description
+      "Added temperature state variable to component";
+    reference "0.5.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // grouping statements
+
+
+  grouping platform-component-properties-config {
+    description
+      "System-defined configuration data for component properties";
+
+    leaf name {
+      type string;
+      description
+        "System-supplied name of the property -- this is typically
+        non-configurable";
+    }
+
+    leaf value {
+      type union {
+        type string;
+        type boolean;
+        type int64;
+        type uint64;
+        type decimal64 {
+          fraction-digits 2;
+        }
+      }
+      description
+        "Property values can take on a variety of types.  Signed and
+        unsigned integer types may be provided in smaller sizes,
+        e.g., int8, uint16, etc.";
+    }
+  }
+
+  grouping platform-component-properties-state {
+    description
+      "Operational state data for component properties";
+
+    leaf configurable {
+      type boolean;
+      description
+        "Indication whether the property is user-configurable";
+    }
+  }
+
+  grouping platform-component-properties-top {
+    description
+      "Top-level grouping ";
+
+    container properties {
+      description
+        "Enclosing container ";
+
+      list property {
+        key "name";
+        description
+          "List of system properties for the component";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the property name.";
+        }
+
+        container config {
+          description
+            "Configuration data for each property";
+
+          uses platform-component-properties-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for each property";
+
+          uses platform-component-properties-config;
+          uses platform-component-properties-state;
+        }
+      }
+    }
+  }
+
+  grouping platform-subcomponent-ref-config {
+    description
+      "Configuration data for subcomponent references";
+
+    leaf name {
+      type leafref {
+        path "../../../../../component/config/name";
+      }
+      description
+        "Reference to the name of the subcomponent";
+    }
+  }
+
+  grouping platform-subcomponent-ref-state {
+    description
+      "Operational state data for subcomponent references";
+
+  }
+
+  grouping platform-subcomponent-ref-top {
+    description
+      "Top-level grouping for list of subcomponent references";
+
+    container subcomponents {
+      description
+        "Enclosing container for subcomponent references";
+
+      list subcomponent {
+        key "name";
+        description
+          "List of subcomponent references";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name list key";
+        }
+
+        container config {
+          description
+            "Configuration data for the subcomponent";
+
+          uses platform-subcomponent-ref-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for the subcomponent";
+
+          uses platform-subcomponent-ref-config;
+          uses platform-subcomponent-ref-state;
+        }
+      }
+    }
+  }
+
+  grouping platform-component-config {
+    description
+      "Configuration data for components";
+
+    leaf name {
+      type string;
+      description
+        "Device name for the component -- this may not be a
+        configurable parameter on many implementations.  Where
+        component preconfiguration is supported, for example,
+        the component name may be configurable.";
+    }
+  }
+
+  grouping platform-component-state {
+    description
+      "Operational state data for device components.";
+
+    leaf type {
+      type union {
+        type identityref {
+          base oc-platform-types:OPENCONFIG_HARDWARE_COMPONENT;
+        }
+        type identityref {
+          base oc-platform-types:OPENCONFIG_SOFTWARE_COMPONENT;
+        }
+      }
+      description
+        "Type of component as identified by the system";
+    }
+
+    leaf id {
+      type string;
+      description
+        "Unique identifier assigned by the system for the
+        component";
+    }
+
+    leaf location {
+      type string;
+      description
+        "System-supplied description of the location of the
+        component within the system. This could be a bay position,
+        slot number, socket location, etc. For component types that
+        have an explicit slot-id attribute, such as linecards, the
+        system should populate the more specific slot-id.";
+    }
+
+    leaf description {
+      type string;
+      description
+        "System-supplied description of the component";
+    }
+
+    leaf mfg-name {
+      type string;
+      description
+        "System-supplied identifier for the manufacturer of the
+        component.  This data is particularly useful when a
+        component manufacturer is different than the overall
+        device vendor.";
+    }
+
+    leaf mfg-date {
+      type oc-yang:date;
+      description
+        "System-supplied representation of the component's
+        manufacturing date.";
+    }
+
+    leaf hardware-version {
+      type string;
+      description
+        "For hardware components, this is the hardware revision of
+        the component.";
+    }
+
+    leaf firmware-version {
+      type string;
+      description
+        "For hardware components, this is the version of associated
+        firmware that is running on the component, if applicable.";
+    }
+
+    leaf software-version {
+      type string;
+      description
+        "For software components such as operating system or other
+        software module, this is the version of the currently
+        running software.";
+    }
+
+    leaf serial-no {
+      type string;
+      description
+        "System-assigned serial number of the component.";
+    }
+
+    leaf part-no {
+      type string;
+      description
+        "System-assigned part number for the component.  This should
+        be present in particular if the component is also an FRU
+        (field replaceable unit)";
+    }
+
+    leaf model-name {
+      type string;
+      description
+        "A human readable string describing the model of a component.
+        This string is optional and should only be populated if part-no
+        is also populated.";
+    }
+
+    leaf clei-code {
+      type string;
+      description
+        "Common Language Equipment Identifier (CLEI) code of the
+        component.  This should be present in particular if the
+        component is also an FRU (field replaceable unit)";
+    }
+
+    leaf removable {
+      type boolean;
+      description
+        "If true, this component is removable or is a field
+        replaceable unit";
+    }
+
+    leaf oper-status {
+      type identityref {
+        base oc-platform-types:COMPONENT_OPER_STATUS;
+      }
+      description
+        "If applicable, this reports the current operational status
+        of the component.";
+    }
+
+    leaf empty {
+      type boolean;
+      default false;
+      description
+        "The empty leaf may be used by the device to indicate that a
+        component position exists but is not populated.  Using this
+        flag, it is possible for the management system to learn how
+        many positions are available (e.g., occupied vs. empty
+        linecard slots in a chassis).";
+    }
+
+    leaf parent {
+      type leafref {
+        path "../../../component/config/name";
+      }
+      description
+        "Reference to the name of the parent component.  Note that
+        this reference must be kept synchronized with the
+        corresponding subcomponent reference from the parent
+        component.";
+    }
+
+    leaf redundant-role {
+      type oc-platform-types:component-redundant-role;
+      description
+        "For components that have redundant roles (e.g. two
+        supervisors in a device, one as primary the other as secondary),
+        this reports the role of the component.";
+    }
+
+    container last-switchover-reason {
+      description
+        "For components that have redundant roles (e.g. two
+        supervisors in a device, one as primary the other as secondary),
+        this reports the reason of the last change of the
+        component's role.";
+
+      uses oc-platform-types:component-redundant-role-switchover-reason;
+    }
+
+    leaf last-switchover-time {
+      type oc-types:timeticks64;
+      units "nanoseconds";
+      description
+        "For components that have redundant roles (e.g. two
+        supervisors in a device, one as primary the other as
+        secondary), this reports the time of the last change of
+        the component's role. The value is the timestamp in
+        nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
+
+    }
+
+    leaf last-reboot-reason {
+      type identityref {
+        base oc-platform-types:COMPONENT_REBOOT_REASON;
+      }
+      description
+        "This reports the reason of the last reboot of the component.";
+    }
+
+    leaf last-reboot-time {
+      type oc-types:timeticks64;
+      units "nanoseconds";
+      description
+        "This reports the time of the last reboot of the component. The
+        value is the timestamp in nanoseconds relative to the Unix Epoch
+        (Jan 1, 1970 00:00:00 UTC).";
+    }
+
+    leaf switchover-ready {
+      type boolean;
+      description
+        "For components that have redundant roles, this reports a value
+        that indicates if the component is ready to support failover.
+
+        The components with a redundant-role should reflect the overall
+        system's switchover status.  For example, two supervisors in a
+        device, one as primary and the other as secondary, should both
+        report the same value.";
+    }
+
+    leaf base-mac-address {
+      type oc-yang:mac-address;
+      description
+        "This is a MAC address representing the root or primary MAC
+        address for a component.  Components such as CHASSIS and
+        CONTROLLER_CARD are expected to provide a base-mac-address.  The
+        base mac-address for CHASSIS and a PRIMARY CONTROLLER_CARD may
+        contain the same value.";
+    }
+
+  }
+
+  grouping platform-component-temp-alarm-state {
+    description
+      "Temperature alarm data for platform components";
+
+    // TODO(aashaikh): consider if these leaves could be in a
+    // reusable grouping (not temperature-specific); threshold
+    // may always need to be units specific.
+
+    leaf alarm-status {
+      type boolean;
+      description
+        "A value of true indicates the alarm has been raised or
+        asserted.  The value should be false when the alarm is
+        cleared.";
+    }
+
+    leaf alarm-threshold {
+      type uint32;
+      description
+        "The threshold value that was crossed for this alarm.";
+    }
+
+    leaf alarm-severity {
+      type identityref {
+        base oc-alarm-types:OPENCONFIG_ALARM_SEVERITY;
+      }
+      description
+        "The severity of the current alarm.";
+    }
+  }
+
+  grouping platform-component-power-state {
+    description
+      "Power-related operational state for device components.";
+
+    leaf allocated-power {
+      type uint32;
+      units watts;
+      description
+        "Power allocated by the system for the component.";
+    }
+
+    leaf used-power {
+      type uint32;
+      units watts;
+      description
+        "Actual power used by the component.";
+    }
+  }
+
+  grouping platform-component-temp-state {
+    description
+      "Temperature state data for device components";
+
+    container temperature {
+      description
+        "Temperature in degrees Celsius of the component. Values include
+        the instantaneous, average, minimum, and maximum statistics. If
+        avg/min/max statistics are not supported, the target is expected
+        to just supply the instant value";
+
+      uses oc-platform-types:avg-min-max-instant-stats-precision1-celsius;
+      uses platform-component-temp-alarm-state;
+    }
+  }
+
+  grouping platform-component-memory-state {
+    description
+      "Per-component memory statistics";
+
+    container memory {
+      description
+        "For components that have associated memory, these values
+        report information about available and utilized memory.";
+
+      leaf available {
+        type uint64;
+        units bytes;
+        description
+          "The available memory physically installed, or logically
+          allocated to the component.";
+      }
+
+      // TODO(aashaikh): consider if this needs to be a
+      // min/max/avg statistic
+      leaf utilized {
+        type uint64;
+        units bytes;
+        description
+          "The memory currently in use by processes running on
+          the component, not considering reserved memory that is
+          not available for use.";
+      }
+    }
+  }
+
+  grouping pcie-uncorrectable-errors {
+    description
+      "PCIe uncorrectable error statistics.";
+
+    leaf total-errors {
+      type oc-yang:counter64;
+      description
+        "Total number of uncorrectable errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf undefined-errors {
+      type oc-yang:counter64;
+      description
+        "Number of undefined errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf data-link-errors {
+      type oc-yang:counter64;
+      description
+        "Number of data-link errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf surprise-down-errors {
+      type oc-yang:counter64;
+      description
+        "Number of unexpected link down errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf poisoned-tlp-errors {
+      type oc-yang:counter64;
+      description
+        "Number of poisoned TLP errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf flow-control-protocol-errors {
+      type oc-yang:counter64;
+      description
+        "Number of flow control protocol errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf completion-timeout-errors {
+      type oc-yang:counter64;
+      description
+        "Number of completion timeout errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf completion-abort-errors {
+      type oc-yang:counter64;
+      description
+        "Number of completion abort errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf unexpected-completion-errors {
+      type oc-yang:counter64;
+      description
+        "Number of unexpected completion errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf receiver-overflow-errors  {
+      type oc-yang:counter64;
+      description
+        "Number of receiver overflow errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf malformed-tlp-errors  {
+      type oc-yang:counter64;
+      description
+        "Number of malformed TLP errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf ecrc-errors  {
+      type oc-yang:counter64;
+      description
+        "Number of ECRC errors detected by PCIe device since the system
+        booted, according to PCIe AER driver.";
+    }
+
+    leaf unsupported-request-errors {
+      type oc-yang:counter64;
+      description
+        "Number of unsupported request errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf acs-violation-errors {
+      type oc-yang:counter64;
+      description
+        "Number of access control errors detected by PCIe device since
+        the system booted, according to PCIe AER driver.";
+    }
+
+    leaf internal-errors {
+      type oc-yang:counter64;
+      description
+        "Number of internal errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf blocked-tlp-errors {
+      type oc-yang:counter64;
+      description
+        "Number of blocked TLP errors detected by PCIe device since
+        the system booted, according to PCIe AER driver.";
+    }
+
+    leaf atomic-op-blocked-errors {
+      type oc-yang:counter64;
+      description
+        "Number of atomic operation blocked errors detected by PCIe
+        device since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf tlp-prefix-blocked-errors {
+      type oc-yang:counter64;
+      description
+        "Number of TLP prefix blocked errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+  }
+
+  grouping pcie-correctable-errors {
+    description
+      "PCIe correctable error statistics.";
+
+    leaf total-errors {
+      type oc-yang:counter64;
+      description
+        "Total number of correctable errors detected by PCIe device
+        since the system booted, according to PCIe AER driver.";
+    }
+
+    leaf receiver-errors {
+      type oc-yang:counter64;
+      description
+        "Number of receiver errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf bad-tlp-errors {
+      type oc-yang:counter64;
+      description
+        "Number of TLPs with bad LCRC detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf bad-dllp-errors {
+      type oc-yang:counter64;
+      description
+        "Number of DLLPs with bad LCRC detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf relay-rollover-errors {
+      type oc-yang:counter64;
+      description
+        "Number of relay rollover errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf replay-timeout-errors {
+      type oc-yang:counter64;
+      description
+        "Number of replay timeout errors detected by PCIe device since the
+        system booted, according to PCIe AER driver.";
+    }
+
+    leaf advisory-non-fatal-errors {
+      type oc-yang:counter64;
+      description
+        "Number of advisory non fatal errors detected by PCIe device since
+        the system booted, according to PCIe AER driver.";
+    }
+
+    leaf internal-errors {
+      type oc-yang:counter64;
+      description
+        "Number of internal errors detected by PCIe device since the system
+        booted, according to PCIe AER driver.";
+    }
+
+    leaf hdr-log-overflow-errors {
+      type oc-yang:counter64;
+      description
+        "Number of header log overflow errors detected by PCIe device since
+        the system booted, according to PCIe AER driver.";
+    }
+  }
+
+  grouping platform-component-pcie-state {
+    description
+      "Per-component PCIe error statistics";
+
+    container pcie {
+      description
+        "Components that are connected to the system over the Peripheral
+        Component Interconnect Express (PCIe), report the fatal, non-fatal
+        and correctable PCIe error counts.";
+
+      container fatal-errors {
+        description
+          "The count of the fatal PCIe errors.";
+        uses pcie-uncorrectable-errors;
+      }
+
+      container non-fatal-errors {
+        description
+          "The count of the non-fatal PCIe errors.";
+        uses pcie-uncorrectable-errors;
+      }
+
+      container correctable-errors {
+        description
+          "The count of the correctable PCIe errors.";
+        uses pcie-correctable-errors;
+      }
+    }
+  }
+
+  grouping platform-anchors-top {
+    description
+      "This grouping is used to add containers for components that
+      are common across systems, but do not have a defined schema
+      within the openconfig-platform module.  Containers should be
+      added to this grouping for components that are expected to
+      exist in multiple systems, with corresponding modules
+      augmenting the config/state containers directly.";
+
+    container chassis {
+      description
+        "Data for chassis components";
+
+      container config {
+        description
+          "Configuration data for chassis components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for chassis components";
+      }
+
+      uses platform-resource-utilization-top;
+    }
+
+// TODO(aashaikh): linecard container is already defined in
+// openconfig-platform-linecard; will move to this module
+// in future.
+  /*
+    container linecard {
+      description
+        "Data for linecard components";
+
+      container config {
+        description
+          "Configuration data for linecard components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for linecard components";
+      }
+    }
+  */
+
+    container port {
+      description
+        "Data for physical port components";
+
+      container config {
+        description
+          "Configuration data for physical port components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for physical port components";
+      }
+    }
+
+// TODO(aashaikh): transceiver container is already defined in
+// openconfig-platform-transceiver; will move to this module
+// in future.
+  /*
+    container transceiver {
+      description
+        "Data for transceiver components";
+
+      container config {
+        description
+          "Configuration data for transceiver components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for transceiver components";
+      }
+    }
+  */
+
+    container power-supply {
+      description
+        "Data for power supply components";
+
+      container config {
+        description
+          "Configuration data for power supply components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for power supply components";
+      }
+    }
+
+    container fan {
+      description
+        "Data for fan components";
+
+      container config {
+        description
+          "Configuration data for fan components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for fan components";
+      }
+    }
+
+    container fabric {
+      description
+        "Data for fabric components";
+
+      container config {
+        description
+          "Configuration data for fabric components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for fabric components";
+      }
+    }
+
+    container storage {
+      description
+        "Data for storage components";
+
+      container config {
+        description
+          "Configuration data for storage components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for storage components";
+      }
+    }
+
+    container cpu {
+      description
+        "Data for cpu components";
+
+      container config {
+        description
+          "Configuration data for cpu components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for cpu components";
+      }
+    }
+
+    container integrated-circuit {
+      description
+        "Data for chip components, such as ASIC, NPUs, etc.";
+
+      container config {
+        description
+          "Configuration data for chip components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for chip components";
+      }
+
+      uses platform-resource-utilization-top;
+    }
+
+    container backplane {
+      description
+        "Data for backplane components";
+
+      container config {
+        description
+          "Configuration data for backplane components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for backplane components";
+      }
+    }
+
+    container software-module {
+      description
+        "Data for software module components, i.e., for components
+        with type=SOFTWARE_MODULE";
+
+      container config {
+        description
+          "Configuration data for software module components";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for software module components";
+      }
+    }
+
+    container controller-card {
+      description
+        "Data for controller card components, i.e., for components
+        with type=CONTROLLER_CARD";
+
+      container config {
+        description
+          "Configuration data for controller card components. Note that disabling
+          power to the primary supervisor should be rejected, and the operator is
+          required to perform a switchover first.";
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for controller card components";
+      }
+    }
+  }
+
+  grouping platform-component-top {
+    description
+      "Top-level grouping for components in the device inventory";
+
+    container components {
+      description
+        "Enclosing container for the components in the system.";
+
+      list component {
+        key "name";
+        description
+          "List of components, keyed by component name.";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "References the component name";
+        }
+
+        container config {
+          description
+            "Configuration data for each component";
+
+          uses platform-component-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for each component";
+
+          uses platform-component-config;
+          uses platform-component-state;
+          uses platform-component-temp-state;
+          uses platform-component-memory-state;
+          uses platform-component-power-state;
+          uses platform-component-pcie-state {
+            when "./type = 'oc-platform-types:STORAGE' or " +
+              "'oc-platform-types:INTEGRATED_CIRCUIT' or " +
+              "'oc-platform-types:FRU'";
+          }
+        }
+
+        uses platform-component-properties-top;
+        uses platform-subcomponent-ref-top;
+        uses platform-anchors-top;
+      }
+    }
+  }
+
+
+  // data definition statements
+
+  uses platform-component-top;
+
+
+  // augments
+
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/system/openconfig-alarm-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/system/openconfig-alarm-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..c4617b5e6b3dbe07df47799086b93475f36a59e2
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/system/openconfig-alarm-types.yang
@@ -0,0 +1,150 @@
+module openconfig-alarm-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/alarms/types";
+
+  prefix "oc-alarm-types";
+
+  // import some basic types
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines operational state data related to alarms
+    that the device is reporting.
+
+    This model reuses some data items defined in the draft IETF
+    YANG Alarm Module:
+    https://tools.ietf.org/html/draft-vallin-netmod-alarm-module-02
+
+    Portions of this code were derived from the draft IETF YANG Alarm
+    Module. Please reproduce this note if possible.
+
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  oc-ext:openconfig-version "0.2.1";
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.2.1";
+  }
+
+  revision "2018-01-16" {
+    description
+      "Moved alarm identities into separate types module";
+    reference "0.2.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // identity statements
+  identity OPENCONFIG_ALARM_TYPE_ID {
+    description
+      "Base identity for alarm type ID profiles";
+  }
+
+  identity AIS {
+    base OPENCONFIG_ALARM_TYPE_ID;
+    description
+      "Defines an alarm indication signal type of alarm";
+  }
+
+  identity EQPT {
+    base OPENCONFIG_ALARM_TYPE_ID;
+    description
+      "Defines an equipment related type of alarm that is specific
+       to the physical hardware";
+  }
+
+  identity LOS {
+    base OPENCONFIG_ALARM_TYPE_ID;
+    description
+      "Defines a loss of signal type of alarm";
+  }
+
+  identity OTS {
+    base OPENCONFIG_ALARM_TYPE_ID;
+    description
+      "Defines a optical transport signal type of alarm";
+  }
+
+  identity OPENCONFIG_ALARM_SEVERITY {
+    description
+      "Base identity for alarm severity profiles. Derived
+      identities are based on contents of the draft
+      IETF YANG Alarm Module";
+    reference
+      "IETF YANG Alarm Module: Draft - typedef severity
+      https://tools.ietf.org/html/draft-vallin-netmod-alarm-module-02";
+
+  }
+
+  identity UNKNOWN {
+    base OPENCONFIG_ALARM_SEVERITY;
+    description
+      "Indicates that the severity level could not be determined.
+      This level SHOULD be avoided.";
+  }
+
+  identity MINOR {
+    base OPENCONFIG_ALARM_SEVERITY;
+    description
+      "Indicates the existence of a non-service affecting fault
+      condition and that corrective action should be taken in
+      order to prevent a more serious (for example, service
+      affecting) fault. Such a severity can be reported, for
+      example, when the detected alarm condition is not currently
+      degrading the capacity of the resource";
+  }
+
+  identity WARNING {
+    base OPENCONFIG_ALARM_SEVERITY;
+    description
+      "Indicates the detection of a potential or impending service
+      affecting fault, before any significant effects have been felt.
+      Action should be taken to further diagnose (if necessary) and
+      correct the problem in order to prevent it from becoming a more
+      serious service affecting fault.";
+  }
+
+  identity MAJOR {
+    base OPENCONFIG_ALARM_SEVERITY;
+    description
+      "Indicates that a service affecting condition has developed
+      and an urgent corrective action is required. Such a severity
+      can be reported, for example, when there is a severe
+      degradation in the capability of the resource and its full
+      capability must be restored.";
+  }
+
+  identity CRITICAL {
+    base OPENCONFIG_ALARM_SEVERITY;
+    description
+      "Indicates that a service affecting condition has occurred
+      and an immediate corrective action is required. Such a
+      severity can be reported, for example, when a resource becomes
+      totally out of service and its capability must be restored.";
+  }
+
+}
\ No newline at end of file
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-inet-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-inet-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..ff74c428763ec0ab07ac2866363ba06a03b022f9
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-inet-types.yang
@@ -0,0 +1,485 @@
+module openconfig-inet-types {
+
+  yang-version "1";
+  namespace "http://openconfig.net/yang/types/inet";
+  prefix "oc-inet";
+
+  import openconfig-extensions { prefix "oc-ext"; }
+
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module contains a set of Internet address related
+    types for use in OpenConfig modules.
+
+    Portions of this code were derived from IETF RFC 6021.
+    Please reproduce this note if possible.
+
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  oc-ext:openconfig-version "0.7.0";
+
+  revision "2024-01-05" {
+    description
+      "Change ipv6-address-zoned typedef to conform to W3C standard
+      regex pattern.";
+    reference "0.7.0";
+  }
+
+  revision "2023-02-06" {
+    description
+      "Add ipv6-link-local and ipv6-address-type";
+    reference "0.6.0";
+  }
+
+  revision "2021-08-17" {
+    description
+      "Add ip-address-zoned typedef as a union between ipv4-address-zoned
+      and ipv6-address-zoned types.";
+    reference "0.5.0";
+  }
+
+  revision "2021-07-14" {
+    description
+      "Use auto-generated regex for ipv4 pattern statements:
+      - ipv4-address
+      - ipv4-address-zoned
+      - ipv4-prefix";
+    reference "0.4.1";
+  }
+
+  revision "2021-01-07" {
+    description
+      "Remove module extension oc-ext:regexp-posix by making pattern regexes
+      conform to RFC7950.
+
+      Types impacted:
+      - ipv4-address
+      - ipv4-address-zoned
+      - ipv6-address
+      - domain-name";
+    reference "0.4.0";
+  }
+
+  revision "2020-10-12" {
+    description
+      "Fix anchors for domain-name pattern.";
+    reference "0.3.5";
+  }
+
+  revision "2020-06-30" {
+    description
+      "Add OpenConfig POSIX pattern extensions and add anchors for domain-name
+      pattern.";
+    reference "0.3.4";
+  }
+
+  revision "2019-04-25" {
+    description
+      "Fix regex bug for ipv6-prefix type";
+    reference "0.3.3";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.3.2";
+  }
+
+  revision 2017-08-24 {
+    description
+      "Minor formatting fixes.";
+    reference "0.3.1";
+  }
+
+  revision 2017-07-06 {
+    description
+      "Add domain-name and host typedefs";
+    reference "0.3.0";
+  }
+
+  revision 2017-04-03 {
+    description
+      "Add ip-version typedef.";
+    reference "0.2.0";
+  }
+
+  revision 2017-04-03 {
+    description
+      "Update copyright notice.";
+    reference "0.1.1";
+  }
+
+  revision 2017-01-26 {
+    description
+      "Initial module for inet types";
+    reference "0.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // IPv4 and IPv6 types.
+
+  typedef ipv4-address {
+    type string {
+      pattern
+        '([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}';
+      oc-ext:posix-pattern
+        '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})$';
+    }
+    description
+      "An IPv4 address in dotted quad notation using the default
+      zone.";
+  }
+
+  typedef ipv4-address-zoned {
+    type string {
+      pattern
+        '([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(%[a-zA-Z0-9_]+)';
+      oc-ext:posix-pattern
+        '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}(%[a-zA-Z0-9_]+))$';
+    }
+    description
+      "An IPv4 address in dotted quad notation.  This type allows
+      specification of a zone index to disambiguate identical
+      address values.  For link-local addresses, the index is
+      typically the interface index or interface name.";
+  }
+
+  typedef ipv6-address {
+    type string {
+        pattern
+          // Must support compression through different lengths
+          // therefore this regexp is complex.
+          '(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'        +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')';
+        oc-ext:posix-pattern
+          // Must support compression through different lengths
+          // therefore this regexp is complex.
+          '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'        +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')$';
+    }
+    description
+      "An IPv6 address represented as either a full address; shortened
+      or mixed-shortened formats, using the default zone.";
+  }
+
+  typedef ipv6-address-zoned {
+    type string {
+        pattern
+          // Must support compression through different lengths
+          // therefore this regexp is complex.
+          '(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'          +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'        +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')(%[a-zA-Z0-9_]+)';
+        oc-ext:posix-pattern
+          // Must support compression through different lengths
+          // therefore this regexp is complex.
+          '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'        +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')(%[a-zA-Z0-9_]+)$';
+    }
+    description
+      "An IPv6 address represented as either a full address; shortened
+      or mixed-shortened formats.  This type allows specification of
+      a zone index to disambiguate identical address values.  For
+      link-local addresses, the index is typically the interface
+      index or interface name.";
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern
+        '([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}/([0-9]|[12][0-9]|'
+        + '3[0-2])';
+      oc-ext:posix-pattern
+        '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}/([0-9]|[12][0-9]|'
+        + '3[0-2]))$';
+    }
+    description
+      "An IPv4 prefix represented in dotted quad notation followed by
+      a slash and a CIDR mask (0 <= mask <= 32).";
+  }
+
+  typedef ipv6-prefix {
+    type string {
+        pattern
+          '(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9])';
+        oc-ext:posix-pattern
+          '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,7}:|'                        +
+          '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|'         +
+          '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' +
+          '([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' +
+          '([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' +
+          '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' +
+          '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|'      +
+          ':((:[0-9a-fA-F]{1,4}){1,7}|:)'                     +
+          ')/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9])$';
+    }
+    description
+      "An IPv6 prefix represented in full, shortened, or mixed
+      shortened format followed by a slash and CIDR mask
+      (0 <= mask <= 128).";
+  }
+
+  typedef ip-address {
+    type union {
+      type ipv4-address;
+      type ipv6-address;
+    }
+    description
+      "An IPv4 or IPv6 address with no prefix specified.";
+  }
+
+  typedef ip-address-zoned {
+    type union {
+      type ipv4-address-zoned;
+      type ipv6-address-zoned;
+    }
+    description
+      "An IPv4 or IPv6 address with no prefix specified and an optional
+      zone index.";
+  }
+
+  typedef ip-prefix {
+    type union {
+      type ipv4-prefix;
+      type ipv6-prefix;
+    }
+    description
+      "An IPv4 or IPv6 prefix.";
+  }
+
+  typedef ip-version {
+    type enumeration {
+      enum UNKNOWN {
+        value 0;
+        description
+         "An unknown or unspecified version of the Internet
+          protocol.";
+      }
+      enum IPV4 {
+        value 4;
+        description
+         "The IPv4 protocol as defined in RFC 791.";
+      }
+      enum IPV6 {
+        value 6;
+        description
+         "The IPv6 protocol as defined in RFC 2460.";
+      }
+    }
+    description
+     "This value represents the version of the IP protocol.
+      Note that integer representation of the enumerated values
+      are not specified, and are not required to follow the
+      InetVersion textual convention in SMIv2.";
+    reference
+     "RFC  791: Internet Protocol
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef ipv6-address-type {
+    type enumeration {
+      enum GLOBAL_UNICAST {
+        description
+          "The IPv6 address is a global unicast address type and must be in
+          the format defined in RFC 4291 section 2.4.";
+      }
+      enum LINK_LOCAL_UNICAST {
+        description
+          "The IPv6 address is a Link-Local unicast address type and must be
+          in the format defined in RFC 4291 section 2.4.";
+      }
+    }
+    description
+      "The value represents the type of IPv6 address";
+    reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+      section 2.5";
+  }
+
+  typedef domain-name {
+    type string {
+      length "1..253";
+      pattern
+        '(((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' +
+        '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'    +
+        '|\.)';
+      oc-ext:posix-pattern
+        '^(((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*' +
+        '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'    +
+        '|\.)$';
+    }
+    description
+      "The domain-name type represents a DNS domain name.
+      Fully quallified left to the models which utilize this type.
+
+      Internet domain names are only loosely specified.  Section
+      3.5 of RFC 1034 recommends a syntax (modified in Section
+      2.1 of RFC 1123).  The pattern above is intended to allow
+      for current practice in domain name use, and some possible
+      future expansion.  It is designed to hold various types of
+      domain names, including names used for A or AAAA records
+      (host names) and other records, such as SRV records.  Note
+      that Internet host names have a stricter syntax (described
+      in RFC 952) than the DNS recommendations in RFCs 1034 and
+      1123, and that systems that want to store host names in
+      schema nodes using the domain-name type are recommended to
+      adhere to this stricter standard to ensure interoperability.
+
+      The encoding of DNS names in the DNS protocol is limited
+      to 255 characters.  Since the encoding consists of labels
+      prefixed by a length bytes and there is a trailing NULL
+      byte, only 253 characters can appear in the textual dotted
+      notation.
+
+      Domain-name values use the US-ASCII encoding.  Their canonical
+      format uses lowercase US-ASCII characters.  Internationalized
+      domain names MUST be encoded in punycode as described in RFC
+      3492";
+  }
+
+  typedef host {
+    type union {
+      type ip-address;
+      type domain-name;
+    }
+    description
+      "The host type represents either an unzoned IP address or a DNS
+      domain name.";
+  }
+
+  typedef as-number {
+    type uint32;
+    description
+      "A numeric identifier for an autonomous system (AS). An AS is a
+      single domain, under common administrative control, which forms
+      a unit of routing policy. Autonomous systems can be assigned a
+      2-byte identifier, or a 4-byte identifier which may have public
+      or private scope. Private ASNs are assigned from dedicated
+      ranges. Public ASNs are assigned from ranges allocated by IANA
+      to the regional internet registries (RIRs).";
+    reference
+      "RFC 1930 Guidelines for creation, selection, and registration
+                of an Autonomous System (AS)
+       RFC 4271 A Border Gateway Protocol 4 (BGP-4)";
+  }
+
+  typedef dscp {
+    type uint8 {
+      range "0..63";
+    }
+    description
+      "A differentiated services code point (DSCP) marking within the
+      IP header.";
+    reference
+      "RFC 2474 Definition of the Differentiated Services Field
+                 (DS Field) in the IPv4 and IPv6 Headers";
+  }
+
+  typedef ipv6-flow-label {
+    type uint32 {
+      range "0..1048575";
+    }
+    description
+      "The IPv6 flow-label is a 20-bit value within the IPv6 header
+      which is optionally used by the source of the IPv6 packet to
+      label sets of packets for which special handling may be
+      required.";
+    reference
+      "RFC 2460 Internet Protocol, Version 6 (IPv6) Specification";
+  }
+
+  typedef port-number {
+    type uint16;
+    description
+      "A 16-bit port number used by a transport protocol such as TCP
+      or UDP.";
+    reference
+      "RFC 768 User Datagram Protocol
+       RFC 793 Transmission Control Protocol";
+  }
+
+  typedef uri {
+    type string;
+    description
+      "An ASCII-encoded Uniform Resource Identifier (URI) as defined
+      in RFC 3986.";
+    reference
+      "RFC 3986 Uniform Resource Identifier (URI): Generic Syntax";
+  }
+
+  typedef url {
+    type string;
+    description
+      "An ASCII-encoded Uniform Resource Locator (URL) as defined
+      in RFC 3986, section 1.1.3";
+    reference
+      "RFC 3986, paragraph 1.1.3";
+  }
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..a146b9b7682ecd30521506943aa64fdfcbf67689
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-types.yang
@@ -0,0 +1,485 @@
+module openconfig-types {
+  yang-version "1";
+
+  namespace "http://openconfig.net/yang/openconfig-types";
+
+  prefix "oc-types";
+
+  // import statements
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "This module contains a set of general type definitions that
+    are used across OpenConfig models. It can be imported by modules
+    that make use of these types.";
+
+  oc-ext:openconfig-version "1.0.0";
+
+  revision "2024-01-31" {
+    description
+      "Add posix-eregexp type and promote model to version 1.0.0.";
+    reference "1.0.0";
+  }
+
+  revision "2019-04-16" {
+    description
+      "Clarify definition of timeticks64.";
+    reference "0.6.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.5.1";
+  }
+
+  revision "2018-05-05" {
+    description
+      "Add grouping of min-max-time and
+       included them to all stats with min/max/avg";
+    reference "0.5.0";
+  }
+
+  revision "2018-01-16" {
+    description
+      "Add interval to min/max/avg stats; add percentage stat";
+    reference "0.4.0";
+  }
+
+  revision "2017-08-16" {
+    description
+      "Apply fix for ieetfloat32 length parameter";
+    reference "0.3.3";
+  }
+
+  revision "2017-01-13" {
+    description
+      "Add ADDRESS_FAMILY identity";
+    reference "0.3.2";
+  }
+
+  revision "2016-11-14" {
+    description
+      "Correct length of ieeefloat32";
+    reference "0.3.1";
+  }
+
+  revision "2016-11-11" {
+    description
+      "Additional types - ieeefloat32 and routing-password";
+    reference "0.3.0";
+  }
+
+  revision "2016-05-31" {
+    description
+      "OpenConfig public release";
+    reference "0.2.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  typedef percentage {
+    type uint8 {
+      range "0..100";
+    }
+    description
+      "Integer indicating a percentage value";
+  }
+
+  typedef std-regexp {
+    type string;
+    description
+      "This type definition is a placeholder for a standard
+      definition of a regular expression that can be utilised in
+      OpenConfig models. Further discussion is required to
+      consider the type of regular expressions that are to be
+      supported. An initial proposal is POSIX compatible.";
+  }
+
+  typedef posix-eregexp {
+    type string;
+    description
+      "This is a string which represents an extended POSIX
+      regular expression.";
+    reference "IEEE Std 1003.1-2017";
+  }
+
+  typedef timeticks64 {
+    type uint64;
+    units "nanoseconds";
+    description
+     "The timeticks64 represents the time, modulo 2^64 in
+     nanoseconds between two epochs. The leaf using this
+     type must define the epochs that tests are relative to.";
+  }
+
+  typedef ieeefloat32 {
+    type binary {
+      length "4";
+    }
+    description
+      "An IEEE 32-bit floating point number. The format of this number
+      is of the form:
+        1-bit  sign
+        8-bit  exponent
+        23-bit fraction
+      The floating point value is calculated using:
+        (-1)**S * 2**(Exponent-127) * (1+Fraction)";
+  }
+
+  typedef routing-password {
+    type string;
+    description
+      "This type is indicative of a password that is used within
+      a routing protocol which can be returned in plain text to the
+      NMS by the local system. Such passwords are typically stored
+      as encrypted strings. Since the encryption used is generally
+      well known, it is possible to extract the original value from
+      the string - and hence this format is not considered secure.
+      Leaves specified with this type should not be modified by
+      the system, and should be returned to the end-user in plain
+      text. This type exists to differentiate passwords, which
+      may be sensitive, from other string leaves. It could, for
+      example, be used by the NMS to censor this data when
+      viewed by particular users.";
+  }
+
+  typedef stat-interval {
+    type uint64;
+    units nanoseconds;
+    description
+      "A time interval over which a set of statistics is computed.
+      A common usage is to report the interval over which
+      avg/min/max stats are computed and reported.";
+  }
+
+  grouping stat-interval-state {
+    description
+      "Reusable leaf definition for stats computation interval";
+
+    leaf interval {
+      type oc-types:stat-interval;
+      description
+        "If supported by the system, this reports the time interval
+        over which the min/max/average statistics are computed by
+        the system.";
+    }
+  }
+
+  grouping min-max-time {
+    description
+      "Common grouping for recording the absolute time at which
+      the minimum and maximum values occurred in the statistics";
+
+    leaf min-time {
+      type oc-types:timeticks64;
+      description
+        "The absolute time at which the minimum value occurred.
+         The value is the timestamp in nanoseconds relative to
+          the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
+    }
+
+    leaf max-time {
+      type oc-types:timeticks64;
+      description
+        "The absolute time at which the maximum value occurred.
+         The value is the timestamp in nanoseconds relative to
+          the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
+    }
+  }
+
+  grouping avg-min-max-stats-precision1 {
+    description
+      "Common nodes for recording average, minimum, and
+      maximum values for a statistic.  These values all have
+      fraction-digits set to 1.  Statistics are computed
+      and reported based on a moving time interval (e.g., the last
+      30s).  If supported by the device, the time interval over which
+      the statistics are computed is also reported.";
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The minimum value of the statistic over the time
+        interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The maximum value of the statitic over the time
+        interval.";
+    }
+
+    uses stat-interval-state;
+    uses min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision1 {
+    description
+      "Common grouping for recording an instantaneous statistic value
+      in addition to avg-min-max stats";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    uses avg-min-max-stats-precision1;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-dB {
+    description
+      "Common grouping for recording dB values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics.  Statistics are computed
+      and reported based on a moving time interval (e.g., the last
+      30s).  If supported by the device, the time interval over which
+      the statistics are computed, and the times at which the minimum
+      and maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The minimum value of the statistic over the time interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The maximum value of the statistic over the time
+        interval.";
+    }
+
+    uses stat-interval-state;
+    uses min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-dBm {
+    description
+      "Common grouping for recording dBm values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics.  Statistics are computed
+      and reported based on a moving time interval (e.g., the last
+      30s).  If supported by the device, the time interval over which
+      the statistics are computed, and the times at which the minimum
+      and maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The minimum value of the statistic over the time
+        interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The maximum value of the statistic over the time interval.";
+    }
+
+    uses stat-interval-state;
+    uses min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-mA {
+    description
+      "Common grouping for recording mA values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics.  Statistics are computed
+      and reported based on a moving time interval (e.g., the last
+      30s).  If supported by the device, the time interval over which
+      the statistics are computed, and the times at which the minimum
+      and maximum values occurred, are also reported.";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The arithmetic mean value of the statistic over the
+        time interval.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The minimum value of the statistic over the time
+        interval.";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The maximum value of the statistic over the time
+        interval.";
+    }
+
+    uses stat-interval-state;
+    uses min-max-time;
+  }
+
+  grouping avg-min-max-instant-stats-pct {
+    description
+      "Common grouping for percentage statistics.
+      Values include the instantaneous, average,
+      minimum, and maximum statistics.  Statistics are computed
+      and reported based on a moving time interval (e.g., the last
+      30s).  If supported by the device, the time interval over which
+      the statistics are computed, and the times at which the minimum
+      and maximum values occurred, are also reported.";
+
+    leaf instant {
+      type oc-types:percentage;
+      description
+        "The instantaneous percentage value.";
+    }
+
+    leaf avg {
+      type oc-types:percentage;
+      description
+        "The arithmetic mean value of the percentage measure of the
+        statistic over the time interval.";
+    }
+
+    leaf min {
+      type oc-types:percentage;
+      description
+        "The minimum value of the percentage measure of the
+        statistic over the time interval.";
+    }
+
+    leaf max {
+      type oc-types:percentage;
+      description
+        "The maximum value of the percentage measure of the
+        statistic over the time interval.";
+    }
+
+    uses stat-interval-state;
+    uses min-max-time;
+  }
+
+  identity ADDRESS_FAMILY {
+    description
+      "A base identity for all address families";
+  }
+
+  identity IPV4 {
+    base ADDRESS_FAMILY;
+    description
+      "The IPv4 address family";
+  }
+
+  identity IPV6 {
+    base ADDRESS_FAMILY;
+    description
+      "The IPv6 address family";
+  }
+
+  identity MPLS {
+    base ADDRESS_FAMILY;
+    description
+      "The MPLS address family";
+  }
+
+  identity L2_ETHERNET {
+    base ADDRESS_FAMILY;
+    description
+      "The 802.3 Ethernet address family";
+  }
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-yang-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-yang-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..c978cd049c3f3043d84d3b0a9944e77c7f50d3a8
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/types/openconfig-yang-types.yang
@@ -0,0 +1,230 @@
+module openconfig-yang-types {
+
+  yang-version "1";
+  namespace "http://openconfig.net/yang/types/yang";
+  prefix "oc-yang";
+
+  import openconfig-extensions { prefix "oc-ext"; }
+
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module contains a set of extension types to the
+    YANG builtin types that are used across multiple
+    OpenConfig models.
+
+    Portions of this code were derived from IETF RFC 6021.
+    Please reproduce this note if possible.
+
+    IETF code is subject to the following copyright and license:
+    Copyright (c) IETF Trust and the persons identified as authors of
+    the code.
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, is permitted pursuant to, and subject to the license
+    terms contained in, the Simplified BSD License set forth in
+    Section 4.c of the IETF Trust's Legal Provisions Relating
+    to IETF Documents (http://trustee.ietf.org/license-info).";
+
+  oc-ext:openconfig-version "0.3.1";
+
+  revision "2021-07-14" {
+    description
+      "Use auto-generated regex for certain pattern statements:
+      - dotted-quad
+      - date-and-time
+      - date
+
+      For date-and-time, allow lowercase z and t in the pattern.";
+    reference "0.3.1";
+  }
+
+  revision "2021-03-02" {
+    description
+      "Fix date-and-time and date's pattern statement, and remove the
+      regexp-posix extension, which makes pattern statements conform to the
+      YANG standard.";
+    reference "0.3.0";
+  }
+
+  revision "2020-06-30" {
+    description
+      "Add OpenConfig POSIX pattern extensions.";
+    reference "0.2.2";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "0.2.1";
+  }
+
+  revision 2018-04-24 {
+    description
+      "Add date typedef";
+    reference "0.2.0";
+  }
+
+  revision 2017-07-30 {
+    description
+      "Fixed unprintable character";
+    reference "0.1.2";
+  }
+
+  revision 2017-04-03 {
+    description
+      "Update copyright notice.";
+    reference "0.1.1";
+  }
+
+  revision 2017-01-26 {
+    description
+      "Initial module for inet types";
+    reference "0.1.0";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  typedef dotted-quad {
+    type string {
+      pattern
+        '([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}';
+      oc-ext:posix-pattern
+        '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([0-9]|'
+        + '[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})$';
+    }
+    description
+      "An unsigned 32-bit integer expressed as a dotted quad. The
+      format is four octets written as decimal numbers separated
+      with a period character.";
+  }
+
+  typedef hex-string {
+    type string {
+      pattern '[0-9a-fA-F]*';
+      oc-ext:posix-pattern '^[0-9a-fA-F]*$';
+    }
+    description
+      "A string consisting of a hexadecimal characters.";
+  }
+
+  typedef counter32 {
+    type uint32;
+    description
+
+      "A 32-bit counter. A counter value is a monotonically increasing
+      value which is used to express a count of a number of
+      occurrences of a particular event or entity. When the counter
+      reaches its maximum value, in this case 2^32-1, it wraps to 0.
+
+      Discontinuities in the counter are generally triggered only when
+      the counter is reset to zero.";
+  }
+
+  typedef counter64 {
+    type uint64;
+    description
+      "A 64-bit counter. A counter value is a monotonically increasing
+      value which is used to express a count of a number of
+      occurrences of a particular event or entity. When a counter64
+      reaches its maximum value, 2^64-1, it loops to zero.
+      Discontinuities in a counter are generally triggered only when
+      the counter is reset to zero, through operator or system
+      intervention.";
+  }
+
+  typedef date-and-time {
+    type string {
+      pattern
+        '[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[12][0-9]|3[01])[Tt](0[0-9]|'
+        + '1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9]|'
+        + '60)(\.[0-9]+)?([Zz]|([+-](0[0-9]|1[0-9]|2[0-3]):(0[0-9]|'
+        + '[1-5][0-9])))';
+      oc-ext:posix-pattern
+        '^([0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[12][0-9]|3[01])[Tt](0[0-9]|'
+        + '1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9]|'
+        + '60)(\.[0-9]+)?([Zz]|([+-](0[0-9]|1[0-9]|2[0-3]):(0[0-9]|'
+        + '[1-5][0-9]))))$';
+    }
+    description
+      "A date and time, expressed in the format described in RFC3339.
+      That is to say:
+
+      YYYY-MM-DDTHH:MM:SSZ+-hh:mm
+
+      where YYYY is the year, MM is the month expressed as a two-digit
+      month (zero padding if required), DD is the day of the month,
+      expressed as a two digit value. T is the literal character 'T',
+      HH is the hour of the day expressed as a two digit number, using
+      the 24-hour clock, MM is the minute of the hour expressed as a
+      two digit number. Z is the literal character 'Z', followed by a
+      timezone offset expressed in hours (hh) and minutes (mm), both
+      expressed as two digit numbers. The time offset is specified as
+      a positive or negative offset to UTC using the '+' or '-'
+      character preceding the offset.
+
+      Optionally, fractional seconds can be expressed after the minute
+      of the hour as a decimal number of unspecified precision
+      reflecting fractions of a second.";
+    reference
+      "RFC3339 - Date and Time on the Internet: Timestamps";
+  }
+
+  typedef date {
+    type string {
+      pattern
+        '[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[12][0-9]|3[01])';
+      oc-ext:posix-pattern
+        '^([0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[12][0-9]|3[01]))$';
+    }
+    description
+      "A full UTC date, expressed in the format described in RFC3339.
+      That is to say:
+
+      YYYY-MM-DD
+
+      where YYYY is the year, MM is the month expressed as a two-digit
+      month (zero padding if required), DD is the day of the month,
+      expressed as a two digit value.";
+
+    reference
+      "RFC3339 - Date and Time on the Internet: full-date";
+  }
+
+  typedef gauge64 {
+    type uint64;
+    description
+      "A gauge value may increase or decrease - and reflects a value
+      at a particular point in time. If the value of the variable
+      being modeled using the gauge exceeds its maximum - 2^64-1 in
+      this case - the gauge is set to its maximum value.";
+  }
+
+  typedef phys-address {
+    type string {
+      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+      oc-ext:posix-pattern '^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?$';
+    }
+    description
+      "A physical layer address, expressed as a series of pairs of
+      hexadecimal digits.";
+  }
+
+  typedef mac-address {
+    type string {
+      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+      oc-ext:posix-pattern '^[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}$';
+    }
+    description
+      "An IEEE 802 MAC address";
+  }
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan-types.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan-types.yang
new file mode 100644
index 0000000000000000000000000000000000000000..09af39887c820af15e92ef237025cb1997b5b537
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan-types.yang
@@ -0,0 +1,283 @@
+module openconfig-vlan-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/vlan-types";
+
+  prefix "oc-vlan-types";
+
+  // import some basic types
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "This module defines configuration and state variables for VLANs,
+    in addition to VLAN parameters associated with interfaces";
+
+  oc-ext:openconfig-version "3.2.0";
+
+  revision "2022-05-24" {
+    description
+      "Remove module extension oc-ext:regexp-posix by making pattern regexes
+      conform to RFC6020/7950.
+
+      Types impacted:
+      - vlan-range
+      - qinq-id
+      - qinq-id-range";
+    reference "3.2.0";
+  }
+
+  revision "2020-06-30" {
+    description
+      "Add OpenConfig POSIX pattern extensions.";
+    reference "3.1.1";
+  }
+
+  revision "2019-01-31" {
+    description
+      "Add TPID_ANY wildcard match and a QinQ list type.";
+    reference "3.1.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "3.0.1";
+  }
+
+  revision "2018-02-14" {
+    description
+      "Fix bug with name of 802.1ad identity.";
+    reference "3.0.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Move top-level vlan data to network-instance; Update
+      identities to comply to style guide; fixed pattern
+      quoting; corrected trunk vlan types; added TPID config to
+      base interface.";
+    reference "2.0.0";
+  }
+
+  revision "2016-05-26" {
+    description
+      "OpenConfig public release";
+    reference "1.0.2";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  identity TPID_TYPES {
+    description
+      "Base identity for TPID values that can be matched or that override
+       the VLAN ethertype value";
+  }
+
+  identity TPID_0X8100 {
+    base TPID_TYPES;
+    description
+      "Default TPID value for 802.1q single-tagged VLANs.";
+  }
+
+  identity TPID_0X88A8 {
+    base TPID_TYPES;
+    description
+      "TPID value for 802.1ad provider bridging, QinQ or
+       stacked VLANs.";
+  }
+
+  identity TPID_0X9100 {
+    base TPID_TYPES;
+    description
+      "Alternate TPID value.";
+  }
+
+  identity TPID_0X9200 {
+    base TPID_TYPES;
+    description
+      "Alternate TPID value.";
+  }
+
+  identity TPID_ANY {
+    base TPID_TYPES;
+    description
+      "A wildcard that matches any of the generally used TPID values
+       for singly- or multiply-tagged VLANs. Equivalent to matching
+       any of TPID_0X8100, TPID_0X88A8, TPID_0X9100 and TPID_0x9200.
+       This value is only applicable where the TPID of a packet is
+       being matched.";
+  }
+
+  // typedef statements
+
+  // TODO: typedefs should be defined in a vlan-types.yang file.
+  typedef vlan-id {
+    type uint16 {
+      range 1..4094;
+    }
+    description
+      "Type definition representing a single-tagged VLAN";
+  }
+
+  typedef vlan-range {
+    type string {
+      // range specified as [lower]..[upper]
+      pattern '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
+              '[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|'       +
+              '40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{1,2}|' +
+              '[1-9])';
+      oc-ext:posix-pattern '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
+              '[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|'       +
+              '40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{1,2}|' +
+              '[1-9])$';
+    }
+    description
+      "Type definition representing a range of single-tagged
+      VLANs. A range is specified as x..y where x and y are
+      valid VLAN IDs (1 <= vlan-id <= 4094). The range is
+      assumed to be inclusive, such that any VLAN-ID matching
+      x <= VLAN-ID <= y falls within the range.";
+  }
+
+  typedef qinq-id {
+    type string {
+      pattern
+        '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
+        '[1-9][0-9]{1,2}|[1-9])\.'                    +
+        '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'      +
+        '[1-9][0-9]{1,2}|[1-9])|\*)';
+      oc-ext:posix-pattern
+        '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'       +
+        '[1-9][0-9]{1,2}|[1-9])\.'                    +
+        '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'      +
+        '[1-9][0-9]{1,2}|[1-9])|\*)$';
+    }
+    description
+      "Type definition representing a single double-tagged/QinQ VLAN
+      identifier. The format of a QinQ VLAN-ID is x.y where X is the
+      'outer' VLAN identifier, and y is the 'inner' VLAN identifier.
+      Both x and y must be valid VLAN IDs (1 <= vlan-id <= 4094)
+      with the exception that y may be equal to a wildcard (*). In
+      cases where y is set to the wildcard, this represents all inner
+      VLAN identifiers where the outer VLAN identifier is equal to
+      x.";
+  }
+
+  typedef qinq-id-range {
+    type union {
+      type string {
+        // match cases where the range is specified as x..y.z
+        pattern
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.'                 +
+          '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'   +
+          '[1-9][0-9]{1,2}|[1-9])|\*)';
+        oc-ext:posix-pattern
+          '^(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.'                 +
+          '((409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'   +
+          '[1-9][0-9]{1,2}|[1-9])|\*)$';
+      }
+      type string {
+        // match cases where the range is specified as x.y..z
+        pattern
+          '(\*|(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9]))\.'                 +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])';
+        oc-ext:posix-pattern
+          '^(\*|(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9]))\.'                 +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])\.\.'               +
+          '(409[0-4]|40[0-8][0-9]|[1-3][0-9]{3}|'    +
+          '[1-9][0-9]{1,2}|[1-9])$';
+      }
+    }
+    description
+      "A type definition representing a range of double-tagged/QinQ
+      VLAN identifiers. The format of a QinQ VLAN-ID range can be
+      specified in two formats. Where the range is outer VLAN IDs
+      the range is specified as x..y.z. In this case outer VLAN
+      identifiers meeting the criteria x <= outer-vlan-id <= y are
+      accepted if and only if the inner VLAN-ID is equal to y - or
+      any inner-tag if the wildcard is specified. Alternatively the
+      ange can be specified as x.y..z. In this case only VLANs with an
+      outer-vlan-id qual to x are accepted (x may again be the
+      wildcard). Inner VLANs are accepted if they meet the inequality
+      y <= inner-vlan-id <= z.";
+  }
+
+  typedef vlan-mode-type {
+    type enumeration {
+      enum ACCESS {
+        description "Access mode VLAN interface (No 802.1q header)";
+      }
+      enum TRUNK {
+        description "Trunk mode VLAN interface";
+      }
+    }
+    description
+      "VLAN interface mode (trunk or access)";
+  }
+
+  typedef vlan-ref {
+    type union {
+      type vlan-id;
+      type string;
+      // TODO: string should be changed to leafref to reference
+      // an existing VLAN.  this is not allowed in YANG 1.0 but
+      // is expected to be in YANG 1.1.
+      // type leafref {
+      //  path "vlan:vlans/vlan:vlan/vlan:config/vlan:name";
+      // }
+    }
+    description
+      "Reference to a VLAN by name or id";
+  }
+
+  typedef vlan-stack-action {
+    type enumeration {
+      enum PUSH {
+        description
+          "Push a VLAN onto the VLAN stack.";
+      }
+      enum POP {
+        description
+          "Pop a VLAN from the VLAN stack.";
+      }
+      enum SWAP {
+        description
+          "Swap the VLAN at the top of the VLAN stack.";
+      }
+      // TODO: add push-push, pop-pop, push-swap etc
+    }
+    description
+      "Operations that can be performed on a VLAN stack.";
+  }
+
+
+}
diff --git a/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan.yang b/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan.yang
new file mode 100644
index 0000000000000000000000000000000000000000..905d4815026574a2813d14f977c2b328bdd13cc0
--- /dev/null
+++ b/src/tests/tools/firewall_agent/docs/yang/openconfig/vlan/openconfig-vlan.yang
@@ -0,0 +1,1001 @@
+module openconfig-vlan {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/vlan";
+
+  prefix "oc-vlan";
+
+  // import some basic types
+  import openconfig-vlan-types { prefix oc-vlan-types; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-if-ethernet { prefix oc-eth; }
+  import openconfig-if-aggregate { prefix oc-lag; }
+  import iana-if-type { prefix ianaift; }
+  import openconfig-extensions { prefix oc-ext; }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "This module defines configuration and state variables for VLANs,
+    in addition to VLAN parameters associated with interfaces";
+
+  oc-ext:openconfig-version "3.2.2";
+
+  revision "2023-02-07" {
+    description
+      "Remove prefix from enums in when statements";
+    reference "3.2.2";
+  }
+
+  revision "2021-07-28" {
+    description
+      "Add prefix to qualify when statements";
+    reference "3.2.1";
+  }
+
+  revision "2019-04-16" {
+    description
+      "Update import prefix for iana-if-type module";
+    reference "3.2.0";
+  }
+
+  revision "2019-01-31" {
+    description
+      "Revise QinQ matching and add input/output VLAN stack operations.";
+    reference "3.1.0";
+  }
+
+  revision "2018-11-21" {
+    description
+      "Add OpenConfig module metadata extensions.";
+    reference "3.0.2";
+  }
+
+  revision "2018-06-05" {
+    description
+      "Fix bugs in when statements.";
+    reference "3.0.1";
+  }
+
+  revision "2018-02-14" {
+    description
+      "Fix bug with name of 802.1ad identity.";
+    reference "3.0.0";
+  }
+
+  revision "2017-07-14" {
+    description
+      "Move top-level vlan data to network-instance; Update
+      identities to comply to style guide; fixed pattern
+      quoting; corrected trunk vlan types; added TPID config to
+      base interface.";
+    reference "2.0.0";
+  }
+
+  revision "2016-05-26" {
+    description
+      "OpenConfig public release";
+    reference "1.0.2";
+  }
+
+  // OpenConfig specific extensions for module metadata.
+  oc-ext:regexp-posix;
+  oc-ext:catalog-organization "openconfig";
+  oc-ext:origin "openconfig";
+
+  // grouping statements
+
+  grouping vlan-config {
+    description "VLAN configuration container.";
+
+    leaf vlan-id {
+      type oc-vlan-types:vlan-id;
+      description "Interface VLAN id.";
+    }
+
+    leaf name {
+      type string;
+      description "Interface VLAN name.";
+    }
+
+    leaf status {
+      type enumeration {
+        enum ACTIVE {
+          description "VLAN is active";
+        }
+        enum SUSPENDED {
+          description "VLAN is inactive / suspended";
+        }
+      }
+      default ACTIVE;
+      description "Admin state of the VLAN";
+    }
+
+  }
+
+  grouping vlan-state {
+    description "State variables for VLANs";
+
+    // placeholder
+
+  }
+
+  grouping vlan-tpid-config {
+    description
+      "TPID configuration for dot1q-enabled interfaces";
+
+    leaf tpid {
+      type identityref {
+        base oc-vlan-types:TPID_TYPES;
+      }
+      default oc-vlan-types:TPID_0X8100;
+      description
+        "Optionally set the tag protocol identifier field (TPID) that
+        is accepted on the VLAN";
+    }
+  }
+
+  grouping vlan-tpid-state {
+    description
+      "TPID opstate for dot1q-enabled interfaces";
+
+    // placeholder
+
+  }
+
+  grouping vlan-members-state {
+    description
+      "List of interfaces / subinterfaces belonging to the VLAN.";
+
+    container members {
+      description
+        "Enclosing container for list of member interfaces";
+
+      list member {
+        config false;
+        description
+          "List of references to interfaces / subinterfaces
+          associated with the VLAN.";
+
+        uses oc-if:base-interface-ref-state;
+      }
+    }
+  }
+
+  grouping vlan-switched-config {
+    description
+      "VLAN related configuration that is part of the physical
+      Ethernet interface.";
+
+    leaf interface-mode {
+      type oc-vlan-types:vlan-mode-type;
+      description
+        "Set the interface to access or trunk mode for
+        VLANs";
+    }
+
+    leaf native-vlan {
+      when "../interface-mode = 'TRUNK'" {
+        description
+          "Native VLAN is valid for trunk mode interfaces";
+      }
+      type oc-vlan-types:vlan-id;
+      description
+        "Set the native VLAN id for untagged frames arriving on
+        a trunk interface.  Tagged frames sent on an interface
+        configured with a native VLAN should have their tags
+        stripped prior to transmission. This configuration is only
+        valid on a trunk interface.";
+    }
+
+    leaf access-vlan {
+      when "../interface-mode = 'ACCESS'" {
+        description
+          "Access VLAN assigned to the interfaces";
+      }
+      type oc-vlan-types:vlan-id;
+      description
+        "Assign the access vlan to the access port.";
+    }
+
+    leaf-list trunk-vlans {
+      when "../interface-mode = 'TRUNK'" {
+        description
+          "Allowed VLANs may be specified for trunk mode
+          interfaces.";
+      }
+      type union {
+        type oc-vlan-types:vlan-id;
+        type oc-vlan-types:vlan-range;
+      }
+      description
+        "Specify VLANs, or ranges thereof, that the interface may
+        carry when in trunk mode.  If not specified, all VLANs are
+        allowed on the interface. Ranges are specified in the form
+        x..y, where x NFTables:
+    nft = NFTables()
+    nft.load(FamilyEnum.IPV4, TableEnum.FILTER)
+
+    tables_to_remove : Set[Tuple[FamilyEnum, TableEnum]] = set()
+    for table_key, table in nft.tables.items():
+
+        chains_to_remove : Set[str] = set()
+        for chain_name, chain in table.chains.items():
+
+            for rule in reversed(chain.rules):
+                if rule.comment == rule_comment: continue
+                chain.rules.remove(rule) # not a rule of interest
+
+            if len(chain.rules) > 0: continue
+            chains_to_remove.add(chain_name)
+
+        for chain_name in chains_to_remove:
+            table.chains.pop(chain_name)
+
+        if len(nft.tables) > 0: continue
+        tables_to_remove.add(table_key)
+
+    for table_key in tables_to_remove:
+        nft.tables.pop(table_key)
+
+    return nft
+
+
+class ACL(Resource):
+    def get(self, name : str):
+        nft = load_nftables_by_rule_comment(name)
+        return nft.to_openconfig(), 200
+
+    def delete(self, name : str):
+        nft = load_nftables_by_rule_comment(name)
+        nft.execute(removal=True, verbose=True)
+        return {}, 204
+
+
+def register_restconf_openconfig_acls(api : Api):
+    api.add_resource(ACLs, BASE_URL_ROOT)
+    api.add_resource(ACL, BASE_URL_ITEM)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py b/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f2668fd06ed41613775846cc728c89d02abe70d
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py
@@ -0,0 +1,98 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from typing import Dict, List, Tuple
+from .nft_model.DirectionEnum import DirectionEnum
+from .nft_model.FamilyEnum import FamilyEnum
+from .nft_model.NFTables import NFTables
+from .nft_model.TableEnum import TableEnum
+
+
+TYPE_ACL_RULE_SEQ_ID    = Tuple[str, int]
+TYPE_IFACE_DIRECTION    = Tuple[str, DirectionEnum]
+TYPE_IFACE_DIRECTIONS   = List[TYPE_IFACE_DIRECTION]
+TYPE_ACL_RULE_TO_IF_DIR = Dict[TYPE_ACL_RULE_SEQ_ID, TYPE_IFACE_DIRECTIONS]
+
+
+CHAIN_NAME_PREROUTING  = 'PREROUTING'
+CHAIN_NAME_INPUT       = 'INPUT'
+CHAIN_NAME_FORWARD     = 'FORWARD'
+CHAIN_NAME_OUTPUT      = 'OUTPUT'
+CHAIN_NAME_POSTROUTING = 'POSTROUTING'
+
+CHAINS_INPUT  = [
+    CHAIN_NAME_PREROUTING, CHAIN_NAME_INPUT, CHAIN_NAME_FORWARD
+]
+CHAINS_OUTPUT = [
+    CHAIN_NAME_FORWARD, CHAIN_NAME_OUTPUT, CHAIN_NAME_POSTROUTING
+]
+CHAINS_ALL    = [
+    CHAIN_NAME_PREROUTING, CHAIN_NAME_INPUT, CHAIN_NAME_FORWARD,
+    CHAIN_NAME_OUTPUT, CHAIN_NAME_POSTROUTING
+]
+
+
+def get_family_from_acl_set_type(acl_set_type : str) -> FamilyEnum:
+    return {
+        'ACL_IPV4' : FamilyEnum.IPV4,
+        'ACL_IPV6' : FamilyEnum.IPV6,
+    }[acl_set_type]
+
+
+class AclRuleToInterfaceDirection:
+    def __init__(self, nft : NFTables):
+        self._nft = nft
+        self._acl_rule_to_iface_direction : TYPE_ACL_RULE_TO_IF_DIR = dict()
+
+    def create_nft_chains_in_table(self, acl_set_type : str, chain_names : List[str]) -> None:
+        family = get_family_from_acl_set_type(acl_set_type)
+        table = self._nft.get_or_create_table(family, TableEnum.FILTER)
+        for chain_name in chain_names:
+            table.get_or_create_chain(chain_name)
+
+    def add_acl_set(self, if_name : str, acl_set : Dict, direction : DirectionEnum) -> None:
+        acl_set_name = acl_set['config']['set-name']
+        acl_set_type = acl_set['config']['type']
+
+        if direction == DirectionEnum.INGRESS:
+            self.create_nft_chains_in_table(acl_set_type, CHAINS_INPUT)
+        elif direction == DirectionEnum.EGRESS:
+            self.create_nft_chains_in_table(acl_set_type, CHAINS_OUTPUT)
+        else:
+            self.create_nft_chains_in_table(acl_set_type, CHAINS_ALL)
+
+        for acl_set_entry in acl_set['acl-entries']['acl-entry']:
+            sequence_id = int(acl_set_entry['sequence-id'])
+            key = (acl_set_name, sequence_id)
+            if_dir_list = self._acl_rule_to_iface_direction.setdefault(key, list())
+            if_dir_list.append((if_name, direction))
+
+    def add_interface(self, interface : Dict) -> None:
+        if_name = interface['config']['id']
+        for direction in [DirectionEnum.INGRESS, DirectionEnum.EGRESS]:
+            direction_value = direction.value
+            acl_sets_obj = interface.get(f'{direction_value}-acl-sets', dict())
+            acl_sets_lst = acl_sets_obj.get(f'{direction_value}-acl-set', list())
+            for acl_set in acl_sets_lst:
+                self.add_acl_set(if_name, acl_set, DirectionEnum.INGRESS)
+
+    def add_interfaces(self, interfaces : List[Dict]) -> None:
+        for interface in interfaces:
+            self.add_interface(interface)
+
+    def get_interfaces_directions(
+        self, acl_set_name : str, sequence_id : int
+    ) -> TYPE_IFACE_DIRECTIONS:
+        return self._acl_rule_to_iface_direction.get((acl_set_name, sequence_id), [])
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py
new file mode 100644
index 0000000000000000000000000000000000000000..a00f6d54e7c59005fbf4a8cdb7b4a07c7553ae1b
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py
@@ -0,0 +1,40 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import netifaces
+from flask_restful import Api, Resource
+
+BASE_URL = '/restconf/data/openconfig-platform:components'
+
+class Components(Resource):
+    def get(self):
+        # Build components list from interface names, reporting only PORT type
+        comps = list()
+        if_names = netifaces.interfaces()
+        for if_name in if_names:
+            comp = {
+                'name': if_name,
+                'config': {'name': if_name},
+                'state': {
+                    'name': if_name,
+                    'type': 'openconfig-platform-types:PORT',
+                    'empty': False
+                },
+            }
+            comps.append(comp)
+        return {'openconfig-platform:components': {'component': comps}}, 200
+
+def register_restconf_openconfig_components(api : Api):
+    api.add_resource(Components, BASE_URL)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py b/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ef52084bd97cb7cbe15e9b28b9c4619f5d4a9b0
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py
@@ -0,0 +1,25 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from flask_restful import Api, Resource
+
+BASE_URL = '/.well-known/host-meta'
+
+class HostMeta(Resource):
+    def get(self):
+        return {'links': [{'rel': 'restconf', 'href': '/restconf/data'}]}, 200
+
+def register_host_meta(api : Api):
+    api.add_resource(HostMeta, BASE_URL)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py
new file mode 100644
index 0000000000000000000000000000000000000000..4c8d9e307bd1f69d60212fa87af5fdfee7a1fdc8
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py
@@ -0,0 +1,89 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import copy, ipaddress, netifaces
+from flask_restful import Api, Resource
+
+BASE_URL = '/restconf/data/openconfig-interfaces:interfaces'
+
+class Interfaces(Resource):
+    def get(self):
+        if_list = list()
+        for if_name in netifaces.interfaces():
+            if if_name.startswith('lo'):
+                if_type = 'iana-if-type:softwareLoopback'
+            else:
+                if_type = 'iana-if-type:ethernetCsmacd'
+
+            if_config = {'name': if_name, 'type': if_type, 'enabled': True}
+            if_state = copy.deepcopy(if_config)
+            if_state.update({'admin-status': 'UP', 'oper-status': 'UP'})
+            if_data = {'name': if_name, 'config': if_config, 'state': if_state}
+            if_list.append(if_data)
+
+            sif_index = 1
+            sif_config = {'index': sif_index, 'enabled': True}
+            sif_state = copy.deepcopy(sif_config)
+            sif_state.update({'admin-status': 'UP', 'oper-status': 'UP'})
+            sif_data = {'index': sif_index, 'config': sif_config, 'state': sif_state}
+            sifs = {'subinterface': [sif_data]}
+            if_data['subinterfaces'] = sifs
+
+            if_addresses = netifaces.ifaddresses(if_name)
+
+            # MAC
+            link_addresses = if_addresses.get(netifaces.AF_LINK, list())
+            if not if_name.startswith('lo') and len(link_addresses) > 0:
+                mac_address = link_addresses[0].get('addr')
+                eth_config = {'mac-address': mac_address}
+                eth_state = copy.deepcopy(eth_config)
+                eth_state.update({'hw-mac-address': mac_address})
+                eth_data = {'config': eth_config, 'state': eth_state}
+                if_data['openconfig-if-ethernet:ethernet'] = eth_data
+
+            # IPv4
+            ipv4_addresses = if_addresses.get(netifaces.AF_INET, list())
+            oc_addrs = list()
+            for ipv4_address in ipv4_addresses:
+                address = ipv4_address['addr']
+                netmask = ipv4_address['netmask']
+                ipv4n = ipaddress.ip_network(f'{address}/{netmask}', strict=False)
+                prefix_len = ipv4n.prefixlen
+                addr_config = {'ip': address, 'prefix-length': prefix_len}
+                addr_state = copy.deepcopy(addr_config)
+                ipv4_addr_data = {'ip': address, 'config': addr_config, 'state': addr_state}
+                oc_addrs.append(ipv4_addr_data)
+            if len(oc_addrs) > 0:
+                sif_data['openconfig-if-ip:ipv4'] = {'addresses': {'address': oc_addrs}}
+
+            # IPv6
+            ipv6_addresses = if_addresses.get(netifaces.AF_INET6, list())
+            oc_addrs = list()
+            for ipv6_address in ipv6_addresses:
+                address = ipv6_address['addr']
+                netmask = ipv6_address['netmask']
+                ipv6n = ipaddress.ip_network(netmask, strict=False)
+                prefix_len = ipv6n.prefixlen
+                addr_config = {'ip': address, 'prefix-length': prefix_len}
+                addr_state = copy.deepcopy(addr_config)
+                ipv6_addr_data = {'ip': address, 'config': addr_config, 'state': addr_state}
+                oc_addrs.append(ipv6_addr_data)
+            if len(oc_addrs) > 0:
+                sif_data['openconfig-if-ip:ipv6'] = {'addresses': {'address': oc_addrs}}
+
+        return {'openconfig-interfaces:interfaces': {'interface': if_list}}, 200
+
+def register_restconf_openconfig_interfaces(api : Api):
+    api.add_resource(Interfaces, BASE_URL)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py
new file mode 100644
index 0000000000000000000000000000000000000000..951a3c888547ce622f2b4576880a43b5347cb52c
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py
@@ -0,0 +1,25 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from flask_restful import Api, Resource
+
+BASE_URL = '/restconf/data'
+
+class Root(Resource):
+    def get(self):
+        return {'restconf': {'data': {}}}, 200
+
+def register_restconf_root(api : Api):
+    api.add_resource(Root, BASE_URL)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..6db7d15e01bbe3abc850f0f9eb4b37b10cd130d4
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+
+class ActionEnum(enum.Enum):
+    ACCEPT = 'accept'
+    DROP   = 'drop'
+    REJECT = 'reject'
+
+def get_action_from_str(action : str) -> ActionEnum:
+    return ActionEnum._value2member_map_[action]
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py
new file mode 100644
index 0000000000000000000000000000000000000000..3cd0ff76947ac6842f876f8d4d96e73424bb4634
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py
@@ -0,0 +1,143 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+from dataclasses import dataclass, field
+from typing import Dict, List, Optional, Set, Tuple
+from .ActionEnum import ActionEnum
+from .DirectionEnum import DirectionEnum
+from .FamilyEnum import FamilyEnum
+from .TableEnum import TableEnum
+from .Rule import Rule
+
+
+class ChainPriorityEnum(enum.IntEnum):
+    RAW    = -300
+    MANGLE = -150
+    FILTER = 0
+
+@dataclass
+class Chain:
+    family : FamilyEnum
+    table  : TableEnum
+    chain  : str
+    handle : Optional[int       ] = None
+    type   : Optional[str       ] = None
+    hook   : Optional[str       ] = None
+    prio   : Optional[int       ] = None
+    policy : Optional[ActionEnum] = None
+    rules  : List[Rule] = field(default_factory=list)
+
+    @classmethod
+    def from_manual(
+        cls, family : FamilyEnum, table : TableEnum, name : str,
+        handle : Optional[int] = None, type_ : Optional[str] = None,
+        hook : Optional[str] = None, prio : int = ChainPriorityEnum.RAW.value,
+        policy : ActionEnum = ActionEnum.ACCEPT
+    ) -> 'Chain':
+        chain : 'Chain' = cls(family, table, name)
+        chain.handle = handle
+        if type_ is None: chain.type = str(table.value).lower()
+        if hook is None: chain.hook = str(name).lower()
+        chain.prio = prio
+        chain.policy = policy.value
+        return chain
+
+    @classmethod
+    def from_nft_entry(
+        cls, family : FamilyEnum, table : TableEnum, entry : Dict
+    ) -> 'Chain':
+        name : str = entry['name']
+        chain : 'Chain' = cls(family, table, name)
+        chain.handle = entry['handle']
+        chain.type   = entry.get('type',   table.value.lower())
+        chain.hook   = entry.get('hook',   name.lower())
+        chain.prio   = entry.get('prio',   ChainPriorityEnum.FILTER.value)
+        chain.policy = entry.get('policy', ActionEnum.ACCEPT.value)
+        return chain
+
+    def add_rule(self, entry : Dict) -> None:
+        rule = Rule.from_nft_entry(self.family, self.table, self.chain, entry)
+        if rule is None: return
+        self.rules.append(rule)
+
+    def to_openconfig(self) -> Tuple[Optional[Dict], Dict]:
+        acl_set_name = f'{self.family.value}-{self.table.value}-{self.chain}'
+        acl_set_type = {
+            FamilyEnum.IPV4 : 'ACL_IPV4',
+            FamilyEnum.IPV6 : 'ACL_IPV6',
+        }.get(self.family)
+
+        acl_set_entries : List[Dict] = list()
+        interfaces : Dict[str, Dict[DirectionEnum, Set[int]]] = dict()
+
+        for sequence_id, rule in enumerate(self.rules, start=1):
+            acl_entry, rule_interfaces = rule.to_openconfig(sequence_id)
+            acl_set_entries.append(acl_entry)
+
+            for if_name, direction_sequence_ids in rule_interfaces.items():
+                interface : Dict = interfaces.setdefault(if_name, dict())
+                for direction, sequence_ids in direction_sequence_ids.items():
+                    if_dir_sequence_ids : Set = interface.setdefault(direction, set())
+                    if_dir_sequence_ids.update(sequence_ids)
+
+
+        if len(acl_set_entries) > 0:
+            acl_set = {
+                'name': acl_set_name,
+                'type': acl_set_type,
+                'config': {'name': acl_set_name, 'type': acl_set_type},
+                'state': {'name': acl_set_name, 'type': acl_set_type},
+                'acl-entries': {'acl-entry': acl_set_entries}
+            }
+        else:
+            acl_set = None
+        return acl_set, interfaces
+
+    def dump(self) -> List[Dict]:
+        chain = {'family': self.family.value, 'table': self.table.value, 'name': self.chain}
+        if self.handle is not None: chain['handle'] = self.handle
+
+        entries : List[str] = list()
+        entries.append({'chain': chain})
+        for rule in self.rules: entries.extend(rule.dump())
+        return entries
+
+    def get_commands(self, removal : bool = False) -> List[Tuple[int, str]]:
+        commands : List[Tuple[int, str]] = list()
+
+        if removal:
+            # NOTE: For now, do not remove chains. We do not process all kinds of
+            # chains and their removal might cause side effects on NFTables.
+            pass
+        elif self.handle is not None:
+            # NOTE: Chain was already there, do not modify it
+            pass
+        else:
+            parts = [
+                'add', 'chain', self.family.value, self.table.value, self.chain,
+                '{',
+                'type', self.type, 'hook', self.hook, 'priority', str(self.prio), ';',
+                'policy', self.policy, ';',
+                '}'
+            ]
+            commands.append((-1, ' '.join(parts)))
+
+        for rule in self.rules:
+            rule_cmd = rule.get_command(removal=removal)
+            if rule_cmd is None: continue
+            commands.append(rule_cmd)
+
+        return commands
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..dec3813dc435c39962a14b43216a1e4a3cda5038
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py
@@ -0,0 +1,23 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+
+class DirectionEnum(enum.Enum):
+    INGRESS = 'ingress'
+    EGRESS  = 'egress'
+
+def get_direction_from_str(direction : str) -> DirectionEnum:
+    return DirectionEnum._value2member_map_[direction]
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..17bb3441e6b49944c1524babad1c42b6c576448c
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py
@@ -0,0 +1,91 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from typing import Dict, Optional
+from .FamilyEnum import FamilyEnum
+from .TableEnum import TableEnum
+
+
+class InvalidArgumentException(Exception):
+    def __init__(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None
+    ) -> None:
+        super().__init__(
+            f'Invalid combination of parameters: '
+            f'family={str(family)} table={str(table)} chain={str(chain)}'
+        )
+
+class RuntimeException(Exception):
+    def __init__(self, rc : int, output : str, error : str) -> None:
+        super().__init__(
+            f'nft command failed: '
+            f'rc={str(rc)} output={str(output)} error={str(error)}'
+        )
+
+class MalformedOutputException(Exception):
+    def __init__(self, reason : str, command : str, output : str) -> None:
+        super().__init__(
+            f'nft command malformed output: '
+            f'reason={str(reason)} command={str(command)} output={str(output)}'
+        )
+
+class UnsupportedElementException(Exception):
+    def __init__(
+        self, element : str, value : str, extra : Optional[str] = None
+    ) -> None:
+        msg = f'Unsupported: element={str(element)} value={str(value)}'
+        if extra is not None: msg += f' {str(extra)}'
+        super().__init__(msg)
+
+class MissingFieldException(Exception):
+    def __init__(self, field_name : str, objekt : Dict) -> None:
+        super().__init__(
+            f'Missing Field: name={str(field_name)} object={str(objekt)}'
+        )
+
+class AlreadyExistsTableException(Exception):
+    def __init__(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None
+    ) -> None:
+        super().__init__(
+            f'Already Exists Table: family={str(family)} table={str(table)}'
+        )
+
+class MissingTableException(Exception):
+    def __init__(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None
+    ) -> None:
+        super().__init__(
+            f'Missing Table: family={str(family)} table={str(table)}'
+        )
+
+class AlreadyExistsChainException(Exception):
+    def __init__(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None
+    ) -> None:
+        super().__init__(
+            f'Already Exists Chain: family={str(family)} table={str(table)} chain={str(chain)}'
+        )
+
+class MissingChainException(Exception):
+    def __init__(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None
+    ) -> None:
+        super().__init__(
+            f'Missing Chain: family={str(family)} table={str(table)} chain={str(chain)}'
+        )
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..f0e2a933ad5846da52d80de18a7f2f1da9d0d9fa
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py
@@ -0,0 +1,27 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+
+class FamilyEnum(enum.Enum):
+    IPV4   = 'ip'     # IPv4 address family.
+    IPV6   = 'ip6'    # IPv6 address family.
+    INET   = 'inet'   # Internet (IPv4/IPv6) address family.
+    ARP    = 'arp'    # ARP address family, handling IPv4 ARP packets.
+    BRIDGE = 'bridge' # Bridge address family, handling packets which traverse a bridge device.
+    NETDEV = 'netdev' # Netdev address family, handling packets on ingress and egress.
+
+def get_family_from_str(family : str) -> FamilyEnum:
+    return FamilyEnum._value2member_map_[family]
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c3aea14bc9927ded3067f3501866d6b099c287d
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py
@@ -0,0 +1,162 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import logging
+from dataclasses import dataclass, field
+import operator
+from typing import Dict, List, Optional, Set, Tuple
+from .DirectionEnum import DirectionEnum
+from .Exceptions import UnsupportedElementException
+from .FamilyEnum import FamilyEnum, get_family_from_str
+from .NFTablesCommand import NFTablesCommand
+from .Rule import Rule
+from .Table import Table
+from .TableEnum import TableEnum, get_table_from_str
+
+
+LOGGER = logging.getLogger(__name__)
+
+
+@dataclass
+class NFTables:
+    tables : Dict[Tuple[FamilyEnum, TableEnum], Table] = field(default_factory=dict)
+
+    def load(
+        self, family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None, skip_rules : bool = False
+    ) -> None:
+        entries = NFTablesCommand.list(family=family, table=table, chain=chain)
+        for entry in entries: self.parse_entry(entry, skip_rules=skip_rules)
+
+    def get_or_create_table(self, family : FamilyEnum, table : TableEnum) -> Table:
+        return self.tables.setdefault((family, table), Table(family, table))
+
+    def parse_entry(self, entry : Dict, skip_rules : bool = False) -> None:
+        entry_fields = set(entry.keys())
+        if len(entry_fields) != 1: raise UnsupportedElementException('entry', entry)
+        entry_type = entry_fields.pop()
+        if entry_type in {'metainfo'}:
+            return # skipping unneeded entry
+        elif entry_type in {'table'}:
+            self.parse_entry_table(entry['table'])
+        elif entry_type in {'chain'}:
+            self.parse_entry_chain(entry['chain'])
+        elif entry_type in {'rule'}:
+            if skip_rules: return
+            self.parse_entry_rule(entry['rule'])
+        else:
+            raise UnsupportedElementException('entry', entry)
+
+    def parse_entry_table(self, entry : Dict) -> None:
+        family = get_family_from_str(entry['family'])
+        if family not in {FamilyEnum.IPV4, FamilyEnum.IPV6}: return
+        table = get_table_from_str(entry['name'])
+        if table not in {TableEnum.FILTER}: return
+        table_obj = self.get_or_create_table(family, table)
+        table_obj.handle = entry['handle']
+
+    def parse_entry_chain(self, entry : Dict) -> None:
+        family = get_family_from_str(entry.pop('family'))
+        if family not in {FamilyEnum.IPV4, FamilyEnum.IPV6}: return
+        table = get_table_from_str(entry.pop('table'))
+        if table not in {TableEnum.FILTER}: return
+        self.get_or_create_table(family, table).add_chain_by_entry(entry)
+
+    def parse_entry_rule(self, entry : Dict) -> None:
+        family = get_family_from_str(entry.pop('family'))
+        if family not in {FamilyEnum.IPV4, FamilyEnum.IPV6}: return
+        table = get_table_from_str(entry.pop('table'))
+        if table not in {TableEnum.FILTER}: return
+        self.get_or_create_table(family, table).add_rule_by_entry(entry)
+
+    def add_rule(self, rule : Rule) -> None:
+        table = self.get_or_create_table(rule.family, rule.table)
+        chain = table.get_or_create_chain(rule.chain)
+        chain.rules.append(rule)
+
+    def to_openconfig(self) -> List[Dict]:
+        acl_sets : List[Dict] = list()
+        interfaces_struct : Dict[str, Dict[DirectionEnum, Dict[str, Set[int]]]] = dict()
+        acl_set_name_to_type : Dict[str, str] = dict()
+
+        for table in self.tables.values():
+            table_acl_sets, table_interfaces = table.to_openconfig()
+            acl_sets.extend(table_acl_sets)
+
+            for table_acl_set in table_acl_sets:
+                acl_set_name = table_acl_set['name']
+                acl_set_type = table_acl_set['type']
+                acl_set_name_to_type[acl_set_name] = acl_set_type
+
+            for if_name, dir_aclname_seqids in table_interfaces.items():
+                interface : Dict = interfaces_struct.setdefault(if_name, dict())
+                for direction, aclname_seqids in dir_aclname_seqids.items():
+                    if_direction : Dict = interface.setdefault(direction, dict())
+                    for acl_name, sequence_ids in aclname_seqids.items():
+                        if_dir_aclname : Set[int] = if_direction.setdefault(acl_name, set())
+                        if_dir_aclname.update(sequence_ids)
+
+        interfaces = list()
+        for if_name, dir_aclname_seqids in interfaces_struct.items():
+            if_data = {
+                'id': if_name,
+                'config': {'id': if_name},
+                'state': {'id': if_name},
+                'interface-ref': {
+                    'config': {'interface': if_name, 'subinterface': 1},
+                    'state': {'interface': if_name, 'subinterface': 1},
+                }
+            }
+
+            for direction, aclname_seqids in dir_aclname_seqids.items():
+                if_dir_obj : Dict = if_data.setdefault(f'{direction.value}-acl-sets', dict())
+                if_dir_list : List = if_dir_obj.setdefault(f'{direction.value}-acl-set', list())
+
+                for acl_set_name, sequence_ids in aclname_seqids.items():
+                    acl_set_type = acl_set_name_to_type[acl_set_name]
+                    if_dir_acl_set = {
+                        'set-name': acl_set_name,
+                        'type': acl_set_type,
+                        'config': {'set-name': acl_set_name, 'type': acl_set_type},
+                        'state': {'set-name': acl_set_name, 'type': acl_set_type},
+                    }
+                    if_dir_acl_set['acl-entries'] = {'acl-entry': [
+                        {'sequence-id': sequence_id, 'state': {'sequence-id': sequence_id}}
+                        for sequence_id in sequence_ids
+                    ]}
+                    if_dir_list.append(if_dir_acl_set)
+
+            interfaces.append(if_data)
+
+        acl_data = dict()
+        if len(acl_sets) > 0: acl_data.update({'acl-sets': {'acl-set': acl_sets}})
+        if len(interfaces) > 0: acl_data.update({'interfaces': {'interface': interfaces}})
+        return {'openconfig-acl:acl': acl_data}
+
+    def dump(self) -> List[Dict]:
+        entries : List[Dict] = list()
+        for table in self.tables.values(): entries.extend(table.dump())
+        return entries
+
+    def get_commands(self, removal : bool = False) -> List[Tuple[int, str]]:
+        commands : List[Tuple[int, str]] = list()
+        for table in self.tables.values():
+            commands.extend(table.get_commands(removal=removal))
+        # return a sorted list of commands by their priority (lower first)
+        return sorted(commands, key=operator.itemgetter(0))
+
+    def execute(self, removal : bool = False, verbose : bool = True) -> None:
+        commands = self.get_commands(removal=removal)
+        NFTablesCommand.execute(commands, verbose=verbose)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py
new file mode 100644
index 0000000000000000000000000000000000000000..983acf506981aac5ef40ec8950fe3d84b39641b6
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py
@@ -0,0 +1,79 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import json, logging, nftables
+from typing import Dict, List, Optional, Tuple
+from .Exceptions import (
+    InvalidArgumentException, MalformedOutputException, RuntimeException
+)
+from .FamilyEnum import FamilyEnum
+from .TableEnum import TableEnum
+
+
+LOGGER = logging.getLogger(__name__)
+
+
+class NFTablesCommand:
+    @staticmethod
+    def get_command_list(
+        family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None
+    ) -> str:
+        if chain is None:
+            if table is None:
+                if family is None:
+                    return 'list ruleset'
+                else:
+                    return f'list ruleset {family.value}'
+            else:
+                if family is not None:
+                    return f'list table {family.value} {table.value}'
+        else:
+            if table is not None:
+                if family is not None:
+                    return f'list chain {family.value} {table.value} {chain}'
+
+        raise InvalidArgumentException(family, table, chain)
+
+    @staticmethod
+    def list(
+        family : Optional[FamilyEnum] = None, table : Optional[TableEnum] = None,
+        chain : Optional[str] = None
+    ) -> List[Dict]:
+        nft = nftables.Nftables()
+        nft.set_json_output(True)
+        str_cmd = NFTablesCommand.get_command_list(
+            family=family, table=table, chain=chain
+        )
+        rc, output, error = nft.cmd(str_cmd)
+        if rc != 0: raise RuntimeException(rc, output, error)
+        json_nftables = json.loads(output)
+        if 'nftables' not in json_nftables:
+            raise MalformedOutputException(
+                'Missing field "nftables"', str_cmd, output
+            )
+        return json_nftables['nftables']
+
+    @staticmethod
+    def execute(commands : List[Tuple[int, str]], verbose : bool = True) -> None:
+        nft = nftables.Nftables()
+        nft.set_json_output(True)
+        for priority, command in commands:
+            if verbose:
+                LOGGER.info(f'Executing [priority={str(priority)}]: {command}')
+            rc, output, error = nft.cmd(command)
+            if verbose:
+                LOGGER.info(f'rc={str(rc)} output={str(output)} error={str(error)}')
+            if rc != 0: raise RuntimeException(rc, output, error)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py
new file mode 100644
index 0000000000000000000000000000000000000000..0546787d8bf9252c8bd79e21b78c2c13ea5a733a
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py
@@ -0,0 +1,90 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import ipaddress
+from typing import TYPE_CHECKING, Dict, Union
+from .Exceptions import MissingFieldException, UnsupportedElementException
+from .ProtocolEnum import get_protocol_from_str
+
+if TYPE_CHECKING:
+    from .Rule import Rule
+
+
+def parse_nft_ip_addr(right : Union[str, Dict]) -> ipaddress.IPv4Interface:
+    if isinstance(right, str):
+        address = right
+        prefix_len = 32
+    elif isinstance(right, Dict):
+        if 'prefix' not in right: raise MissingFieldException('match[ip].right.prefix', right)
+        prefix = right['prefix']
+        if 'addr' not in prefix: raise MissingFieldException('match[ip].right.prefix.addr', prefix)
+        if 'len' not in prefix: raise MissingFieldException('match[ip].right.prefix.len', prefix)
+        address = prefix['addr']
+        prefix_len = prefix['len']
+    else:
+        raise UnsupportedElementException('match[ip].right', right)
+    return ipaddress.IPv4Interface(f'{address}/{str(prefix_len)}')
+
+
+def parse_nft_match(rule : 'Rule', match : Dict) -> int:
+    if 'op' not in match: raise MissingFieldException('rule.expr.match.op', match)
+    if 'left' not in match: raise MissingFieldException('rule.expr.match.left', match)
+    if 'right' not in match: raise MissingFieldException('rule.expr.match.right', match)
+    if match['op'] != '==': raise UnsupportedElementException('rule.expr.match.op', match)
+
+    num_fields_updated = 0
+
+    match_left = match['left']
+    match_right = match['right']
+    if 'meta' in match_left and 'key' in match_left['meta']:
+        meta_key = match_left['meta']['key']
+        if 'iifname' in meta_key:
+            rule.input_if_name = match_right
+            num_fields_updated += 1
+        elif 'oifname' in meta_key:
+            rule.output_if_name = match_right
+            num_fields_updated += 1
+        else:
+            raise UnsupportedElementException('rule.expr.match', match)
+    elif 'payload' in match_left:
+        payload = match_left['payload']
+        if 'protocol' in payload and 'field' in payload:
+            protocol = payload['protocol']
+            field_name = payload['field']
+            if protocol == 'ip' and field_name == 'saddr':
+                rule.src_ip_addr = parse_nft_ip_addr(match_right)
+                num_fields_updated += 1
+            elif protocol == 'ip' and field_name == 'daddr':
+                rule.dst_ip_addr = parse_nft_ip_addr(match_right)
+                num_fields_updated += 1
+            elif protocol in {'tcp', 'udp'} and field_name == 'sport':
+                rule.ip_protocol = get_protocol_from_str(protocol)
+                rule.src_port = match_right
+                num_fields_updated += 1
+            elif protocol in {'tcp', 'udp'} and field_name == 'dport':
+                rule.ip_protocol = get_protocol_from_str(protocol)
+                rule.dst_port = match_right
+                num_fields_updated += 1
+            else:
+                raise UnsupportedElementException('rule.expr.match', match)
+        else:
+            raise UnsupportedElementException('rule.expr.match', match)
+    elif '&' in match_left:
+        # matches on masks and marks are skipped
+        pass
+    else:
+        raise UnsupportedElementException('rule.expr.match', match)
+
+    return num_fields_updated
\ No newline at end of file
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..c54ed6365d801e0cd39ee397accc005539479fdc
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+
+class ProtocolEnum(enum.Enum):
+    TCP  = 'tcp'
+    UDP  = 'udp'
+    ICMP = 'icmp'
+
+def get_protocol_from_str(protocol : str) -> ProtocolEnum:
+    return ProtocolEnum._value2member_map_[protocol]
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py
new file mode 100644
index 0000000000000000000000000000000000000000..040a03ca8dedf8bc72488b690bf4b123c48258de
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py
@@ -0,0 +1,280 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import copy, ipaddress, logging
+from dataclasses import asdict, dataclass
+from typing import Dict, List, Optional, Set, Tuple
+from .ActionEnum import ActionEnum, get_action_from_str
+from .DirectionEnum import DirectionEnum
+from .Exceptions import MissingFieldException, UnsupportedElementException
+from .FamilyEnum import FamilyEnum
+from .NFTablesParserTools import parse_nft_match
+from .ProtocolEnum import ProtocolEnum
+from .TableEnum import TableEnum
+
+
+LOGGER = logging.getLogger(__name__)
+
+
+OPENCONFIG_ACL_ACTION_TO_NFT = {
+    'ACCEPT' : ActionEnum.ACCEPT,
+    'DROP'   : ActionEnum.DROP,
+    'REJECT' : ActionEnum.REJECT,
+}
+
+def get_nft_action_from_openconfig(oc_action : str) -> ActionEnum:
+    nft_action = OPENCONFIG_ACL_ACTION_TO_NFT.get(oc_action)
+    if nft_action is None:
+        supported_values = set(OPENCONFIG_ACL_ACTION_TO_NFT.keys())
+        raise UnsupportedElementException(
+            'acl_entry.actions.config.forwarding-action', str(oc_action),
+            extra=f'supported_values={str(supported_values)}'
+        )
+    return nft_action
+
+
+OPENCONFIG_IPV4_PROTOCOL_TO_NFT = {
+    'IP_TCP'  : ProtocolEnum.TCP,
+    'IP_UDP'  : ProtocolEnum.UDP,
+    'IP_ICMP' : ProtocolEnum.ICMP,
+}
+
+def get_nft_ipv4_protocol_from_openconfig(oc_ipv4_protocol : str) -> ProtocolEnum:
+    nft_protocol = OPENCONFIG_IPV4_PROTOCOL_TO_NFT.get(oc_ipv4_protocol)
+    if nft_protocol is None:
+        supported_values = set(OPENCONFIG_IPV4_PROTOCOL_TO_NFT.keys())
+        raise UnsupportedElementException(
+            'acl_entry.ipv4.config.protocol', str(oc_ipv4_protocol),
+            extra=f'supported_values={str(supported_values)}'
+        )
+    return nft_protocol
+
+
+@dataclass
+class Rule:
+    family         : FamilyEnum
+    table          : TableEnum
+    chain          : str
+    handle         : Optional[int] = None
+
+    sequence_id    : int           = 0
+
+    input_if_name  : Optional[str] = None
+    output_if_name : Optional[str] = None
+    src_ip_addr    : Optional[ipaddress.IPv4Interface] = None
+    dst_ip_addr    : Optional[ipaddress.IPv4Interface] = None
+    ip_protocol    : Optional[ProtocolEnum] = None
+    src_port       : Optional[int] = None
+    dst_port       : Optional[int] = None
+
+    action         : Optional[ActionEnum] = None
+
+    comment        : Optional[str] = None
+
+    @classmethod
+    def from_nft_entry(
+        cls, family : FamilyEnum, table : TableEnum, chain : str, entry : Dict
+    ) -> 'Rule':
+        rule : 'Rule' = cls(family, table, chain)
+
+        if 'expr' not in entry: raise MissingFieldException('rule.expr', entry)
+        expr_list : List[Dict] = entry['expr']
+        num_fields_updated = 0
+        for expr_entry in expr_list:
+            expr_entry_fields = set(expr_entry.keys())
+            expr_entry_type = expr_entry_fields.pop()
+            if expr_entry_type == 'match':
+                match = expr_entry['match']
+                num_fields_updated += parse_nft_match(rule, match)
+            elif expr_entry_type in {'accept', 'drop', 'reject'}:
+                rule.action = get_action_from_str(expr_entry_type)
+                num_fields_updated += 1
+            elif expr_entry_type in {'counter', 'jump', 'xt'}:
+                pass # ignore these entry types
+            else:
+                raise UnsupportedElementException('expr_entry', expr_entry)
+
+        if num_fields_updated == 0:
+            # Ignoring empty/unsupported rule...
+            return None
+
+        rule.comment = entry.pop('comment', None)
+        rule.handle = entry['handle']
+        return rule
+
+    @classmethod
+    def from_openconfig(
+        cls, family : FamilyEnum, table : TableEnum, chain : str, acl_entry : Dict
+    ) -> 'Rule':
+        rule : 'Rule' = cls(family, table, chain)
+
+        rule.sequence_id = int(acl_entry['config']['sequence-id'])
+        rule.comment = acl_entry['config']['description']
+
+        ipv4_config = acl_entry.get('ipv4', {}).get('config', {})
+        if 'source-address' in ipv4_config:
+            rule.src_ip_addr = ipaddress.IPv4Interface(ipv4_config['source-address'])
+
+        if 'destination-address' in ipv4_config:
+            rule.dst_ip_addr = ipaddress.IPv4Interface(ipv4_config['destination-address'])
+
+        if 'protocol' in ipv4_config:
+            ip_protocol = ipv4_config['protocol']
+            rule.ip_protocol = get_nft_ipv4_protocol_from_openconfig(ip_protocol)
+
+        transp_config = acl_entry.get('transport', {}).get('config', {})
+        rule.src_port = transp_config.get('source-port')
+        rule.dst_port = transp_config.get('destination-port')
+
+        action = acl_entry['actions']['config']['forwarding-action']
+        rule.action = get_nft_action_from_openconfig(action)
+
+        return rule
+
+    def to_openconfig(self, sequence_id : int) -> Tuple[Dict, Dict]:
+        acl_entry_config = {'sequence-id': sequence_id}
+        if self.comment is not None: acl_entry_config['description'] = self.comment
+
+        acl_entry = {
+            'sequence-id': sequence_id,
+            'config': acl_entry_config,
+            'state': copy.deepcopy(acl_entry_config),
+        }
+
+        ip_version = {
+            FamilyEnum.IPV4: 'ipv4',
+            FamilyEnum.IPV6: 'ipv6',
+        }.get(self.family)
+
+        ip_protocol = {
+            ProtocolEnum.TCP  : 'IP_TCP',
+            ProtocolEnum.UDP  : 'IP_UDP',
+            ProtocolEnum.ICMP : 'IP_ICMP',
+        }.get(self.ip_protocol, None)
+
+        if self.src_ip_addr is not None:
+            acl_entry_ipvx = acl_entry.setdefault(ip_version, dict())
+            acl_entry_ipvx_config = acl_entry_ipvx.setdefault('config', dict())
+            acl_entry_ipvx_config['source-address'] = str(self.src_ip_addr.network)
+            acl_entry_ipvx_state = acl_entry_ipvx.setdefault('state', dict())
+            acl_entry_ipvx_state['source-address'] = str(self.src_ip_addr.network)
+
+        if self.dst_ip_addr is not None:
+            acl_entry_ipvx = acl_entry.setdefault(ip_version, dict())
+            acl_entry_ipvx_config = acl_entry_ipvx.setdefault('config', dict())
+            acl_entry_ipvx_config['destination-address'] = str(self.dst_ip_addr.network)
+            acl_entry_ipvx_state = acl_entry_ipvx.setdefault('state', dict())
+            acl_entry_ipvx_state['destination-address'] = str(self.dst_ip_addr.network)
+
+        if ip_protocol is not None:
+            acl_entry_ipvx = acl_entry.setdefault(ip_version, dict())
+            acl_entry_ipvx_config = acl_entry_ipvx.setdefault('config', dict())
+            acl_entry_ipvx_config['protocol'] = ip_protocol
+            acl_entry_ipvx_state = acl_entry_ipvx.setdefault('state', dict())
+            acl_entry_ipvx_state['protocol'] = ip_protocol
+
+        if self.src_port is not None:
+            acl_entry_trans = acl_entry.setdefault('transport', dict())
+            acl_entry_trans_config = acl_entry_trans.setdefault('config', dict())
+            acl_entry_trans_config['source-port'] = self.src_port
+            acl_entry_trans_state = acl_entry_trans.setdefault('state', dict())
+            acl_entry_trans_state['source-port'] = self.src_port
+
+        if self.dst_port is not None:
+            acl_entry_trans = acl_entry.setdefault('transport', dict())
+            acl_entry_trans_config = acl_entry_trans.setdefault('config', dict())
+            acl_entry_trans_config['destination-port'] = self.dst_port
+            acl_entry_trans_state = acl_entry_trans.setdefault('state', dict())
+            acl_entry_trans_state['destination-port'] = self.dst_port
+
+        if self.action is not None:
+            acl_forwarding_action = {
+                ActionEnum.ACCEPT : 'ACCEPT',
+                ActionEnum.DROP   : 'DROP',
+                ActionEnum.REJECT : 'REJECT',
+            }.get(self.action)
+            acl_action = {'forwarding-action': acl_forwarding_action}
+            acl_entry['actions'] = {'config': acl_action, 'state': acl_action}
+
+        interfaces : Dict[str, Dict[DirectionEnum, Set[int]]] = dict()
+
+        if self.input_if_name is not None:
+            interface : Dict = interfaces.setdefault(self.input_if_name, dict())
+            direction : Set = interface.setdefault(DirectionEnum.INGRESS, set())
+            direction.add(sequence_id)
+
+        if self.output_if_name is not None:
+            interface : Dict = interfaces.setdefault(self.output_if_name, dict())
+            direction : Set = interface.setdefault(DirectionEnum.EGRESS, set())
+            direction.add(sequence_id)
+
+        return acl_entry, interfaces
+
+
+    def dump(self) -> List[Dict]:
+        rule = {'family': self.family.value, 'table': self.table.value, 'chain': self.chain}
+        expr = list()
+        if self.input_if_name is not None:
+            match_left = {'meta': {'key': 'iifname'}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': self.input_if_name}})
+        if self.output_if_name is not None:
+            match_left = {'meta': {'key': 'oifname'}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': self.output_if_name}})
+        if self.src_ip_addr is not None:
+            match_left = {'payload': {'protocol': 'ip', 'field': 'saddr'}}
+            match_right = {'prefix': {'addr': str(self.src_ip_addr.ip), 'len': self.src_ip_addr.network.prefixlen}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': match_right}})
+        if self.dst_ip_addr is not None:
+            match_left = {'payload': {'protocol': 'ip', 'field': 'daddr'}}
+            match_right = {'prefix': {'addr': str(self.dst_ip_addr.ip), 'len': self.dst_ip_addr.network.prefixlen}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': match_right}})
+        if self.src_port is not None:
+            match_left = {'payload': {'protocol': self.ip_protocol.value, 'field': 'sport'}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': self.src_port}})
+        if self.dst_port is not None:
+            match_left = {'payload': {'protocol': self.ip_protocol.value, 'field': 'dport'}}
+            expr.append({'match': {'op': '==', 'left': match_left, 'right': self.dst_port}})
+        if self.action is not None: expr.append({self.action.value : None})
+        if len(expr) > 0: rule['expr'] = expr
+        if self.comment is not None: rule['comment'] = self.comment
+        if self.handle is not None: rule['handle'] = self.handle
+        return [{'rule': rule}]
+
+    def get_command(self, removal : bool = False) -> Optional[Tuple[int, str]]:
+        if removal:
+            if self.handle is None: raise MissingFieldException('handle', asdict(self))
+            parts = [
+                'delete', 'rule',  # Ideally destroy (fail silently if not exist), but seems not supported.
+                self.family.value, self.table.value, self.chain,
+                'handle', str(self.handle)
+            ]
+            return self.sequence_id, ' '.join(parts)
+        elif self.handle is not None:
+            # NOTE: Rule was already there, do not modify it
+            return None
+        else:
+            # NOTE: if sequence_id < 10000: insert the rules to the top;
+            # otherwise, append to the bottom. Anyways, sort rules by sequence_id.
+            verb = 'insert' if self.sequence_id < 10000 else 'add'
+            parts = [verb, 'rule', self.family.value, self.table.value, self.chain]
+            if self.input_if_name is not None: parts.extend(['iifname', self.input_if_name])
+            if self.output_if_name is not None: parts.extend(['oifname', self.output_if_name])
+            if self.src_ip_addr is not None: parts.extend(['ip', 'saddr', str(self.src_ip_addr)])
+            if self.dst_ip_addr is not None: parts.extend(['ip', 'daddr', str(self.dst_ip_addr)])
+            if self.src_port is not None: parts.extend([self.ip_protocol.value, 'sport', str(self.src_port)])
+            if self.dst_port is not None: parts.extend([self.ip_protocol.value, 'dport', str(self.dst_port)])
+            if self.action is not None: parts.append(self.action.value)
+            if self.comment is not None: parts.extend(['comment', f'"{self.comment}"'])
+            return self.sequence_id, ' '.join(parts)
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py
new file mode 100644
index 0000000000000000000000000000000000000000..85512f352489f315e22ac5bb62f87e3d3999020a
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py
@@ -0,0 +1,96 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from dataclasses import dataclass, field
+from typing import Dict, List, Optional, Set, Tuple
+from .Chain import Chain
+from .DirectionEnum import DirectionEnum
+from .FamilyEnum import FamilyEnum
+from .TableEnum import TableEnum
+
+
+@dataclass
+class Table:
+    family : FamilyEnum
+    table  : TableEnum
+    handle : Optional[int] = None
+    chains : Dict[str, Chain] = field(default_factory=dict)
+
+    def get_chain(self, name : str) -> Chain:
+        return self.chains[name]
+
+    def get_or_create_chain(self, name : str) -> Chain:
+        return self.chains.setdefault(name, Chain.from_manual(self.family, self.table, name))
+
+    def add_chain_by_entry(self, entry : Dict) -> Chain:
+        name : str = entry['name']
+        if name.lower() not in {'input', 'output', 'forward', 'prerouting'}: return None
+        if name in self.chains: return self.chains[name]
+        chain = Chain.from_nft_entry(self.family, self.table, entry)
+        self.chains[name] = chain
+        return chain
+
+    def add_rule_by_entry(self, entry : Dict) -> None:
+        chain : str = entry.pop('chain')
+        if chain.lower() not in {'input', 'output', 'forward', 'prerouting'}: return
+        self.get_chain(chain).add_rule(entry)
+
+    def to_openconfig(self) -> Tuple[List[Dict], Dict]:
+        acl_sets : List[Dict] = list()
+        interfaces : Dict[str, Dict[DirectionEnum, Dict[str, Set[int]]]] = dict()
+
+        for chain in self.chains.values():
+            chain_acl_set, chain_interfaces = chain.to_openconfig()
+            if chain_acl_set is None: continue
+
+            acl_sets.append(chain_acl_set)
+
+            acl_set_name = chain_acl_set['name']
+            for if_name, direction_sequence_ids in chain_interfaces.items():
+                interface : Dict = interfaces.setdefault(if_name, dict())
+                for direction, sequence_ids in direction_sequence_ids.items():
+                    if_direction : Dict = interface.setdefault(direction, dict())
+                    if_dir_aclname : Set[int] = if_direction.setdefault(acl_set_name, set())
+                    if_dir_aclname.update(sequence_ids)
+
+        return acl_sets, interfaces
+
+    def dump(self) -> List[Dict]:
+        table = {'family': self.family.value, 'name': self.table.value}
+        if self.handle is not None: table['handle'] = self.handle
+
+        entries : List[str] = list()
+        entries.append({'table': table})
+        for chain in self.chains.values(): entries.extend(chain.dump())
+        return entries
+
+    def get_commands(self, removal : bool = False) -> List[Tuple[int, str]]:
+        commands : List[Tuple[int, str]] = list()
+
+        if removal:
+            # NOTE: For now, do not remove tables. We do not process all kinds of
+            # tables and their removal might cause side effects on NFTables.
+            pass
+        elif self.handle is not None:
+            # NOTE: Table was already there, do not modify it
+            pass
+        else:
+            parts = ['add', 'table', self.family.value, self.table.value]
+            commands.append((-2, ' '.join(parts)))
+
+        for chain in self.chains.values():
+            commands.extend(chain.get_commands(removal=removal))
+
+        return commands
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py
new file mode 100644
index 0000000000000000000000000000000000000000..8388b2abe7486166e7209919c571c2e50a7abe5b
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py
@@ -0,0 +1,26 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import enum
+
+class TableEnum(enum.Enum):
+    FILTER = 'filter'
+    MANGLE = 'mangle'
+    NAT    = 'nat'
+    RAW    = 'raw'
+    ROUTE  = 'route'
+
+def get_table_from_str(table : str) -> TableEnum:
+    return TableEnum._value2member_map_[table]
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc838bd264ab69d029993d6838c41e180a88ccc0
--- /dev/null
+++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py
@@ -0,0 +1,31 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from .FamilyEnum import FamilyEnum
+from .NFTables import NFTables
+from .TableEnum import TableEnum
+
+def main():
+    nft = NFTables()
+    nft.load(FamilyEnum.IPV4, TableEnum.FILTER)
+
+    entries = nft.dump()
+    for entry in entries:
+        print(entry)
+    
+    print(nft.to_openconfig())
+
+if __name__ == '__main__':
+    main()
diff --git a/src/tests/tools/firewall_agent/redeploy-docker.sh b/src/tests/tools/firewall_agent/redeploy-docker.sh
new file mode 100755
index 0000000000000000000000000000000000000000..62dada77b6a2383cda12990004f886cb7b28f07e
--- /dev/null
+++ b/src/tests/tools/firewall_agent/redeploy-docker.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set -euo pipefail
+
+docker stop firewall-agent || true
+docker rm firewall-agent || true
+
+docker build --tag "firewall-agent:dev" .
+docker run --detach --name firewall-agent --cap-add=NET_ADMIN --network host --publish 8888:8888 firewall-agent:dev
+
+docker logs --follow firewall-agent
diff --git a/src/tests/tools/firewall_agent/redeploy-kubernetes.sh b/src/tests/tools/firewall_agent/redeploy-kubernetes.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ad42c14c4a365d83e010bb0d4cb28073729a32b0
--- /dev/null
+++ b/src/tests/tools/firewall_agent/redeploy-kubernetes.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set -euo pipefail
+
+docker build --tag "firewall-agent:dev" .
+docker tag "firewall-agent:dev" "http://localhost:32000/tfs/firewall-agent:dev"
+docker push "http://localhost:32000/tfs/firewall-agent:dev"
+
+kubectl delete namespace firewall-agent
+kubectl create namespace firewall-agent
+kubectl apply --namespace firewall-agent --filename=DeploymentSet.yaml
+kubectl logs --namespace firewall-agent deployment/firewall-agent --follow
diff --git a/src/tests/tools/firewall_agent/requirements.txt b/src/tests/tools/firewall_agent/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5d0f4ee2a1554935e5a5f505b4b069974b9a9
--- /dev/null
+++ b/src/tests/tools/firewall_agent/requirements.txt
@@ -0,0 +1,19 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+flask-restful>=0.3.9
+Flask>=2.0
+netifaces>=0.11
+pip-nftables==1.0.2.post1
diff --git a/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_10.json b/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_10.json
new file mode 100644
index 0000000000000000000000000000000000000000..e46bd1f268c211ebab5cae4ad4da1d2febab6cfe
--- /dev/null
+++ b/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_10.json
@@ -0,0 +1,27 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 1,
+                "config": {"sequence-id": 1, "description": "accept-30435-from-10-0-2-10"},
+                "ipv4": {"config": {"source-address": "10.0.2.10/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 30435}},
+                "actions": {"config": {"forwarding-action": "ACCEPT"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "enp0s3",
+        "config": {"id": "enp0s3"},
+        "interface-ref": {"config": {"interface": "enp0s3", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 1}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_2.json b/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_2.json
new file mode 100644
index 0000000000000000000000000000000000000000..df18d93c1265ffa9e93a8d70335e6fc4b85f2ea8
--- /dev/null
+++ b/src/tests/tools/firewall_agent/scripts/data/accept_30435_from_10_0_2_2.json
@@ -0,0 +1,27 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 1,
+                "config": {"sequence-id": 1, "description": "accept-30435-from-10-0-2-2"},
+                "ipv4": {"config": {"source-address": "10.0.2.2/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 30435}},
+                "actions": {"config": {"forwarding-action": "ACCEPT"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "enp0s3",
+        "config": {"id": "enp0s3"},
+        "interface-ref": {"config": {"interface": "enp0s3", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 1}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/scripts/data/reject_30435_from_all.json b/src/tests/tools/firewall_agent/scripts/data/reject_30435_from_all.json
new file mode 100644
index 0000000000000000000000000000000000000000..99ac22dd0a8c17f5ade2846f2dcff61b8bcd9def
--- /dev/null
+++ b/src/tests/tools/firewall_agent/scripts/data/reject_30435_from_all.json
@@ -0,0 +1,27 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 10000,
+                "config": {"sequence-id": 10000, "description": "reject-30435-from-all"},
+                "ipv4": {"config": {"protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 30435}},
+                "actions": {"config": {"forwarding-action": "REJECT"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "enp0s3",
+        "config": {"id": "enp0s3"},
+        "interface-ref": {"config": {"interface": "enp0s3", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 10000}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/scripts/run_nft_model.sh b/src/tests/tools/firewall_agent/scripts/run_nft_model.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d57ad29f95d118cbbba0fa8b484d6935864dcad9
--- /dev/null
+++ b/src/tests/tools/firewall_agent/scripts/run_nft_model.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+sudo true
+sudo -E "$(which python)" -m firewall_agent.nft_model
diff --git a/src/tests/tools/firewall_agent/scripts/test_commands.sh b/src/tests/tools/firewall_agent/scripts/test_commands.sh
new file mode 100755
index 0000000000000000000000000000000000000000..22da27d928200b93490956bac183cff93978dc56
--- /dev/null
+++ b/src/tests/tools/firewall_agent/scripts/test_commands.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+curl http://172.17.0.1:8888/restconf/data/openconfig-platform:components
+curl http://172.17.0.1:8888/restconf/data/openconfig-interfaces:interfaces
+curl http://172.17.0.1:8888/restconf/data/openconfig-acl:acl
+
+curl -X POST -d @scripts/data/reject_30435_from_all.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+curl -X POST -d @scripts/data/accept_30435_from_10_0_2_2.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+curl -X POST -d @scripts/data/accept_30435_from_10_0_2_10.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+
+curl http://172.17.0.1:8888/restconf/data/openconfig-acl:acl
+
+curl -X DELETE http://172.17.0.1:8888/restconf/data/openconfig-acl:acl/acl-sets/acl-set=accept-30435-from-10-0-2-2
+curl -X DELETE http://172.17.0.1:8888/restconf/data/openconfig-acl:acl/acl-sets/acl-set=accept-30435-from-10-0-2-10
+curl -X DELETE http://172.17.0.1:8888/restconf/data/openconfig-acl:acl/acl-sets/acl-set=reject-30435-from-all
+
+curl http://172.17.0.1:8888/restconf/data/openconfig-acl:acl
diff --git a/src/tests/tools/firewall_agent/tests/docker-compose-down.sh b/src/tests/tools/firewall_agent/tests/docker-compose-down.sh
new file mode 100755
index 0000000000000000000000000000000000000000..edae64d04e60d16a04a09c4c7183b361bb3193e1
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/docker-compose-down.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set -euo pipefail
+
+echo "Tearing down demo stack..."
+docker compose -f docker-compose.yml down -v --remove-orphans
diff --git a/src/tests/tools/firewall_agent/tests/docker-compose-up.sh b/src/tests/tools/firewall_agent/tests/docker-compose-up.sh
new file mode 100755
index 0000000000000000000000000000000000000000..43687694ba617e54ef396aa36675ab23b37ccd33
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/docker-compose-up.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+set -euo pipefail
+
+echo "Starting demo stack with docker compose..."
+docker compose -f docker-compose.yml up -d --build
+
+echo "Waiting a few seconds for services to become healthy..."
+sleep 3
+
+echo "You can now run: python3 install_acls.py --ports 8001,8002"
+echo "Services started. HTTP servers: http://localhost:8001 and http://localhost:8002."
+echo "Firewall agent RESTCONF: http://localhost:8888/restconf/data"
diff --git a/src/tests/tools/firewall_agent/tests/docker-compose.yml b/src/tests/tools/firewall_agent/tests/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..596ae4d5111ccbe6a59aff478583766816db01f8
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/docker-compose.yml
@@ -0,0 +1,37 @@
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+services:
+  firewall_agent:
+    build:
+      context: .
+      dockerfile: Dockerfile
+    container_name: firewall-agent
+    network_mode: host
+    cap_add:
+      - NET_ADMIN
+      - NET_RAW
+
+  public_server:
+    image: python:3.11-slim
+    container_name: public-server
+    network_mode: host
+    command: ["python", "-u", "-m", "http.server", "8001"]
+
+  corporate_server:
+    image: python:3.11-slim
+    container_name: corporate-server
+    network_mode: host
+    command: ["python", "-u", "-m", "http.server", "8002"]
diff --git a/src/tests/tools/firewall_agent/tests/oc_acl_block_8001.json b/src/tests/tools/firewall_agent/tests/oc_acl_block_8001.json
new file mode 100644
index 0000000000000000000000000000000000000000..70efb0d4ba2dbe780a12c26508c5e6d1cc0a8834
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/oc_acl_block_8001.json
@@ -0,0 +1,27 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 1,
+                "config": {"sequence-id": 1, "description": "drop-8001-host"},
+                "ipv4": {"config": {"source-address": "127.0.0.1/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 8001}},
+                "actions": {"config": {"forwarding-action": "DROP"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "lo",
+        "config": {"id": "lo"},
+        "interface-ref": {"config": {"interface": "lo", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 1}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/tests/oc_acl_block_8002.json b/src/tests/tools/firewall_agent/tests/oc_acl_block_8002.json
new file mode 100644
index 0000000000000000000000000000000000000000..2d20df7b220e394e3ba62f1cd9a15f4c1d506d5a
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/oc_acl_block_8002.json
@@ -0,0 +1,27 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 1,
+                "config": {"sequence-id": 1, "description": "drop-8002-ext"},
+                "ipv4": {"config": {"source-address": "10.0.2.1/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 8002}},
+                "actions": {"config": {"forwarding-action": "DROP"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "enp0s3",
+        "config": {"id": "enp0s3"},
+        "interface-ref": {"config": {"interface": "enp0s3", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 1}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/tests/oc_acl_multi_rule.json b/src/tests/tools/firewall_agent/tests/oc_acl_multi_rule.json
new file mode 100644
index 0000000000000000000000000000000000000000..55f41c03305e539024a9b12644448705455fba62
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/oc_acl_multi_rule.json
@@ -0,0 +1,39 @@
+{"openconfig-acl:acl": {
+    "acl-sets": {"acl-set": [{
+        "name": "ip-filter-input", "type": "ACL_IPV4",
+        "config": {"name": "ip-filter-input", "type": "ACL_IPV4"},
+        "acl-entries": {"acl-entry": [
+            {
+                "sequence-id": 1,
+                "config": {"sequence-id": 1, "description": "drop-8001-host"},
+                "ipv4": {"config": {"source-address": "10.0.2.10/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 8001}},
+                "actions": {"config": {"forwarding-action": "DROP"}}
+            },
+            {
+                "sequence-id": 2,
+                "config": {"sequence-id": 2, "description": "drop-8002-ext"},
+                "ipv4": {"config": {"source-address": "10.0.2.1/32", "protocol": "IP_TCP"}},
+                "transport": {"config": {"destination-port": 8002}},
+                "actions": {"config": {"forwarding-action": "DROP"}}
+            }
+        ]}
+    }]},
+    "interfaces": {"interface": [{
+        "id": "enp0s3",
+        "config": {"id": "enp0s3"},
+        "interface-ref": {"config": {"interface": "enp0s3", "subinterface": 1}},
+        "ingress-acl-sets": {"ingress-acl-set": [
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 1}]}
+            },
+            {
+                "set-name": "ip-filter-input", "type": "ACL_IPV4",
+                "config": {"set-name": "ip-filter-input", "type": "ACL_IPV4"},
+                "acl-entries": {"acl-entry": [{"sequence-id": 2}]}
+            }
+        ]}
+    }]}
+}}
diff --git a/src/tests/tools/firewall_agent/tests/test_commands.sh b/src/tests/tools/firewall_agent/tests/test_commands.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5e82b091372b6820f17044ebb019f2c416559aab
--- /dev/null
+++ b/src/tests/tools/firewall_agent/tests/test_commands.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+wget -q -O- http://localhost:8001
+wget -q -O- http://localhost:8002
+
+curl -X POST -d @scripts/data/oc_acl_block_8001.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+curl -X POST -d @scripts/data/oc_acl_block_8002.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+curl -X POST -d @scripts/data/oc_acl_multi_rule.json http://127.0.0.1:8888/restconf/data/openconfig-acl:acl
+
+wget -q -O- http://localhost:8001
+wget -q -O- http://localhost:8002
+
+curl -X DELETE http://172.17.0.1:8888/restconf/data/openconfig-acl:acl/acl-sets/acl-set=drop-8001-host
+curl -X DELETE http://172.17.0.1:8888/restconf/data/openconfig-acl:acl/acl-sets/acl-set=drop-8002-ext
diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile
index d16762b1690347f45c13078afa23d77b392f34e4..1d4c3db08f45943181b6a4597a44e75afcc31e26 100644
--- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile
+++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and copy content
 RUN mkdir -p /var/teraflow/mock_ietf_actn_sdn_ctrl
diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile
index b2ac55af45ba673cd7c119f19a5245d065d02ea3..e80d8714576cf6a7f7d95fb84972dde5ed37716d 100644
--- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile
+++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and copy content
 RUN mkdir -p /var/teraflow/mock_ietf_l3vpn_sdn_ctrl
diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile
index a624152de7d9188067a5828b4a8958b8d3418694..44f2488f175609cb1572ab89575ec0a8fb92715b 100644
--- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile
+++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and copy content
 RUN mkdir -p /var/teraflow/mock_ietf_network_slice_sdn_ctrl
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
index d428a28c4ae67fd0bb247e325a07c176a48545ad..dd45a16d985b2b44017e6e6129ab364ec81b5fe5 100644
--- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and copy content
 RUN mkdir -p /var/teraflow/mock_mw_sdn_ctrl
diff --git a/src/tests/tools/mock_nce_ctrl/Dockerfile b/src/tests/tools/mock_nce_ctrl/Dockerfile
index 579bab5367e2d9320f45eb473e7d82f59b24a181..8fe63387fd5c08035f3abcf789691f9bf4595324 100644
--- a/src/tests/tools/mock_nce_ctrl/Dockerfile
+++ b/src/tests/tools/mock_nce_ctrl/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and copy content
 RUN mkdir -p /var/teraflow/mock_nce_ctrl
diff --git a/src/tests/tools/mock_nce_fan_ctrl/Dockerfile b/src/tests/tools/mock_nce_fan_ctrl/Dockerfile
index cf4dfd9ad4cbea8fde40f147f4291b584505cbc3..c16e884f55e1f7da318ffc474b9c76cd4c7af7a6 100644
--- a/src/tests/tools/mock_nce_fan_ctrl/Dockerfile
+++ b/src/tests/tools/mock_nce_fan_ctrl/Dockerfile
@@ -39,9 +39,9 @@ RUN ldconfig
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get specific Python packages
 RUN mkdir -p /var/teraflow/
diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py
index 1c6996581b023c7a858a2f9e3020556ec6690194..622e03fbf7cf5942e4bab4b7e5a9ff94e74aed78 100644
--- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py
+++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py
@@ -28,7 +28,7 @@ class CallbackQosProfile(_Callback):
         pattern += r'/qos-profile=(?P[^/]+)'
         super().__init__(pattern)
 
-    def execute_data(
+    def execute_data_update(
         self, match : re.Match, path : str, old_data : Optional[Dict],
         new_data : Optional[Dict]
     ) -> bool:
@@ -44,7 +44,7 @@ class CallbackApplication(_Callback):
         pattern += r'/application=(?P[^/]+)'
         super().__init__(pattern)
 
-    def execute_data(
+    def execute_data_update(
         self, match : re.Match, path : str, old_data : Optional[Dict],
         new_data : Optional[Dict]
     ) -> bool:
@@ -60,7 +60,7 @@ class CallbackAppFlow(_Callback):
         pattern += r'/app-flow=(?P[^/]+)'
         super().__init__(pattern)
 
-    def execute_data(
+    def execute_data_update(
         self, match : re.Match, path : str, old_data : Optional[Dict],
         new_data : Optional[Dict]
     ) -> bool:
diff --git a/src/tests/tools/mock_nce_t_ctrl/Dockerfile b/src/tests/tools/mock_nce_t_ctrl/Dockerfile
index 60f7a7b06fddbc4db31180481a69b55d30b2fdc0..84af03eefb6efaf62d498edd5ed9f37763baa371 100644
--- a/src/tests/tools/mock_nce_t_ctrl/Dockerfile
+++ b/src/tests/tools/mock_nce_t_ctrl/Dockerfile
@@ -38,9 +38,9 @@ RUN ldconfig
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get specific Python packages
 RUN mkdir -p /var/teraflow/
diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py
index ea2e7f748ee154e6cee02a7fee6b127e1333d2ce..d2c2b5c2f37ec115fba9382cd988d73a7c63384f 100644
--- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py
+++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py
@@ -28,7 +28,7 @@ class CallbackOsuTunnel(_Callback):
         pattern += r'/tunnel=(?P[^/]+)'
         super().__init__(pattern)
 
-    def execute_data(
+    def execute_data_update(
         self, match : re.Match, path : str, old_data : Optional[Dict],
         new_data : Optional[Dict]
     ) -> bool:
@@ -44,7 +44,7 @@ class CallbackEthTService(_Callback):
         pattern += r'/etht-svc-instances=(?P[^/]+)'
         super().__init__(pattern)
 
-    def execute_data(
+    def execute_data_update(
         self, match : re.Match, path : str, old_data : Optional[Dict],
         new_data : Optional[Dict]
     ) -> bool:
diff --git a/src/tests/tools/mock_osm_nbi/Dockerfile b/src/tests/tools/mock_osm_nbi/Dockerfile
index 57d0971660c07aa50b2f0d0be6008bef93f8e2a8..4264ab46d52ead0aa7e6e8fba7e91281bf685feb 100644
--- a/src/tests/tools/mock_osm_nbi/Dockerfile
+++ b/src/tests/tools/mock_osm_nbi/Dockerfile
@@ -18,9 +18,9 @@ FROM python:3.10.16-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get Python dependencies
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, and get requirements
 RUN mkdir -p /var/mock_osm_nbi
diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile b/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile
index c041b880689b6c92ed1ce60d9d9570a7d4238c83..5fdfd99a6e886b8290f0d2344170de3f7f052362 100644
--- a/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile
+++ b/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile
@@ -28,9 +28,9 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/tests/tools/simap_server/Dockerfile b/src/tests/tools/simap_server/Dockerfile
index f47de61a8ce25c6f0b530da9e73df661a70bcb68..c6bb56f431f40feefd4e49f0865fa0f92d38c2be 100644
--- a/src/tests/tools/simap_server/Dockerfile
+++ b/src/tests/tools/simap_server/Dockerfile
@@ -38,9 +38,9 @@ RUN ldconfig
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Create component sub-folders, get specific Python packages
 RUN mkdir -p /var/teraflow/simap_server/
diff --git a/src/tests/tools/traffic_changer/Dockerfile b/src/tests/tools/traffic_changer/Dockerfile
index 9b590eb5e654e286cd37a9b98af0b45b2a4b5b38..268a06684be392f9ff3653fab6fc62ebd434aff9 100644
--- a/src/tests/tools/traffic_changer/Dockerfile
+++ b/src/tests/tools/traffic_changer/Dockerfile
@@ -24,9 +24,9 @@ FROM python:3.9-slim
 ENV PYTHONUNBUFFERED=0
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get specific Python packages
 RUN mkdir -p /var/teraflow/
diff --git a/src/tests/tools/traffic_changer/templates/affect_form.html b/src/tests/tools/traffic_changer/templates/affect_form.html
index cfdb0296d637d357e3baea5101c9e0ea241cdbab..204d6ebb2d35551323a7af954f775b1e90a02218 100644
--- a/src/tests/tools/traffic_changer/templates/affect_form.html
+++ b/src/tests/tools/traffic_changer/templates/affect_form.html
@@ -1,4 +1,20 @@
 
+
+
 
   
     
diff --git a/src/vnt_manager/Dockerfile b/src/vnt_manager/Dockerfile
index 13368dc9f62c0b7b8bafb0af7f171830da348681..4d85495b7332bbb73c99d83b6a871b1bc160ff4b 100644
--- a/src/vnt_manager/Dockerfile
+++ b/src/vnt_manager/Dockerfile
@@ -42,9 +42,9 @@ RUN python3 -m venv ${VIRTUAL_ENV}
 ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/webui/Dockerfile b/src/webui/Dockerfile
index 167280d6890613bd623053e9699ec7ea4a225554..a386c46a162807f41f495181189aee201afcf971 100644
--- a/src/webui/Dockerfile
+++ b/src/webui/Dockerfile
@@ -44,9 +44,9 @@ RUN python3 -m venv ${VIRTUAL_ENV}
 ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip
-RUN python3 -m pip install --upgrade setuptools wheel
-RUN python3 -m pip install --upgrade pip-tools
+RUN python3 -m pip install --upgrade 'pip==25.2'
+RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1'
+RUN python3 -m pip install --upgrade 'pip-tools==7.3.0'
 
 # Get common Python packages
 # Note: this step enables sharing the previous Docker build steps among all the Python components
diff --git a/src/webui/service/device/forms.py b/src/webui/service/device/forms.py
index be6bda21b4653de02f8856684cc208fe51f3e5a7..33465eeca734c422b5ce9110a124cd1b0bcceb2c 100644
--- a/src/webui/service/device/forms.py
+++ b/src/webui/service/device/forms.py
@@ -42,6 +42,8 @@ class AddDeviceForm(FlaskForm):
     device_drivers_morpheus = BooleanField('MORPHEUS')
     device_drivers_ryu = BooleanField('RYU')
     device_drivers_gnmi_nokia_srlinux = BooleanField('GNMI NOKIA SR LINUX')
+    device_drivers_gnmi_nokia_srlinux = BooleanField('OPENROADM')
+    device_drivers_restconf_openconfig = BooleanField('RESTCONF OPENCONFIG')
 
     device_config_address = StringField('connect/address',default='127.0.0.1',validators=[DataRequired(), Length(min=5)])
     device_config_port = StringField('connect/port',default='0',validators=[DataRequired(), Length(min=1)])
diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index f48d5d30069b4835e221623d1143ea3a5ebe5a5e..d2975a75f0949d69545e82fb9e76dd53d7fe160f 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -151,6 +151,10 @@ def add():
             device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_RYU)
         if form.device_drivers_gnmi_nokia_srlinux.data:
             device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX)
+        if form.device_drivers_openroadm.data:
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_OPENROADM)
+        if form.device_drivers_restconf_openconfig.data:
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_RESTCONF_OPENCONFIG)
         device_obj.device_drivers.extend(device_drivers) # pylint: disable=no-member
 
         try:
diff --git a/src/webui/service/static/topology_icons/Acknowledgements.txt b/src/webui/service/static/topology_icons/Acknowledgements.txt
index 6398f34a7c7d6a632c954bd7b9f5bffb690aa83b..2894d2b71791d9776a2aa8ed725a3502a64f1200 100644
--- a/src/webui/service/static/topology_icons/Acknowledgements.txt
+++ b/src/webui/service/static/topology_icons/Acknowledgements.txt
@@ -38,3 +38,6 @@ https://symbols.getvecta.com/stencil_240/16_atm-tag-switch-router.3149d7e933.png
 https://symbols.getvecta.com/stencil_241/46_atm-tag-sw-rtr.776719c0b0.png => emu-ip-sdn-controller.png
 
 https://onfstaging1.opennetworking.org/wp-content/uploads/2020/02/p4-transparent-logo.png => p4-switch.png
+
+https://symbols.getvecta.com/stencil_240/81_firewall.21bd3abec8.png => firewall.png
+https://symbols.getvecta.com/stencil_241/110_firewall.e262f4364e.png => emu-firewall.png
diff --git a/src/webui/service/static/topology_icons/emu-packet-firewall.png b/src/webui/service/static/topology_icons/emu-packet-firewall.png
new file mode 100644
index 0000000000000000000000000000000000000000..cccf0b55cb6e56c2ccf1c85faa0a10868eb83b60
Binary files /dev/null and b/src/webui/service/static/topology_icons/emu-packet-firewall.png differ
diff --git a/src/webui/service/static/topology_icons/packet-firewall.png b/src/webui/service/static/topology_icons/packet-firewall.png
new file mode 100644
index 0000000000000000000000000000000000000000..3816555c89631ce591e189cf7e0e1b021056329c
Binary files /dev/null and b/src/webui/service/static/topology_icons/packet-firewall.png differ
diff --git a/src/webui/service/templates/js/topology.js b/src/webui/service/templates/js/topology.js
index dcbbc51be4fe53f000206401f4c77ef18b53b9c4..d1266909193c2286a21f77454e3f9d5f73ddd545 100644
--- a/src/webui/service/templates/js/topology.js
+++ b/src/webui/service/templates/js/topology.js
@@ -31,24 +31,39 @@ const margin = {top: 5, right: 5, bottom: 5, left: 5};
 const icon_width  = 40;
 const icon_height = 40;
 
-width = 1400 - margin.left - margin.right;
-height = 800 - margin.top - margin.bottom;
-
-//function handleZoom(e) {
-//    console.dir(e);
-//    d3.select('svg g').attr('transform', e.transform);
-//}
-//let zoom = d3.zoom().scaleExtent([0.01, 10]).translateExtent([[0, 0], [width, height]]).on('zoom', handleZoom);
-
-// append the svg object to the body of the page
-const svg = d3.select('#topology')
-    .append('svg')
+const topologyContainer = d3.select('#topology');
+const svg = topologyContainer.append('svg');
+const zoomLayer = svg.append('g');
+const graphLayer = zoomLayer.append('g')
+    .attr('transform', `translate(${margin.left}, ${margin.top})`);
+
+let width = 0;
+let height = 0;
+let graphInitialized = false;
+
+function updateCanvasSize() {
+    const bounds = topologyContainer.node().getBoundingClientRect();
+    width = Math.max(bounds.width - margin.left - margin.right, 200);
+    height = Math.max(bounds.height - margin.top - margin.bottom, 200);
+    svg
         .attr('width', width + margin.left + margin.right)
-        .attr('height', height + margin.top + margin.bottom)
-        //.call(zoom)
-    .append('g')
-        .attr('transform', `translate(${margin.left}, ${margin.top})`)
-        ;
+        .attr('height', height + margin.top + margin.bottom);
+}
+updateCanvasSize();
+
+function handleZoom() {
+    zoomLayer.attr('transform', d3.event.transform);
+}
+
+const zoom = d3.zoom()
+    .scaleExtent([0.2, 8])
+    .on('zoom', handleZoom);
+
+svg.call(zoom);
+
+const ZOOM_DURATION_MS = 250;
+const ZOOM_SCALE_STEP = 1.2;
+const PAN_OFFSET = 80;
 
 // svg objects
 var link, node, optical_link, labels;
@@ -67,10 +82,21 @@ forceProperties = {
 
 var simulation = d3.forceSimulation();
 
+function applyDirectionalForces() {
+    simulation
+        .force("center", d3.forceCenter(width * forceProperties.center.x, height * forceProperties.center.y))
+        .force("forceX", d3.forceX()
+            .strength(forceProperties.forceX.strength * forceProperties.forceX.enabled)
+            .x(width * forceProperties.forceX.x))
+        .force("forceY", d3.forceY()
+            .strength(forceProperties.forceY.strength * forceProperties.forceY.enabled)
+            .y(height * forceProperties.forceY.y));
+}
+
 // load the data
 d3.json("{{ url_for('main.topology') }}", function(data) {
     // set the data and properties of link lines and node circles
-    link = svg.append("g").attr("class", "links")//.style('stroke', '#aaa')
+    link = graphLayer.append("g").attr("class", "links")//.style('stroke', '#aaa')
         .selectAll("line")
         .data(data.links)
         .enter()
@@ -86,7 +112,7 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
             return l.name.toLowerCase().includes('mgmt') ? "5,5" : "0";
         });
 
-    optical_link = svg.append("g").attr("class", "links")//.style('stroke', '#aaa')
+    optical_link = graphLayer.append("g").attr("class", "links")//.style('stroke', '#aaa')
         .selectAll("line")
         .data(data.optical_links)
         .enter()
@@ -102,7 +128,7 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
             return l.name.toLowerCase().includes('mgmt') ? "5,5" : "0";
         });
 
-    node = svg.append("g").attr("class", "devices").attr('r', 20).style('fill', '#69b3a2')
+    node = graphLayer.append("g").attr("class", "devices").attr('r', 20).style('fill', '#69b3a2')
         .selectAll("circle")
         .data(data.devices)
         .enter()
@@ -117,7 +143,7 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
     // node tooltip
     //node.append("title").text(function(n) { return n.name; });
     // persistent node labels
-    labels = svg.append("g").attr("class", "labels")
+    labels = graphLayer.append("g").attr("class", "labels")
         .selectAll("text")
         .data(data.devices)
         .enter()
@@ -142,7 +168,7 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
 
     // add forces, associate each with a name, and set their properties
     // Experimental : Optical link part 
-    all_links = data.links.concat(data.optical_links)
+    const all_links = data.links.concat(data.optical_links);
     simulation
         .force("link", d3.forceLink()
             .id(function(d) {return d.id;})
@@ -162,19 +188,13 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
         .force("collide", d3.forceCollide()
             .strength(forceProperties.collide.strength * forceProperties.collide.enabled)
             .radius(forceProperties.collide.radius)
-            .iterations(forceProperties.collide.iterations))
-        .force("center", d3.forceCenter()
-            .x(width * forceProperties.center.x)
-            .y(height * forceProperties.center.y))
-        .force("forceX", d3.forceX()
-            .strength(forceProperties.forceX.strength * forceProperties.forceX.enabled)
-            .x(width * forceProperties.forceX.x))
-        .force("forceY", d3.forceY()
-            .strength(forceProperties.forceY.strength * forceProperties.forceY.enabled)
-            .y(height * forceProperties.forceY.y));
+            .iterations(forceProperties.collide.iterations));
+
+    applyDirectionalForces();
     
     // after each simulation tick, update the display positions
     simulation.on("tick", ticked);
+    graphInitialized = true;
 });
 
 // update the display positions
@@ -221,30 +241,40 @@ function dragended(d) {
 }
 
 // update size-related forces
-d3.select(window).on("resize", function(){
-    width = +svg.node().getBoundingClientRect().width;
-    height = +svg.node().getBoundingClientRect().height;
-    simulation.alpha(1).restart();
-});
+function handleResize() {
+    updateCanvasSize();
+    if (graphInitialized) {
+        applyDirectionalForces();
+        simulation.alpha(0.3).restart();
+    }
+}
 
-///******************** UI ACTIONS *******************/
-//
-//function resetZoom() {
-//    d3.select('svg').transition().call(zoom.scaleTo, 1.0);
-//}
-//function zoomIn()    {
-//    d3.select('svg').transition().call(zoom.scaleBy, 2.0);
-//}
-//function zoomOut()   {
-//    d3.select('svg').transition().call(zoom.scaleBy, 0.5);
-//}
-//
-//function center()    {
-//    d3.select('svg').transition().call(zoom.translateTo, 0.5 * width, 0.5 * height);
-//}
-//function panLeft()   {
-//    d3.select('svg').transition().call(zoom.translateBy, -50, 0);
-//}
-//function panRight()  {
-//    d3.select('svg').transition().call(zoom.translateBy,  50, 0);
-//}
+d3.select(window).on("resize", handleResize);
+
+/******************** UI ACTIONS *******************/
+
+function resetZoom() {
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.transform, d3.zoomIdentity);
+}
+
+function zoomIn() {
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.scaleBy, ZOOM_SCALE_STEP);
+}
+
+function zoomOut() {
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.scaleBy, 1 / ZOOM_SCALE_STEP);
+}
+
+function center() {
+    const centerX = margin.left + width / 2;
+    const centerY = margin.top + height / 2;
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.translateTo, centerX, centerY);
+}
+
+function panLeft() {
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.translateBy, -PAN_OFFSET, 0);
+}
+
+function panRight() {
+    svg.transition().duration(ZOOM_DURATION_MS).call(zoom.translateBy, PAN_OFFSET, 0);
+}
diff --git a/src/webui/service/templates/main/home.html b/src/webui/service/templates/main/home.html
index 1f9cde1ee8ebb9c168f2267eb598b9764a38f6cf..e8516f87b5c49193ada65c80ab5dcaca55d6ab32 100644
--- a/src/webui/service/templates/main/home.html
+++ b/src/webui/service/templates/main/home.html
@@ -17,68 +17,93 @@
 {% extends 'base.html' %}
 
 {% block content %}
-    

ETSI TeraFlowSDN Controller (End-to-End)

+

ETSI TeraFlowSDN Controller

+ - {% for field, message in context_topology_form.errors.items() %} - +{% for field, message in context_topology_form.errors.items() %} + - {% endfor %} +{% endfor %} -
- {{ context_topology_form.hidden_tag() }} -
- Select the desired Context/Topology -
- {{ context_topology_form.context_topology.label(class="col-sm-1 col-form-label") }} -
- {% if context_topology_form.context_topology.errors %} - {{ context_topology_form.context_topology(class="form-select is-invalid") }} -
- {% for error in context_topology_form.context_topology.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ context_topology_form.context_topology(class="form-select") }} - {% endif %} -
-
- {{ context_topology_form.submit(class='btn btn-primary') }} + + {{ context_topology_form.hidden_tag() }} +
+ Select the desired Context/Topology +
+ {{ context_topology_form.context_topology.label(class="col-sm-1 col-form-label") }} +
+ {% if context_topology_form.context_topology.errors %} + {{ context_topology_form.context_topology(class="form-select is-invalid") }} +
+ {% for error in context_topology_form.context_topology.errors %} + {{ error }} + {% endfor %}
+ {% else %} + {{ context_topology_form.context_topology(class="form-select") }} + {% endif %}
-
- +
+ {{ context_topology_form.submit(class='btn btn-primary') }} +
+
+
+ -
- {{ descriptor_form.hidden_tag() }} -
- Upload a JSON descriptors file -
- {{ descriptor_form.descriptors.label(class="col-sm-1 col-form-label") }} -
- {% if descriptor_form.descriptors.errors %} - {{ descriptor_form.descriptors(class="form-control is-invalid") }} -
- {% for error in descriptor_form.descriptors.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ descriptor_form.descriptors(class="form-control") }} - {% endif %} -
-
- {{ descriptor_form.submit(class='btn btn-primary') }} + + {{ descriptor_form.hidden_tag() }} +
+ Upload a JSON descriptors file +
+ {{ descriptor_form.descriptors.label(class="col-sm-1 col-form-label") }} +
+ {% if descriptor_form.descriptors.errors %} + {{ descriptor_form.descriptors(class="form-control is-invalid") }} +
+ {% for error in descriptor_form.descriptors.errors %} + {{ error }} + {% endfor %}
+ {% else %} + {{ descriptor_form.descriptors(class="form-control") }} + {% endif %} +
+
+ {{ descriptor_form.submit(class='btn btn-primary') }}
-
- +
+
+ - -
- + + +
+ -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/src/webui/service/templates/opticalconfig/lightpaths.html b/src/webui/service/templates/opticalconfig/lightpaths.html index dba83ca4361b64b212eafb8a8d9c887bec3de42a..3b934613730d9bdeeb9e2d2d95222805a58ac824 100644 --- a/src/webui/service/templates/opticalconfig/lightpaths.html +++ b/src/webui/service/templates/opticalconfig/lightpaths.html @@ -1,5 +1,5 @@