Netualizer is a fully distributed architecture that relies on agents that interact with controllers:
Agents provide services that can run on physical hardware (i.e. embedded devices and general purpose computers) or on virtualized setups and containers. The agents are provisioned and configured by the controllers to dynamically support any possible communication stack. This includes physical, link, network, transport and application layers and application. The controllers can drive agents or can program agents to drive themselves for permanent deployment.
For example, consider this scenario:
A temperature sensor is connected to an embedded device that has a single LoRa physical interface. LoRa is a preferred mechanism under IoT as it provides very long range coverage when compared to other wireless technologies (up to 50 kilometers depending on rate and impairments). The embedded device runs a Netualizer agent that is first (1) configured and then (2) deployed with a program that pushes readouts to a gateway. The gateway is another device that has two interfaces, a LoRa interface and a regular ethernet interface. The gateway also runs a Netualizer agent that is first (3) configured and then (4) deployed with a program that processes the incoming readouts and forwards them to AWS IoT for storage. The controller configures the corresponding stacks. Specifically, on the sensor side, the stack has a LoRa physical layer that, through 6LoWPAN, supports IPv6 and CoAP. The sensor readouts are transmitted by mean of a SPI interface to the device that, through the Netualizer agent, packetizes them. The gateway extracts the readouts and forwards them over ethernet and secure MQTT to the AWS IoT infrastructure. Once the controller deploys both, the device and the gateway, it stops interacting with them.