{ "info": { "author": "Pablo Modernell", "author_email": "pablomodernell@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# F-LoRA: LoRaWAN testing tool.\n* [F-Interop](www.f-interop.eu)\n* Region: European Union 863-870MHz ISM Band \n* Protocol version: LoRaWAN Version 1.0.2/ Regional Parameters v1.0.2rB\n\n## Quick start \n\n1. Create a user account [F-Interop](www.f-interop.eu) in [https://go.f-interop.eu/](https://go.f-interop.eu/).\n2. Configure the LoRa gateway local.conf file to send the packets to an IP and UDP port in your LAN.\n * **local.conf** example:\n\n\n\t\t {\"server_address\": \"192.168.0.129\",\n\t\t \"serv_port_up\": 5555, \n\t\t \"serv_port_down\": 5555, \n\t\t \"serv_enabled\": true,\n\t\t \"keepalive_interval\": 10, \n\t\t \"stat_interval\": 30, \n\t\t \"push_timeout_ms\": 100, \n\t\t \"forward_crc_valid\": true, \n\t\t \"forward_crc_error\": false, \n\t\t \"forward_crc_disabled\": false }\n\n3. Sign in and select the F-LoRa LoRaWAN conformance test.\n4. Provide the device personalization information (ABP) using the web GUI:\n * DevEUI\n * AppKey\n * DevAddr\n5. Select the test cases to be executed and follow instructions to install the Agent. The following environment \nvariables must be defined:\n * AMQP_URL: URL of the AMQP broker with the connection parameters.\n * PF_IP: IP of the interface connected to the Gateway with the Packet Forwarder (the IP configured in the Gateway).\n * PF_UDP_PORT: UDP port used by the Packer Forwarder.\n6. Start the Agent using the **flora_start_bridge** command.\n6. Press the **Start** button in the web GUI.\n7. Connect the Device Under Test (DUT) to start sending messages to the LoRa gateway.\n * The DUT with the Implementation Under Test (IUT) must implement the Test Application Protocol to enter in\n Test Mode (using the default testing port 224).\n\n\n## Introduction\nThe f-LoRa testing tool is provided as an extension to the [F-Interop](www.f-interop.eu) platform in order to confirm\nthat a LoRaWAN MAC implementation running on an End Device fulfils the requirements of the LoRaWAN\nprotocol specification.\n\nThe Device Under Test (DUT) is a low power wireless end device implementing a LoRa PHY layer and the LoRaWAN MAC layer\nImplementation Under Test (IUT). It runs a test application on top of that MAC layer. Duty cycle restrictions must be\ndisabled and the normal application should be suspended when the node enters the test mode.\n\nThe test bench consist of an Agent service running on the user side connected to a standard LoRa Gateway (provided by\nthe user) and a Test Application Server (TAS) that performs the tests. This tests will check that the devices behave\naccording to the specification, including the adaptive data rate mechanisms, encryption and message integrity code\ncalculation, frame format and timing of the reception windows.\n\n### F-Interop integration\nThe user interacts with the F-LoRa testing tool using the [F-interop GUI](https://go.f-interop.eu/).\nAfter the selection of the F-LoRa LoRaWAN testing tool, instructions are provided on how to download, run, and configure\nthe Agent module on the user's side.\nThe ABP credentials of the IUT (security keys, short address, device EUI) can be configured and then the user selects \na group of tests to be performed.\n\nAn Agent serves as an interface between the gateway's packet forwarder and the testing tool.\nThe user must configure the gateway to send all the packets to the Agent component. \nOnce the test session has started, all interactions are handled by the testing tool.\nThe testing application running on the device with the IUT responds as defined by the testing protocol.\nA detailed description of the test verdict, indicating the errors found in any failing step is shown to the user in the \nGUI after all tests are completed. \n\n## Required components and pre-conditions\nThe user must provide a standard compliant LoRa gateway integrating a Packet Forwarder application. The LoRaWAN MAC\nImplementation Under Test (IUT) will run on an end device that should be placed in a shielded container and conected\nto the LoRa gateway by a radio connection.\n\n## Test Application Protocol\n\nEvery test case is implemented as a series of steps that are coordinated by a test manager. For each step of the test\na message from the DUT is expected by the TAS and a response could be sent from the TAS to the DUT. This message\nexchange follows a Test Application Protocol.\n\nIn order to be tested against the F-LoRa platform the DUT must implement a Test Mode in which the device is capable\nof interacting with the Test Application Server following the Test Application Protocol. The normal traffic of the\nregular applications of the node must be ignored until the test mode is deactivated.\n\nWhen the DUT is configured in Test Mode it must send a periodic Test Activation OK (TAOK) message (period between 5\nand 10 seconds). The TAOK message has a length of 2 bytes and consists of a downlink counter that is incremented by\nthe DUT every time it receive a test message from the TAS. \n\nTo control the DUT behaviour, in order to test the IUT, the Test Application Protocol defines a set of messages. The\nfirst byte of the FRMPayload of each application test message identifies its purpose:\n\n\n| Test ID | First Byte (FRMPayload) | Name | Description |\n|:-------:|:-----------------------:|:----:|:----------: |\n| 0 | 0x00| Test deactivation | Deactivates the Test Mode in the DUT |\n| 1 | 0x01| Test activation | Activates the Test Mode (FRMPayload=0x01010101, port 224)|\n| 0 | 0x02| Confirmed uplink | Configures the test application in the DUT to use CONFIRMED uplink frames |\n| 0 | 0x03| Unconfirmed uplink | Configures the test application in the DUT to use UNCONFIRMED uplink frames|\n| 0 | 0x04| Ping Pong | Random payload. The DUT must respond with Test ID 4 and adding 1 to all bytes (modulo 256) |\n| 0 | 0x06| Session update |Triggers a join request message exchange in order to update the device OTAA session. |\n\nThe Test Description document sould be used as a reference for more details on the Test Application Protocol.\n\n### Test Description\nA test description has been defined for testing the main specification of the LoRaWAN protocol.\nThe tests are classified into different groups, based on the type of features they aim to verify:\n\n* ACT, device activation,\n* FUN, basic functionalities and timing,\n* SEC, security, encryption and integrity check,\n* MAC, MAC commands.\n\nThe different activation mechanism, Activation By Personalization (ABP) and Over the Air Activation (OTAA) can be \ntested.\nIn addition to the basic joining message exchange of the OTAA, new data rate, reception windows delay, and frequencies\nare configured using the Join Accept message to test the implementation of this feature.\nRegarding security, end-to-end encryption with the configured keys can be tested and the Message Integrity Code \ncalculation can be verified. Between the different messages exchanged with the IUT, new configuration parameters are\nset using MAC commands to check that the IUT behaves as expected.\n\n## Architecture overview\n```\n\n\n\n F-Interop side +-------------+\n +-------------------------+ | |\n | Testing tool | | RMQ |\n | | | Broker |\n | +-----------------+ | | |\n | |Test Application | | +------X------+\n | | Server | | AMQP XXX\n | | (TAS) | <------------------> X <-+\n | +-----------------+ | |\n +-------------------------+ |\n |\n XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXX\n User side |\n |\n +--------------------+ |\n | End Device | AMQP|\n | | |\n | +----------------+ | |\n | |Test application| | +------------------------------+ +-----------+ |\n | +----------------+ | |LoRa Gateway | | Agent | |\n | | LoRaWAN | | | | Semtech | | |\n | +----------------+ | | +------------+ +-----------+ | Protocol| +-------+ | |\n | | LoRa <---------->Concentrator| | Packet | | | |LoRaWAN| | |\n | +----------------+ | LoRa | | | | Forwarder <------------->Bridge <-------+\n | | | +------------+ +-----------+ | UDP | +-------+ |\n +--------------------+ +------------------------------+ +-----------+\n\n```\n### Description of the components\n* End Device: Device Under Test (DUT) implementing LoRaWAN Implementation Under Test (IUT) and running the test\n application that interacts with the test server.\n* LoRa Gateway (provided by the user): LoRa concentrator and packet forwarder using semtech protocol.\n* LoRaWAN Bridge: The Semtech Packet Forwarder Bridge is the service of the agent, provided by the testing platform, \nthat runs on the user side. It encapsulates the packets coming from the gateway through a UDP connection into\nAMQP packets. It publishes the messages with a routing key 'direcion.nwk.gatewayid' (e.g. up.nwk.gw1) and consumes the\ndownlink packets from the Test Application Server\n* RMQ Broker: A Rabbit MQ message broker used to pass the messages between the Agent and the testing tool. \n* Test Application Server: is in charge of the test by exchanging tests requests (using port 224) and MAC commands\nwith the DUT while asserting that the communication follows the LoRaWAN specification. It coordinates the testing \nsession, and has the information of the test to be run and the device session information with the session keys.\n\n\n## Agent Service\nThe Agent is an application provided by the testing platform to be downloaded and installed on the user side. It \nconsists of the following components:\n* Agent Bridge: Captures the UDP packets comming from the Semtech Packet Forwarder installed in the LoRa gateway, and\nsends them to the Test Application Server (TAS) using through the RabbitMQ message broker (using AMQP). It also consumes\nthe downlink messages comming from the TAS and forwards them to the LoRa gateway (to be sent to the end device).\n* Packet Sniffer: Captures the hex dump of the LoRaWAN messages.\n* Logger: Prints the log information of the Test platform.\n\n### Agent Requirement\n* Version 1.0.0\n * Python 3.5\n\n\n## Testing tool messages\n* Testing Tool Messages: messages exchanged between the different services of the testing tool (e.g. Agent and TAS).\n* Gateway Messages: a Gateway Message is a Testing tool message composed of the LoRaWAN PHYPayload and the metadata\nadded by the gateway with information about the data rate, used frequency, timestap of the message, etc. They follow\nthe same structure and include the same metadata used by the Semtech Packet Forwarder protocol. The\n**testingtool_messages** and **gateway_forwarder** modules implement the creation and parsing of this messages.\n\n ```\n {\n\n 'tmst': 1604475836,\n 'chan': 2,\n 'rfch': 1,\n 'freq': 868.5,\n 'stat': 1,\n 'modu': 'LORA',\n 'datr': 'SF12BW125`',\n 'codr': '4/5',\n 'lsnr': 7.`8,\n 'rssi': -23,\n 'size': 29,\n 'data': 'QJ8pKAGAAAACBq6JhF/uO9ZeeoSq4xZMFchm3lw='\n }\n ```\n\n### Message Queuing\nThe **message_broker** module in the parameters package provides the routing keys used by the testing tool components\nto exchange data and configuration messages. All the services use this module for flexibility in the definition of the\nrouting keys.\n* Routing Keys\n * Uplink message examples: \n * fromAgent.gw1: uplink network message published by LoRaWAN Bridge (gw1 identifies the gateway)\n * Downlink message examples:\n * toAgent.gw1: downlink network message published by the Test Server.\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "florawan-testing", "package_url": "https://pypi.org/project/florawan-testing/", "platform": "", "project_url": "https://pypi.org/project/florawan-testing/", "project_urls": null, "release_url": "https://pypi.org/project/florawan-testing/1.1.0/", "requires_dist": [ "click (==6.7)", "pika (==0.12.0)", "pycryptodomex (==3.6.6)" ], "requires_python": "", "summary": "F-LoRa LoRaWAN testing user Agent.", "version": "1.1.0" }, "last_serial": 4309963, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "63b51bf883802a19aea9725444cae048", "sha256": "070962f1db1ea816e3b45100d023100c0d2c420ae40f2c80d8c0087115c56bdb" }, "downloads": -1, "filename": "florawan_testing-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "63b51bf883802a19aea9725444cae048", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 139798, "upload_time": "2018-09-24T18:01:01", "url": "https://files.pythonhosted.org/packages/d3/3e/892210a42655b68948040ebca5bd5dd91c9070d8fe7613f6a7c5ab2bdb57/florawan_testing-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27fc4f6358bba4f065e2e072b7e16cb1", "sha256": "75cb4594347e39275b13fda7f6eee3f7dd8d6fd669484132a36a2aaa6969b63f" }, "downloads": -1, "filename": "florawan_testing-1.0.0.tar.gz", "has_sig": false, "md5_digest": "27fc4f6358bba4f065e2e072b7e16cb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75417, "upload_time": "2018-09-24T18:01:03", "url": "https://files.pythonhosted.org/packages/e0/30/43f8c999ed59f468b798eba2190bceb448900567c003b213046d74699048/florawan_testing-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "7b872e8d57800d1b1d5c2563910d3ad8", "sha256": "7a97d774dfe8070fe661946261b898f5c3a37055b3673ec5d262835e5fae61f6" }, "downloads": -1, "filename": "florawan_testing-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7b872e8d57800d1b1d5c2563910d3ad8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 143468, "upload_time": "2018-09-25T20:11:40", "url": "https://files.pythonhosted.org/packages/68/89/c7fc5b7985ca236d65a66670e799ff82de9136cf7e50ad4b0cbb0e3fb203/florawan_testing-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9bd321be3125edc3bd7efb111761d32d", "sha256": "040362ea79d20d6c13ef044a4311c51fde5d684e5abd3fcbf4e5ac37add43788" }, "downloads": -1, "filename": "florawan_testing-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9bd321be3125edc3bd7efb111761d32d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75262, "upload_time": "2018-09-25T20:11:42", "url": "https://files.pythonhosted.org/packages/0e/b5/03cb66b5fbc86376037d83e7258d80b77f023b9163407a126d70707e5f2e/florawan_testing-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7b872e8d57800d1b1d5c2563910d3ad8", "sha256": "7a97d774dfe8070fe661946261b898f5c3a37055b3673ec5d262835e5fae61f6" }, "downloads": -1, "filename": "florawan_testing-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7b872e8d57800d1b1d5c2563910d3ad8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 143468, "upload_time": "2018-09-25T20:11:40", "url": "https://files.pythonhosted.org/packages/68/89/c7fc5b7985ca236d65a66670e799ff82de9136cf7e50ad4b0cbb0e3fb203/florawan_testing-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9bd321be3125edc3bd7efb111761d32d", "sha256": "040362ea79d20d6c13ef044a4311c51fde5d684e5abd3fcbf4e5ac37add43788" }, "downloads": -1, "filename": "florawan_testing-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9bd321be3125edc3bd7efb111761d32d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 75262, "upload_time": "2018-09-25T20:11:42", "url": "https://files.pythonhosted.org/packages/0e/b5/03cb66b5fbc86376037d83e7258d80b77f023b9163407a126d70707e5f2e/florawan_testing-1.1.0.tar.gz" } ] }