Loading .dockerignore 0 → 100644 +16 −0 Original line number Diff line number Diff line # Avoid including these folders when building the components .git/ .gitlab/ .vscode/ coverage/ data/ deploy/ ecoc22/ hackfest/ manifests/ nfvsdn22/ oeccpsc22/ ofc22/ ofc23/ scripts/ tmp/ .gitlab-ci.yml +1 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ include: - local: '/src/dbscanserving/.gitlab-ci.yml' - local: '/src/opticalattackmitigator/.gitlab-ci.yml' - local: '/src/opticalattackdetector/.gitlab-ci.yml' - local: '/src/opticalattackmanager/.gitlab-ci.yml' # - local: '/src/opticalattackmanager/.gitlab-ci.yml' - local: '/src/automation/.gitlab-ci.yml' - local: '/src/policy/.gitlab-ci.yml' #- local: '/src/webui/.gitlab-ci.yml' Loading hackfest/commands.txt +80 −13 Original line number Diff line number Diff line Loading @@ -115,6 +115,9 @@ python3 client_connection.py cd ~/tfs-ctrl/hackfest/tapi/server pip install -r requirements.txt cd ~/tfs-ctrl/hackfest/tapi/tapi_app ./requirements.sh # (done) Build & Implement methods for the TAPI v2.1.3 server: cd ~/tfs-ctrl/hackfest/tapi wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.35/swagger-codegen-cli-3.0.35.jar Loading @@ -134,7 +137,7 @@ cd ~/tfs-ctrl/hackfest/tapi/server python3 -m tapi_server 8080 database/mini-ols-context.json # Run TAPI client using cURL (In a new window): $ cd ~/tfs-ctrl/hackfest/tapi/client cd ~/tfs-ctrl/hackfest/tapi/client # Interrogate Context and SIPs: curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/ Loading Loading @@ -163,6 +166,7 @@ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restcon ## EXERCISE # Exercise: retrieve and draw the topology # solution in folder tapi_app Loading @@ -175,24 +179,32 @@ python3 tapi_app.py # Deploy TeraFlowSDN ################################################################################ # Check status of Kubernetes ## GUIDED # Check status of MicroK8s microk8s.status --wait-ready # If not running, start MicroK8s microk8s.start # Periodically inspect status of MicroK8s until all addons are enabled watch -n 1 microk8s.status --wait-ready # Check all resources in Kubernetes microk8s.kubectl get all --all-namespaces watch -n 1 kubectl get all --all-namespaces # Deploy TeraFlowSDN cd ~/tfs-ctrl source my_deploy.sh ./deploy.sh ./deploy/all.sh # Show status of your deployment (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh ./show_deploy.sh ./deploy/show.sh # Show logs of a specific component (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh scripts/show_logs_device.sh ./scripts/show_logs_device.sh Loading @@ -202,6 +214,8 @@ scripts/show_logs_device.sh # (done) Build a Netconf server supporting basic OpenConfig data model ## GUIDED # Start the Netconf/OpenConfig server cd ~/tfs-ctrl/hackfest/netconf-oc python3 server_openconfig.py 8300 Loading @@ -212,7 +226,8 @@ python3 server_openconfig.py 8300 # Service requests ################################################################################ ## L3VPN service from JSON descriptors ## EXERCISE # Exercise: L3VPN service from JSON descriptors # (in a new terminal) Start OLS TAPI server: cd ~/tfs-ctrl/hackfest/tapi/server Loading @@ -236,9 +251,8 @@ python3 server_openconfig.py 8304 ############ # Mock OSM ############ ## EXERCISE # Exercise: L2VPN slice from Mock OSM $ cd ~/tfs-ctrl/hackfest/ $ python -m mock_osm Loading @@ -262,16 +276,69 @@ Service b8c99e2c-39d8-424d-9833-554634269555 deleted (mock-osm) exit Bye! ############ # gRPC ############ ## GUIDED # Generate connection messages from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto # Create a connection message and save to a file cd ~/tfs-ctrl/hackfest/grpc/connection python3 create.py connection.txt # List a connection from a file cd ~/tfs-ctrl/hackfest/grpc/connection python3 list.py connection.txt # Build ConnectionService from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto # Start ConnectionService server cd ~/tfs-ctrl/hackfest/grpc/connectionService python3 connectionService_server.py # Start ConnectionService client (in another terminal) cd ~/tfs-ctrl/hackfest/grpc/connectionService python3 connectionService_client.py ## EXERCISE # Exercise: add streams # Build ConnectionServiceWithNotif from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto ## Solution: # Run ConnectionServiceWithNotif server cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif python3 connectionServiceWithNotif_server.py # Run ConnectionServiceWithNotif client (in another terminal) $ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif $ python3 connectionServiceWithNotif_client.py ############ # gNMI ############ ## GUIDED ## Download and install the latest release $ sudo bash -c "$(curl -sL https://get.containerlab.dev)“ $ sudo bash -c "$(curl -sL https://get.containerlab.dev)" ## Deploy proposed two SR node scenario $ cd tfs-ctrl/hackfest/gnmi $ sudo containerlab deploy -t srlinux.clab.yml $ cd ~/tfs-ctrl/hackfest/gnmi $ sudo containerlab deploy --topo srlinux.clab.yml ## Access SR Bash $ docker exec -it clab-srlinux-srl1 bash Loading hackfest/containerlab/.gitignore 0 → 100644 +2 −0 Original line number Diff line number Diff line clab-tfs-scenario .tfs-scenario.clab.yml.bak hackfest/containerlab/commands.txt 0 → 100644 +99 −0 Original line number Diff line number Diff line ############ # ContainerLab ############ Refs: https://documentation.nokia.com/srlinux/22-6/SR_Linux_Book_Files/SysMgmt_Guide/data-models.html#openconfig-ov https://documentation.nokia.com/srlinux/SR_Linux_HTML_R21-11/SysMgmt_Guide/gnmi-interface.html#ai9ersv4qe https://github.com/openconfig/kne/blob/v0.1.9/examples/nokia/srlinux-services/srl-openconfig.cfg.json https://containerlab.dev/manual/kinds/srl/#default-node-configuration https://learn.srlinux.dev/tutorials/infrastructure/kne/srl-with-oc-services/ https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md https://gnmic.kmrd.dev/cmd/get/ IMPORTANT: for Nokia SR Linux, use kind "srl" and type "ixr6" ## Download and install the latest release $ sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.42.0 ## Deploy proposed two SR node scenario $ cd ~/tfs-ctrl/hackfest/containerlab $ sudo containerlab deploy --topo tfs-scenario.clab.yml ## Access SR Bash $ docker exec -it clab-tfs-scenario-srl1 bash ## Access SR CLI $ docker exec -it clab-tfs-scenario-srl1 sr_cli ## Destroy scenario $ sudo containerlab destroy --topo tfs-scenario.clab.yml ## Enable OpenConfig data models and set as default: $ docker exec -it clab-tfs-scenario-srl1 sr_cli # enter candidate # system management openconfig admin-state enable # system gnmi-server network-instance mgmt yang-models openconfig # commit stay # quit # Configure containerlab clients docker exec -it clab-tfs-scenario-client1 bash ip address add 172.16.1.10/24 dev eth1 ip route add 172.16.2.0/24 via 172.16.1.1 ping 172.16.2.1 or 172.16.2.10 docker exec -it clab-tfs-scenario-client2 bash ip address add 172.16.2.10/24 dev eth1 ip route add 172.16.1.0/24 via 172.16.2.1 ping 172.16.1.1 or 172.16.1.10 ## Install gNMIc $ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)" ## gNMI Capabilities request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify capabilities ## gNMI Get request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /interface[name=mgmt0] ## gNMI Set request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --update-path /system/name/host-name --update-value slr11 (we check the changed value) $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name ## Subscribe request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf subscribe --path /interface[name=mgmt0]/statistics (In another terminal, you can generate traffic) $ssh admin@clab-srlinux-srl1 # Check configurations done: gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl1-nis.json gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl1-ifs.json gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl2-nis.json gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl2-ifs.json # Delete elements: gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]' gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]' # Run gNMI Driver in standalone mode (advanced) PYTHONPATH=./src python -m src.device.tests.test_gnmi Loading
.dockerignore 0 → 100644 +16 −0 Original line number Diff line number Diff line # Avoid including these folders when building the components .git/ .gitlab/ .vscode/ coverage/ data/ deploy/ ecoc22/ hackfest/ manifests/ nfvsdn22/ oeccpsc22/ ofc22/ ofc23/ scripts/ tmp/
.gitlab-ci.yml +1 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ include: - local: '/src/dbscanserving/.gitlab-ci.yml' - local: '/src/opticalattackmitigator/.gitlab-ci.yml' - local: '/src/opticalattackdetector/.gitlab-ci.yml' - local: '/src/opticalattackmanager/.gitlab-ci.yml' # - local: '/src/opticalattackmanager/.gitlab-ci.yml' - local: '/src/automation/.gitlab-ci.yml' - local: '/src/policy/.gitlab-ci.yml' #- local: '/src/webui/.gitlab-ci.yml' Loading
hackfest/commands.txt +80 −13 Original line number Diff line number Diff line Loading @@ -115,6 +115,9 @@ python3 client_connection.py cd ~/tfs-ctrl/hackfest/tapi/server pip install -r requirements.txt cd ~/tfs-ctrl/hackfest/tapi/tapi_app ./requirements.sh # (done) Build & Implement methods for the TAPI v2.1.3 server: cd ~/tfs-ctrl/hackfest/tapi wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.35/swagger-codegen-cli-3.0.35.jar Loading @@ -134,7 +137,7 @@ cd ~/tfs-ctrl/hackfest/tapi/server python3 -m tapi_server 8080 database/mini-ols-context.json # Run TAPI client using cURL (In a new window): $ cd ~/tfs-ctrl/hackfest/tapi/client cd ~/tfs-ctrl/hackfest/tapi/client # Interrogate Context and SIPs: curl -X GET -H "Content-Type: application/json" http://127.0.0.1:8080/restconf/data/tapi-common:context/ Loading Loading @@ -163,6 +166,7 @@ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restcon ## EXERCISE # Exercise: retrieve and draw the topology # solution in folder tapi_app Loading @@ -175,24 +179,32 @@ python3 tapi_app.py # Deploy TeraFlowSDN ################################################################################ # Check status of Kubernetes ## GUIDED # Check status of MicroK8s microk8s.status --wait-ready # If not running, start MicroK8s microk8s.start # Periodically inspect status of MicroK8s until all addons are enabled watch -n 1 microk8s.status --wait-ready # Check all resources in Kubernetes microk8s.kubectl get all --all-namespaces watch -n 1 kubectl get all --all-namespaces # Deploy TeraFlowSDN cd ~/tfs-ctrl source my_deploy.sh ./deploy.sh ./deploy/all.sh # Show status of your deployment (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh ./show_deploy.sh ./deploy/show.sh # Show logs of a specific component (if new terminal) cd ~/tfs-ctrl && source my_deploy.sh scripts/show_logs_device.sh ./scripts/show_logs_device.sh Loading @@ -202,6 +214,8 @@ scripts/show_logs_device.sh # (done) Build a Netconf server supporting basic OpenConfig data model ## GUIDED # Start the Netconf/OpenConfig server cd ~/tfs-ctrl/hackfest/netconf-oc python3 server_openconfig.py 8300 Loading @@ -212,7 +226,8 @@ python3 server_openconfig.py 8300 # Service requests ################################################################################ ## L3VPN service from JSON descriptors ## EXERCISE # Exercise: L3VPN service from JSON descriptors # (in a new terminal) Start OLS TAPI server: cd ~/tfs-ctrl/hackfest/tapi/server Loading @@ -236,9 +251,8 @@ python3 server_openconfig.py 8304 ############ # Mock OSM ############ ## EXERCISE # Exercise: L2VPN slice from Mock OSM $ cd ~/tfs-ctrl/hackfest/ $ python -m mock_osm Loading @@ -262,16 +276,69 @@ Service b8c99e2c-39d8-424d-9833-554634269555 deleted (mock-osm) exit Bye! ############ # gRPC ############ ## GUIDED # Generate connection messages from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto # Create a connection message and save to a file cd ~/tfs-ctrl/hackfest/grpc/connection python3 create.py connection.txt # List a connection from a file cd ~/tfs-ctrl/hackfest/grpc/connection python3 list.py connection.txt # Build ConnectionService from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto # Start ConnectionService server cd ~/tfs-ctrl/hackfest/grpc/connectionService python3 connectionService_server.py # Start ConnectionService client (in another terminal) cd ~/tfs-ctrl/hackfest/grpc/connectionService python3 connectionService_client.py ## EXERCISE # Exercise: add streams # Build ConnectionServiceWithNotif from .proto cd ~/tfs-ctrl/hackfest/grpc python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto ## Solution: # Run ConnectionServiceWithNotif server cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif python3 connectionServiceWithNotif_server.py # Run ConnectionServiceWithNotif client (in another terminal) $ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif $ python3 connectionServiceWithNotif_client.py ############ # gNMI ############ ## GUIDED ## Download and install the latest release $ sudo bash -c "$(curl -sL https://get.containerlab.dev)“ $ sudo bash -c "$(curl -sL https://get.containerlab.dev)" ## Deploy proposed two SR node scenario $ cd tfs-ctrl/hackfest/gnmi $ sudo containerlab deploy -t srlinux.clab.yml $ cd ~/tfs-ctrl/hackfest/gnmi $ sudo containerlab deploy --topo srlinux.clab.yml ## Access SR Bash $ docker exec -it clab-srlinux-srl1 bash Loading
hackfest/containerlab/.gitignore 0 → 100644 +2 −0 Original line number Diff line number Diff line clab-tfs-scenario .tfs-scenario.clab.yml.bak
hackfest/containerlab/commands.txt 0 → 100644 +99 −0 Original line number Diff line number Diff line ############ # ContainerLab ############ Refs: https://documentation.nokia.com/srlinux/22-6/SR_Linux_Book_Files/SysMgmt_Guide/data-models.html#openconfig-ov https://documentation.nokia.com/srlinux/SR_Linux_HTML_R21-11/SysMgmt_Guide/gnmi-interface.html#ai9ersv4qe https://github.com/openconfig/kne/blob/v0.1.9/examples/nokia/srlinux-services/srl-openconfig.cfg.json https://containerlab.dev/manual/kinds/srl/#default-node-configuration https://learn.srlinux.dev/tutorials/infrastructure/kne/srl-with-oc-services/ https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md https://gnmic.kmrd.dev/cmd/get/ IMPORTANT: for Nokia SR Linux, use kind "srl" and type "ixr6" ## Download and install the latest release $ sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.42.0 ## Deploy proposed two SR node scenario $ cd ~/tfs-ctrl/hackfest/containerlab $ sudo containerlab deploy --topo tfs-scenario.clab.yml ## Access SR Bash $ docker exec -it clab-tfs-scenario-srl1 bash ## Access SR CLI $ docker exec -it clab-tfs-scenario-srl1 sr_cli ## Destroy scenario $ sudo containerlab destroy --topo tfs-scenario.clab.yml ## Enable OpenConfig data models and set as default: $ docker exec -it clab-tfs-scenario-srl1 sr_cli # enter candidate # system management openconfig admin-state enable # system gnmi-server network-instance mgmt yang-models openconfig # commit stay # quit # Configure containerlab clients docker exec -it clab-tfs-scenario-client1 bash ip address add 172.16.1.10/24 dev eth1 ip route add 172.16.2.0/24 via 172.16.1.1 ping 172.16.2.1 or 172.16.2.10 docker exec -it clab-tfs-scenario-client2 bash ip address add 172.16.2.10/24 dev eth1 ip route add 172.16.1.0/24 via 172.16.2.1 ping 172.16.1.1 or 172.16.1.10 ## Install gNMIc $ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)" ## gNMI Capabilities request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify capabilities ## gNMI Get request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /interface[name=mgmt0] ## gNMI Set request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --update-path /system/name/host-name --update-value slr11 (we check the changed value) $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path /system/name/host-name ## Subscribe request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify -e json_ietf subscribe --path /interface[name=mgmt0]/statistics (In another terminal, you can generate traffic) $ssh admin@clab-srlinux-srl1 # Check configurations done: gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl1-nis.json gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl1-ifs.json gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/network-instances' > srl2-nis.json gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf get --path '/interfaces' > srl2-ifs.json # Delete elements: gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]' gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.101 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/network-instances/network-instance[name=b19229e8]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]' gnmic -a 172.100.100.102 -u admin -p NokiaSrl1! --skip-verify -e json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]' # Run gNMI Driver in standalone mode (advanced) PYTHONPATH=./src python -m src.device.tests.test_gnmi