From 2ecb6a9310d26bf861ac97a1f4c1d264b50e6ef7 Mon Sep 17 00:00:00 2001 From: Luc Provoost Date: Mon, 23 Nov 2020 18:24:10 +0100 Subject: [PATCH] Jerma documentation rewrite First step in a rewrite of the sampleVNF documentation whcih is now focused on the TST009 testing using PROX and rapid. Change-Id: Id95cd44831ae7db518ccdf1d8da55890197d2fcb Signed-off-by: Luc Provoost --- docs/testing/user/userguide/01-introduction.rst | 31 ++-- docs/testing/user/userguide/02-methodology.rst | 96 +++++----- docs/testing/user/userguide/03-installation.rst | 135 ++++++++++++++ docs/testing/user/userguide/04-installation.rst | 230 ------------------------ docs/testing/user/userguide/images/rapid.png | Bin 0 -> 34588 bytes docs/testing/user/userguide/index.rst | 4 +- 6 files changed, 190 insertions(+), 306 deletions(-) create mode 100644 docs/testing/user/userguide/03-installation.rst delete mode 100644 docs/testing/user/userguide/04-installation.rst create mode 100644 docs/testing/user/userguide/images/rapid.png diff --git a/docs/testing/user/userguide/01-introduction.rst b/docs/testing/user/userguide/01-introduction.rst index 10c0161f..c2d28d04 100755 --- a/docs/testing/user/userguide/01-introduction.rst +++ b/docs/testing/user/userguide/01-introduction.rst @@ -9,30 +9,22 @@ Introduction **Welcome to SampleVNF's documentation !** -.. _Pharos: https://wiki.opnfv.org/pharos +.. _Pharos: https://wiki.opnfv.org/display/pharos .. _SampleVNF: https://wiki.opnfv.org/samplevnf -.. _Technical_Briefs: https://wiki.opnfv.org/display/SAM/Technical+Briefs+of+VNFs SampleVNF_ is an OPNFV Project. -The project's goal is to provides a placeholder for various sample VNF +The project's goal was to provide a placeholder for various sample VNF (Virtual Network Function (:term:`VNF`)) development which includes example reference architecture and optimization methods related to VNF/Network service -for high performance VNFs. This project provides benefits to other OPNFV -projects like Functest, Models, yardstick etc to perform real life -use-case based testing and VNF/ Network Function Virtualization Infrastructure -(:term:`NFVI`) characterization for the same. +for high performance VNFs. +Today, we only maintain PROX and rapid scripts as part of this project +to perform Network Function Virtualization Infrastructure +(:term:`NFVI`) characterization. -The Project's scope to create a repository of sample VNFs to help VNF -benchmarking and NFVI characterization with real world traffic and host a -common development environment for developing the VNF using optimized libraries. -Also, develop a test framework in yardstick to enable VNF/NFVI verification. +*SampleVNF* is used in OPNFV for characterization of NFVI on OPNFV infrastructure. -*SampleVNF* is used in OPNFV for characterization of NFVI/VNF on OPNFV infrastructure -and some of the OPNFV features. - -.. seealso:: Pharos_ for information on OPNFV community labs and this - Technical_Briefs_ for an overview of *SampleVNF* +.. seealso:: Pharos_ for information on OPNFV community labs About This Document @@ -44,12 +36,9 @@ This document consists of the following chapters: project's background and describes the structure of this document. * Chapter :doc:`02-methodology` describes the methodology implemented by the - *SampleVNF* Project for :term:`VNF` and :term:`NFVI` verification. - -* Chapter :doc:`03-architecture` provides information on the software architecture - of *SampleVNF*. + *SampleVNF* Project for :term:`NFVI` verification. -* Chapter :doc:`04-installation` provides instructions to install *SampleVNF*. +* Chapter :doc:`03-installation` provides instructions to install *SampleVNF*. * Chapter :doc:`05-How_to_run_SampleVNFs` provides example on how installing and running *SampleVNF*. diff --git a/docs/testing/user/userguide/02-methodology.rst b/docs/testing/user/userguide/02-methodology.rst index 01cbb276..30efe79f 100644 --- a/docs/testing/user/userguide/02-methodology.rst +++ b/docs/testing/user/userguide/02-methodology.rst @@ -6,81 +6,69 @@ =========== Methodology =========== +.. _NFV-TST009: https://docbox.etsi.org/ISG/NFV/open/Publications_pdf/Specs-Reports/NFV-TST%20009v3.2.1%20-%20GS%20-%20NFVI_Benchmarks.pdf Abstract ======== This chapter describes the methodology/overview of SampleVNF project from -the perspective of a :term:`VNF` and :term:`NFVI` Characterization +the perspective of :term:`NFVI` Characterization Overview ======== -This project provides a placeholder for various sample VNF (Virtual Network Function (:term:`VNF`)) -development which includes example reference architecture and optimization methods -related to VNF/Network service for high performance VNFs. +This project covers the dataplane benchmarking for Network Function Virtualization +Infrastructure (:term:`NFVI`)) using the PROX tool, according to ETSI GS NFV-TST009_. -The sample VNFs are Open Source approximations* of Telco grade :term:`VNF` -using optimized VNF + NFVi Infrastructure libraries, with Performance Characterization of Sample† Traffic Flows. -• * Not a commercial product. Encourage the community to contribute and close the feature gaps. -• † No Vendor/Proprietary Workloads +The test execution and reporting is driven by the Xtesting framework and is fully automated. -ETSI-NFV -======== - -.. _NFV-TST001: http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf -.. _SampleVNFtst: https://wiki.opnfv.org/display/SAM/Technical+Briefs+of+VNFs -.. _Yardstick_NSB: http://artifacts.opnfv.org/yardstick/docs/testing_user_userguide/index.html#document-13-nsb-overview - -SampleVNF Test Infrastructure (NSB (Yardstick_NSB_))in yardstick helps to facilitate -consistent/repeatable methodologies for characterizing & validating the -sample VNFs (:term:`VNF`) through OPEN SOURCE VNF approximations. - -Network Service Benchmarking in yardstick framework follows ETSI GS NFV-TST001_ -to verify/characterize both :term:`NFVI` & :term:`VNF` - -The document ETSI GS NFV-TST001_, "Pre-deployment Testing; Report on Validation -of NFV Environments and Services", recommends methods for pre-deployment -testing of the functional components of an NFV environment. +When executing the tests, traffic will be send between 2 or more PROX VMs and all metrics +will be collected in the Xtesting database. +The placement of the test VMs (in which the PROX tool is running), can be controlled by +Heat stacks, but can also be done through other means. This will be explained in the chapter +covering the PROX instance deployment, and needs to be done prior to the test execution. -The SampleVNF project implements the methodology described in chapter 13 of Yardstick_NSB_, -"Pre-deployment validation of NFV infrastructure". +The PROX tool is a DPDK based application optimized for high throughput packet handling. +As such, we will not measure limitations imposed by the tool, but the capacity of the +NFVI. In the rare case that the PROX tool would impose a limit, a warning will be logged. -The methodology consists in decomposing the typical :term:`VNF` work-load -performance metrics into a number of characteristics/performance vectors, which -each can be represented by distinct test-cases. - -.. seealso:: SampleVNFtst_ for material on alignment ETSI TST001 and SampleVNF. +ETSI-NFV +======== +The document ETSI GS NFV-TST009_, "Specification of Networking Benchmarks and +Measurement Methods for NFVI", specifies vendor-agnostic definitions of performance +metrics and the associated methods of measurement for Benchmarking networks supported +in the NFVI. Throughput, latency, packet loss and delay variation will be measured. +The delay variation is not represented by the Frame Delay Variation (FDV) as defined in +the specification, but by the average latency, the 99 percentile latency, the maximum +latency and the complete latency distribution histogram. Metrics ======= -The metrics, as defined by ETSI GS NFV-TST001, are shown in -:ref:`Table1 `. +The metrics, as reported by the tool, and aligned with the definitions in ETSI GS NFV-TST009_, +are shown in :ref:`Table1 `. .. _table2_1: -**Table 1 - Performance/Speed Metrics** - -+---------+-------------------------------------------------------------------+ -| Category| Performance/Speed | -| | | -+---------+-------------------------------------------------------------------+ -| Network | * Throughput per NFVI node (frames/byte per second) | -| | * Throughput provided to a VM (frames/byte per second) | -| | * Latency per traffic flow | -| | * Latency between VMs | -| | * Latency between NFVI nodes | -| | * Packet delay variation (jitter) between VMs | -| | * Packet delay variation (jitter) between NFVI nodes | -| | * RFC 3511 benchmark | -| | | -+---------+-------------------------------------------------------------------+ +**Table 1 - Network Metrics** + ++-----------------+---------------------------------------------------------------+ +| Measurement | Description | +| | | ++-----------------+---------------------------------------------------------------+ +| Throughput | Maximum number of traffic that can be sent between 2 VM | +| | instances, within the allowed packet loss requirements. | +| | Results are expressed in Mpps and in Gb/s | ++-----------------+---------------------------------------------------------------+ +| Latency | 99 percentile Round trip latency expressed in micro-seconds | +| | Note that you can also specify the n-th percentile | ++-----------------+---------------------------------------------------------------+ +| Delay Variation | Average latency, maximum latency and the latency histogram | ++-----------------+---------------------------------------------------------------+ +| Loss | Packets per seconds that were lost on their round trip between| +| | VMs. Total packet loss numbers are also reported | ++-----------------+---------------------------------------------------------------+ .. note:: The description in this OPNFV document is intended as a reference for users to understand the scope of the SampleVNF Project and the deliverables of the SampleVNF framework. For complete description of the methodology, please refer to the ETSI document. - -.. rubric:: Footnotes -.. [1] To be included in future deliveries. - diff --git a/docs/testing/user/userguide/03-installation.rst b/docs/testing/user/userguide/03-installation.rst new file mode 100644 index 00000000..dc40e8e0 --- /dev/null +++ b/docs/testing/user/userguide/03-installation.rst @@ -0,0 +1,135 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International +.. License. +.. http://creativecommons.org/licenses/by/4.0 +.. (c) OPNFV, Intel Corporation and others. + +SampleVNF Installation +====================== + +Abstract +-------- +The installation procedures described below will result in the deployment of +all SW components needed to run the benchmarking procedures as defined in ETSI +GS NFV-TST009 on top of an NFVI instance that is the subject of this characterization. +Xtesting in combination with the rapid scripts and the PROX tool will be used to achieve this. + +The steps needed to run the benchmarking are: + 1) Identify a machine on which you will install the containers to support the testing + 2) Clone the samplevnf project on that machine + 3) Deploy the testing VMs (hosting PROX tool) (Or containers) + 4) Deploy your own Xtesting toolchain. + 5) Build the test container that will drive the TST009 testing + 6) Publish your container on your local repository + 7) Execute the testing + +In this chapter, we will cover the first 6 installation steps. + +Prerequisites +------------- + +Supported Test setup +^^^^^^^^^^^^^^^^^^^^^ +The device under test (DUT) is an NFVI instance on which we can deploy PROX instances. +A PROX instance is a machine that + * has a management interface that can be reached from the test container + * has one or more data plane interfaces on a dataplane network. + * can be a container, a VM or a bare metal machine. We just need to be able to ssh into the + PROX machine from the test container. + * is optimized for data plane traffic. + * will measure the throughput that is offered through its dataplane interface(s) +There are no requirements on the NFVI instance itself. Of course, the measured throughput will +depend heavily on the NFVI characteristics. +In this release, we are supporting an automated deployment of the PROX instance on an NFVI that +provides the OpenStack Heat interface. You could also deploy the PROX instances using other +mechanisms. As long as you provide the necessary files describing these instances, the execution +of the test can also be done automatically (steps 4-7) and hence be executed on different DUTs, +e.g. VMWare, K8s, bare metal, ... + +Below is the basic picture of the deployment needed for the testing. + +.. image:: images/rapid.png + :width: 800px + :alt: supported topology + +Different test scenario's can now be executed by deploying the PROX machines on different systems: + * The generator machine could be deployed on a well defined compute node, that has network access + to the other nodes through the TOR. The generated traffic is very similar to external traffic. + * The Generator and the Swap instance could be on the same compute node to test E-W traffic between + 2 instance on the same compute node + * The Generator and the Swap instance could be on a different compute node + +Many VMs can be deployed before the test is running: each test case can then use different pairs of +PROX instances to test all the above scenarios + +Hardware & Software Ingredients +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The only requirement is to have the PROX instances running. There are no stringent requirements to be able +to run the test. Of course, the dataplane performance will heavily depend on the underlying NFVI HW & SW + +Installation Steps +------------------ + +Step 1: Identify a machine on which you will install the containers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +This machine will needs enough resource to install the Xtesting framework and needs to be enabled +for containers. +Form a network point of view, it will need to have access to the PROX instances: That means it will need +to be able to ssh into these machines and that the network also needs to allow for TCP port 8474 traffic. + +When using the automation to create the VM through the Heat Stack API, this machine also needs to be able +execute the OpenStack API. Alternatively, the creation of the VMs can be executed on another machine, but +this will involve some manual file copying. + +Step 2: Clone the samplevnf project on that machine +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + :: + git clone https://git.opnfv.org/samplevnf +Go to the relevant directory in this repository: samplevnf/VNFs/DPPD-PROX/helper-scripts/rapid/ + +Step 3: Deploy the testing VMs +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In this step, we will be deploying 2 or more instances that host the PROX tool. At the end of this step, +the instances will be running and an environment file (default name: rapid.env) will be created. This file +will have all information needed to run the actual test. You can do this step manually on all kinds of +platforms (OpenStack, VMWare, K8s, bare metal, ...), but the automation tools described in the rest of this +paragraph will using OpenStack Heat yaml files. +First, a PROX qcow2 image needs to be downloaded. + :: + wget http://artifacts.opnfv.org/samplevnf/jerma/prox_jerma.qcow2 +This image can also be created mannualy by following instructions in https://wiki.opnfv.org/display/SAM/Rapid+scripting, +in the section "Creating an image" +Now upload this image to Openstack: + :: + openstack image` create --disk-format qcow2 --container-format bare --file prox_jerma.qcow2 rapidVM +Now run createrapid.sh to create the stack. This process takes the config_file as input. Details can be found in +https://wiki.opnfv.org/display/SAM/Rapid+scripting, in the section "Deploying the VMs" + :: + ./createrapid.sh +At the end of this step, VMs should be running and the rapid.env and rapid_key.pem files should be available. + +Step 4: Deploy your own Xtesting toolchain +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Install Xtesting as described in https://xtesting.readthedocs.io/en/latest/ +First goto the xtesting directory in samplevnf/VNFs/DPPD-PROX/helper-scripts/rapid/xtesting (this was cloned +in step 2) + :: + virtualenv xtesting + . xtesting/bin/activate + pip install ansible + ansible-galaxy install collivier.xtesting + ansible-playbook site.yaml + deactivate + rm -r xtesting + +Step 5: Build the test container that will drive the TST009 testing +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + :: + docker build -t 127.0.0.1:5000/rapidxt . + +Step 6: Publish your container on your local repository +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + :: + docker push 127.0.0.1:5000/rapidxt + +You are now ready to execute the testing diff --git a/docs/testing/user/userguide/04-installation.rst b/docs/testing/user/userguide/04-installation.rst deleted file mode 100644 index e54243cb..00000000 --- a/docs/testing/user/userguide/04-installation.rst +++ /dev/null @@ -1,230 +0,0 @@ -.. This work is licensed under a Creative Commons Attribution 4.0 International -.. License. -.. http://creativecommons.org/licenses/by/4.0 -.. (c) OPNFV, Intel Corporation and others. - -SampleVNF Installation -====================== - -Abstract --------- - -This project provides a placeholder for various sample VNF -(Virtual Network Function (:term:`VNF`)) development which includes example -reference architecture and optimization methods related to VNF/Network service -for high performance VNFs. -The sample VNFs are Open Source approximations* of Telco grade VNF’s using -optimized VNF + NFVi Infrastructure libraries, with Performance Characterization -of Sample† Traffic Flows. - -:: - - * Not a commercial product. Encourage the community to contribute and close the feature gaps. - † No Vendor/Proprietary Workloads - -SampleVNF supports installation directly in Ubuntu. The installation procedure -are detailed in the sections below. - -The steps needed to run SampleVNF are: - 1) Install and Build SampleVNF. - 2) Deploy the VNF on the target and modify the config based on the Network under test - 3) Run the traffic generator to generate the traffic. - -Prerequisites -------------- - -Supported Test setup -^^^^^^^^^^^^^^^^^^^^^ -The device under test (DUT) consists of a system following; - * A single or dual processor and PCH chip, except for System on Chip (SoC) cases - * DRAM memory size and frequency (normally single DIMM per channel) - * Specific Intel Network Interface Cards (NICs) - * BIOS settings noting those that updated from the basic settings - * DPDK build configuration settings, and commands used for tests -Connected to the DUT is an IXIA* or Software Traffic generator like pktgen or TRex, -simulation platform to generate packet traffic to the DUT ports and -determine the throughput/latency at the tester side. - -Below are the supported/tested (:term:`VNF`) deployment type. - -.. image:: images/deploy_type.png - :width: 800px - :alt: SampleVNF supported topology - -Hardware & Software Ingredients -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -SUT requirements: - -:: - - +-----------+------------------+ - | Item | Description | - +-----------+------------------+ - | Memory | Min 20GB | - +-----------+------------------+ - | NICs | 2 x 10G | - +-----------+------------------+ - | OS | Ubuntu 16.04 LTS | - +-----------+------------------+ - | kernel | 4.4.0-34-generic| - +-----------+------------------+ - | DPDK | 17.02 | - +-----------+------------------+ - -Boot and BIOS settings: - -:: - - +------------------+---------------------------------------------------+ - | Boot settings | default_hugepagesz=1G hugepagesz=1G hugepages=16 | - | | hugepagesz=2M hugepages=2048 isolcpus=1-11,22-33 | - | | nohz_full=1-11,22-33 rcu_nocbs=1-11,22-33 | - | | Note: nohz_full and rcu_nocbs is to disable Linux*| - | | kernel interrupts, and it’s import | - +------------------+---------------------------------------------------+ - |BIOS | CPU Power and Performance Policy | - | | CPU C-state Disabled | - | | CPU P-state Disabled | - | | Enhanced Intel® Speedstep® Tech Disabled | - | | Hyper-Threading Technology (If supported) Enable | - | | Virtualization Techology Enable | - | | Coherency Enable | - | | Turbo Boost Disabled | - +------------------+---------------------------------------------------+ - -Network Topology for testing VNFs ---------------------------------- -The ethernet cables should be connected between traffic generator and the VNF server (BM, -SRIOV or OVS) setup based on the test profile. - -The connectivity could be - -1) Single port pair : One pair ports used for traffic - -:: - - e.g. Single port pair link0 and link1 of VNF are used - TG:port 0 <------> VNF:Port 0 - TG:port 1 <------> VNF:Port 1 - - For correalted traffic, use below configuration - TG_1:port 0 <------> VNF:Port 0 - VNF:Port 1 <------> TG_2:port 0 (UDP Replay) - (TG_2(UDP_Replay) reflects all the traffic on the given port) - -2) Multi port pair : More than one pair of traffic - -:: - - e.g. Two port pair link 0, link1, link2 and link3 of VNF are used - TG:port 0 <------> VNF:Port 0 - TG:port 1 <------> VNF:Port 1 - TG:port 2 <------> VNF:Port 2 - TG:port 3 <------> VNF:Port 3 - - For correalted traffic, use below configuration - TG_1:port 0 <------> VNF:Port 0 - VNF:Port 1 <------> TG_2:port 0 (UDP Replay) - TG_1:port 1 <------> VNF:Port 2 - VNF:Port 3 <------> TG_2:port 1 (UDP Replay) - (TG_2(UDP_Replay) reflects all the traffic on the given port) - -* Bare-Metal - Refer: http://fast.dpdk.org/doc/pdf-guides/ to setup the DUT for VNF to run - -* Standalone Virtualization - PHY-VM-PHY - * SRIOV - Refer below link to setup sriov - https://software.intel.com/en-us/articles/using-sr-iov-to-share-an-ethernet-port-among-multiple-vms - - * OVS_DPDK - Refer below link to setup ovs-dpdk - http://docs.openvswitch.org/en/latest/intro/install/general/ - http://docs.openvswitch.org/en/latest/intro/install/dpdk/ - - * Openstack - Use any OPNFV installer to deploy the openstack. - - -Build VNFs on the DUT: ----------------------- - -1) Clone sampleVNF project repository - git clone https://git.opnfv.org/samplevnf - -Auto Build - Using script to build VNFs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * Interactive options: - :: - - ./tools/vnf_build.sh -i - Follow the steps in the screen from option [1] –> [10] and - select option [9] to build the vnfs. - It will automatically download selected DPDK version and any - required patches and will setup everything and build VNFs. - - Options [8], If RestAPI feature is needed install 'civetweb' - - Following are the options for setup: - ---------------------------------------------------------- - Step 1: Environment setup. - ---------------------------------------------------------- - [1] Check OS and network connection - [2] Select DPDK RTE version - - ---------------------------------------------------------- - Step 2: Download and Install - ---------------------------------------------------------- - [3] Agree to download - [4] Download packages - [5] Download DPDK zip - [6] Build and Install DPDK - [7] Setup hugepages - [8] Download and Build civetweb - - ---------------------------------------------------------- - Step 3: Build VNFs - ---------------------------------------------------------- - [9] Build all VNFs (vACL, vCGNAPT, vFW, UDP_Replay, DPPD-PROX) - - [10] Exit Script - - * non-Interactive options: - :: - ./tools/vnf_build.sh -s -d= - -Manual Build -^^^^^^^^^^^^ - - :: - - 1. Download DPDK supported version from dpdk.org - * http://dpdk.org/browse/dpdk/snapshot/dpdk-$DPDK_RTE_VER.zip - * unzip dpdk-$DPDK_RTE_VER.zip and apply dpdk patches only in case of 16.04 (Not required for other DPDK versions) - * cd dpdk - * make config T=x86_64-native-linuxapp-gcc O=x86_64-native-linuxapp-gcc - * cd x86_64-native-linuxapp-gcc - * make -j - 2. Add this to Go to /etc/default/grub configuration file to setup hugepages. - * Append “default_hugepagesz=1G hugepagesz=1G hugepages=8 hugepagesz=2M hugepages=2048” to the GRUB_CMDLINE_LINUX entry. - 3. Setup Environment Variable - * export RTE_SDK=/dpdk - * export RTE_TARGET=x86_64-native-linuxapp-gcc - * export VNF_CORE= or using ./tools/setenv.sh - 4. Build SampleVNFs e.g, vACL - * cd /VNFs/vACL - * make clean - * make - * The vACL executable will be created at the following location - /VNFs/vACL/build/vACL - -2) Standalone virtualization/Openstack: - - Build VM image from script in yardstick - :: - 1) git clone https://git.opnfv.org/samplevnf - 2) cd samplevnf and run - ./tools/samplevnf-img-dpdk-samplevnf-modify tools/ubuntu-server-cloudimg-samplevnf-modify.sh - Image available in: /tmp/workspace/samplevnf/xenial-server-cloudimg-amd64-disk1.img - -To run VNFs. Please refer chapter `05-How_to_run_SampleVNFs.rst` diff --git a/docs/testing/user/userguide/images/rapid.png b/docs/testing/user/userguide/images/rapid.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9b05bd41b90b760a1e0e7d1d1dfe4d80ea8603 GIT binary patch literal 34588 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 Q4G8q|h5YjZalH@!13nhs