From f52644079fda1c5f7baddd50e3a02702142ad004 Mon Sep 17 00:00:00 2001 From: "tobias.pobocik" Date: Wed, 15 Nov 2023 18:37:24 +0100 Subject: [PATCH 1/3] Bump to odlparent 13.0.7 versions Adopt: - odlparent-13.0.7 - infrautils-6.0.4 - yangtools-11.0.4 - mdsal-12.0.3 - controller-8.0.3 - aaa-0.18.3 - netconf-6.0.5 - bgpcep-0.20.5 JIRA: LIGHTY-272 Signed-off-by: tobias.pobocik Signed-off-by: Ivan Hrasko --- lighty-core/dependency-versions/pom.xml | 16 ++++++++-------- lighty-core/lighty-binding-parent/pom.xml | 4 ++-- lighty-core/lighty-parent/pom.xml | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lighty-core/dependency-versions/pom.xml b/lighty-core/dependency-versions/pom.xml index 0ee2d2a232..7696338cd9 100644 --- a/lighty-core/dependency-versions/pom.xml +++ b/lighty-core/dependency-versions/pom.xml @@ -25,7 +25,7 @@ org.opendaylight.odlparent odlparent - 13.0.4 + 13.0.7 pom import @@ -34,49 +34,49 @@ org.opendaylight.aaa aaa-artifacts - 0.18.2 + 0.18.3 pom import org.opendaylight.controller controller-artifacts - 8.0.2 + 8.0.3 pom import org.opendaylight.infrautils infrautils-artifacts - 6.0.2 + 6.0.4 pom import org.opendaylight.mdsal mdsal-artifacts - 12.0.2 + 12.0.3 pom import org.opendaylight.netconf netconf-artifacts - 6.0.4 + 6.0.5 pom import org.opendaylight.yangtools yangtools-artifacts - 11.0.2 + 11.0.4 pom import org.opendaylight.bgpcep bgpcep-artifacts - 0.20.4 + 0.20.5 pom import diff --git a/lighty-core/lighty-binding-parent/pom.xml b/lighty-core/lighty-binding-parent/pom.xml index 77c1609938..ea944619bc 100644 --- a/lighty-core/lighty-binding-parent/pom.xml +++ b/lighty-core/lighty-binding-parent/pom.xml @@ -49,12 +49,12 @@ org.opendaylight.yangtools yang-maven-plugin - 11.0.2 + 11.0.4 org.opendaylight.mdsal mdsal-binding-java-api-generator - 12.0.2 + 12.0.3 diff --git a/lighty-core/lighty-parent/pom.xml b/lighty-core/lighty-parent/pom.xml index 52e6152219..518456e89e 100644 --- a/lighty-core/lighty-parent/pom.xml +++ b/lighty-core/lighty-parent/pom.xml @@ -203,7 +203,7 @@ org.opendaylight.odlparent checkstyle - 13.0.4 + 13.0.7 @@ -220,7 +220,7 @@ org.opendaylight.odlparent spotbugs - 13.0.4 + 13.0.7 From f16c9fae102e090b212e16b55ea927f19540204c Mon Sep 17 00:00:00 2001 From: "tobias.pobocik" Date: Wed, 15 Nov 2023 18:38:15 +0100 Subject: [PATCH 2/3] Adopt newer revision of odl-netconf-device Changes from: https://github.com/opendaylight/netconf/commit/80a40bb1ffeea6289628618a2c145e79e77088ea#diff-66ffe71b2608193263cdcf5b4baf22a9166ee7ed93161637caffef6a3fba7f37R12 JIRA: LIGHTY-272 Signed-off-by: tobias.pobocik --- .../controller/springboot/rest/NetconfDeviceRestService.java | 2 +- .../controller/springboot/rest/dto/NetconfDeviceResponse.java | 2 +- .../modules/southbound/netconf/tests/TopologyPluginsTest.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/NetconfDeviceRestService.java b/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/NetconfDeviceRestService.java index 0642acba12..0eec15e87d 100644 --- a/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/NetconfDeviceRestService.java +++ b/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/NetconfDeviceRestService.java @@ -30,7 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.credentials.credentials.LoginPasswordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231024.credentials.credentials.LoginPasswordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; diff --git a/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/dto/NetconfDeviceResponse.java b/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/dto/NetconfDeviceResponse.java index e72dd20840..38c20005bd 100644 --- a/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/dto/NetconfDeviceResponse.java +++ b/lighty-examples/lighty-controller-springboot-netconf/src/main/java/io/lighty/core/controller/springboot/rest/dto/NetconfDeviceResponse.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.ConnectionOper.ConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231024.ConnectionOper.ConnectionStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; diff --git a/lighty-modules/integration-tests/src/test/java/io/lighty/modules/southbound/netconf/tests/TopologyPluginsTest.java b/lighty-modules/integration-tests/src/test/java/io/lighty/modules/southbound/netconf/tests/TopologyPluginsTest.java index 9386aa4a9c..0c4be06583 100644 --- a/lighty-modules/integration-tests/src/test/java/io/lighty/modules/southbound/netconf/tests/TopologyPluginsTest.java +++ b/lighty-modules/integration-tests/src/test/java/io/lighty/modules/southbound/netconf/tests/TopologyPluginsTest.java @@ -38,8 +38,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.credentials.Credentials; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev230430.credentials.credentials.LoginPasswordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231024.credentials.Credentials; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231024.credentials.credentials.LoginPasswordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; From becee9e12957b54db1ee90439bd9bd30924e8bd8 Mon Sep 17 00:00:00 2001 From: Ivan Hrasko Date: Fri, 24 Nov 2023 14:37:57 +0100 Subject: [PATCH 3/3] gnmi: ensure three-phase commit protocol Previously, only two phases of the commit protocol were utilized, leading to lack of data validation before committing it. This oversight resulted in compromised functionality of the GNMI device simulator, as undesired data was sent. This commit addresses the issue by implementing the complete three-phase commit protocol, as well as fixing the existing invalid data. JIRA: LIGHTY-272 Signed-off-by: Ivan Hrasko Signed-off-by: tobias.pobocik --- .../lighty-rcgnmi-app/download_yangs.sh | 1 + .../simulator/example_config.json | 4 +- .../simulator/initialConfigJsonData.json | 76 +++++++++++++++++++ ...sonData.json => initialStateJsonData.json} | 0 .../tests-lighty-rcgnmi-app.sh | 5 -- .../README.md | 2 +- .../simulator/initialConfigJsonData.json | 76 +++++++++++++++++++ ...sonData.json => initialStateJsonData.json} | 0 .../simulator/simulator_config.json | 4 +- .../simulatordevice/yang/YangDataService.java | 1 + 10 files changed, 159 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/lighty-rcgnmi-app/simulator/initialConfigJsonData.json rename .github/workflows/lighty-rcgnmi-app/simulator/{initialJsonData.json => initialStateJsonData.json} (100%) create mode 100644 lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialConfigJsonData.json rename lighty-examples/lighty-gnmi-community-restconf-app/simulator/{initialJsonData.json => initialStateJsonData.json} (100%) diff --git a/.github/workflows/lighty-rcgnmi-app/download_yangs.sh b/.github/workflows/lighty-rcgnmi-app/download_yangs.sh index f7b8dbdd75..2b8ba90056 100755 --- a/.github/workflows/lighty-rcgnmi-app/download_yangs.sh +++ b/.github/workflows/lighty-rcgnmi-app/download_yangs.sh @@ -23,3 +23,4 @@ wget https://raw.githubusercontent.com/openconfig/public/ed650bd969afc2eb5f66d60 wget https://raw.githubusercontent.com/openconfig/public/ed650bd969afc2eb5f66d60b86b62ffa6fd5fb8e/release/models/system/openconfig-system-terminal.yang -P yangs wget https://raw.githubusercontent.com/openconfig/public/ed650bd969afc2eb5f66d60b86b62ffa6fd5fb8e/release/models/types/openconfig-types.yang -P yangs wget https://raw.githubusercontent.com/openconfig/public/ed650bd969afc2eb5f66d60b86b62ffa6fd5fb8e/release/models/types/openconfig-yang-types.yang -P yangs +wget https://raw.githubusercontent.com/openconfig/public/f3349778e3cb3b0987f3ec18acea329ea4bf30e6/release/models/interfaces/openconfig-if-types.yang -P yangs diff --git a/.github/workflows/lighty-rcgnmi-app/simulator/example_config.json b/.github/workflows/lighty-rcgnmi-app/simulator/example_config.json index 25b614f28a..26dcb07e43 100644 --- a/.github/workflows/lighty-rcgnmi-app/simulator/example_config.json +++ b/.github/workflows/lighty-rcgnmi-app/simulator/example_config.json @@ -2,8 +2,8 @@ "gnmi_simulator":{ "targetAddress": "0.0.0.0", "targetPort": 3333, - "initialStateDataPath": "./simulator/initialJsonData.json", - "initialConfigDataPath": "./simulator/initialJsonData.json", + "initialStateDataPath": "./simulator/initialStateJsonData.json", + "initialConfigDataPath": "./simulator/initialConfigJsonData.json", "certPath": "./simulator/certs/server.crt", "certKeyPath": "./simulator/certs/server.key", "yangsPath": "./yangs", diff --git a/.github/workflows/lighty-rcgnmi-app/simulator/initialConfigJsonData.json b/.github/workflows/lighty-rcgnmi-app/simulator/initialConfigJsonData.json new file mode 100644 index 0000000000..a6b1eefb9c --- /dev/null +++ b/.github/workflows/lighty-rcgnmi-app/simulator/initialConfigJsonData.json @@ -0,0 +1,76 @@ +{ + "openconfig-interfaces:interfaces": { + "interface": [ + { + "name": "admin", + "config": { + "name": "admin", + "type": "openconfig-if-types:IF_ETHERNET" + } + } + ] + }, + "openconfig-system:system": { + "aaa": { + "authentication": { + "admin-user": { + "config": { + "admin-password": "password" + } + }, + "config": { + "authentication-method": [ + "openconfig-aaa-types:LOCAL" + ] + } + } + }, + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "zz-tri-dev01", + "domain-name": "foo.bar.com", + "login-banner": "This device is for authorized use only", + "motd-banner": "Welcome to Open vSwitch" + }, + "openconfig-openflow:openflow": { + "agent": { + "config": { + "backoff-interval": 5, + "datapath-id": "10:16:3e:00:00:00:00:00", + "failure-mode": "SECURE", + "inactivity-probe": 10, + "max-backoff": 10 + } + }, + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "connections": { + "connection": [ + { + "aux-id": 0, + "config": { + "address": "192.0.2.10", + "aux-id": 0, + "port": 6633, + "priority": 1, + "source-interface": "admin", + "transport": "TLS" + } + } + ] + }, + "name": "main" + } + ] + } + } + } +} \ No newline at end of file diff --git a/.github/workflows/lighty-rcgnmi-app/simulator/initialJsonData.json b/.github/workflows/lighty-rcgnmi-app/simulator/initialStateJsonData.json similarity index 100% rename from .github/workflows/lighty-rcgnmi-app/simulator/initialJsonData.json rename to .github/workflows/lighty-rcgnmi-app/simulator/initialStateJsonData.json diff --git a/.github/workflows/lighty-rcgnmi-app/tests-lighty-rcgnmi-app.sh b/.github/workflows/lighty-rcgnmi-app/tests-lighty-rcgnmi-app.sh index b24f2511c7..ade01ef226 100755 --- a/.github/workflows/lighty-rcgnmi-app/tests-lighty-rcgnmi-app.sh +++ b/.github/workflows/lighty-rcgnmi-app/tests-lighty-rcgnmi-app.sh @@ -153,11 +153,6 @@ assertHttpStatusCode $(curl -X PUT -o /dev/null -s -w "%{http_code} PUT %{url_ef "openconfig-aaa-types:TACACS_ALL" ] }, - "state": { - "authentication-method": [ - "openconfig-aaa-types:RADIUS_ALL" - ] - }, "admin-user": { "config": { "admin-password": "password" diff --git a/lighty-examples/lighty-gnmi-community-restconf-app/README.md b/lighty-examples/lighty-gnmi-community-restconf-app/README.md index fe2f3ad108..78874fa296 100644 --- a/lighty-examples/lighty-gnmi-community-restconf-app/README.md +++ b/lighty-examples/lighty-gnmi-community-restconf-app/README.md @@ -6,7 +6,7 @@ are performed on this device. The application, lighty.io gNMI/RESTCONF is pre-prepared with [Openconfig YANG models](yangs). These models are used by both gNMI application and gNMI device simulator. Device has already preconfigured state/config -data specified in [initialJsonData.json](simulator/initialJsonData.json) JSON file. +data specified in [initialStateJsonData.json](simulator/initialStateJsonData.json) JSON file. To communicate with gNMI device it is required to use TLS communication with certificates and username and password authorization. diff --git a/lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialConfigJsonData.json b/lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialConfigJsonData.json new file mode 100644 index 0000000000..83043b1365 --- /dev/null +++ b/lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialConfigJsonData.json @@ -0,0 +1,76 @@ +{ + "openconfig-interfaces:interfaces": { + "interface": [ + { + "name": "admin", + "config": { + "name": "admin", + "type": "openconfig-if-types:IF_ETHERNET" + } + } + ] + }, + "openconfig-system:system": { + "aaa": { + "authentication": { + "admin-user": { + "config": { + "admin-password": "password" + } + }, + "config": { + "authentication-method": [ + "openconfig-aaa-types:LOCAL" + ] + } + } + }, + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "zz-tri-dev01", + "domain-name": "foo.bar.com", + "login-banner": "This device is for authorized use only", + "motd-banner": "Welcome to Open vSwitch" + }, + "openconfig-openflow:openflow": { + "agent": { + "config": { + "backoff-interval": 5, + "datapath-id": "00:16:3e:00:00:00:00:00", + "failure-mode": "SECURE", + "inactivity-probe": 10, + "max-backoff": 10 + } + }, + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "connections": { + "connection": [ + { + "aux-id": 0, + "config": { + "address": "192.0.2.10", + "aux-id": 0, + "port": 6633, + "priority": 1, + "source-interface": "admin", + "transport": "TLS" + } + } + ] + }, + "name": "main" + } + ] + } + } + } +} \ No newline at end of file diff --git a/lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialJsonData.json b/lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialStateJsonData.json similarity index 100% rename from lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialJsonData.json rename to lighty-examples/lighty-gnmi-community-restconf-app/simulator/initialStateJsonData.json diff --git a/lighty-examples/lighty-gnmi-community-restconf-app/simulator/simulator_config.json b/lighty-examples/lighty-gnmi-community-restconf-app/simulator/simulator_config.json index 7949f18a10..9ebcd0d2c8 100644 --- a/lighty-examples/lighty-gnmi-community-restconf-app/simulator/simulator_config.json +++ b/lighty-examples/lighty-gnmi-community-restconf-app/simulator/simulator_config.json @@ -4,8 +4,8 @@ "targetPort": 10161, "certPath": "certificates/server.crt", "certKeyPath": "certificates/server-pkcs8.key", - "initialConfigDataPath": "simulator/initialJsonData.json", - "initialStateDataPath": "simulator/initialJsonData.json", + "initialConfigDataPath": "simulator/initialConfigJsonData.json", + "initialStateDataPath": "simulator/initialStateJsonData.json", "yangsPath": "../../lighty-models/openconfig-models/src/main/yang", "username": "admin", "password": "admin", diff --git a/lighty-modules/lighty-gnmi/lighty-gnmi-device-simulator/src/main/java/io/lighty/modules/gnmi/simulatordevice/yang/YangDataService.java b/lighty-modules/lighty-gnmi/lighty-gnmi-device-simulator/src/main/java/io/lighty/modules/gnmi/simulatordevice/yang/YangDataService.java index 0eeb485128..ad43bb6d4a 100644 --- a/lighty-modules/lighty-gnmi/lighty-gnmi-device-simulator/src/main/java/io/lighty/modules/gnmi/simulatordevice/yang/YangDataService.java +++ b/lighty-modules/lighty-gnmi/lighty-gnmi-device-simulator/src/main/java/io/lighty/modules/gnmi/simulatordevice/yang/YangDataService.java @@ -84,6 +84,7 @@ private void modifyDataByPath(final DatastoreType datastoreType, final YangInsta tx.merge(path, node); } final DOMStoreThreePhaseCommitCohort tpcc = tx.ready(); + tpcc.canCommit().get(); tpcc.preCommit().get(); tpcc.commit().get(); } catch (final ExecutionException exception) {