.. _network_management_api:

Network Management API
######################

The Network Management APIs allow applications, as well as network
layer code itself, to call defined network routines at any level in
the IP stack, or receive notifications on relevant network events. For
example, by using these APIs, code can request a scan be done on a
WiFi- or Bluetooth-based network interface, or request notification if
a network interface IP address changes.

The Network Management API implementation is designed to save memory
by eliminating code at build time for management routines that are not
used. Distinct and statically defined APIs for network management
procedures are not used.  Instead, defined procedure handlers are
registered by using a `NET_MGMT_REGISTER_REQUEST_HANDLER`
macro. Procedure requests are done through a single :cpp:func:`net_mgmt()` API
that invokes the registered handler for the corresponding request.

The current implementation is experimental and may change and improve
in future releases.

Requesting a defined procedure
******************************

All network management requests are of the form
``net_mgmt(mgmt_request, ...)``. The ``mgmt_request`` parameter is a bit
mask that tells which stack layer is targeted, if a ``net_if`` object is
implied, and the specific management procedure being requested. The
available procedure requests depend on what has been implemented in
the stack.

To avoid extra cost, all :cpp:func:`net_mgmt()` calls are direct. Though this
may change in a future release, it will not affect the users of this
function.

Listening to network event
**************************

You can receive notifications on network events by registering a
callback function and specifying an event mask used to match one or
more events that are relevant.

Two functions are available, :cpp:func:`net_mgmt_add_event_callback()` for
registering the callback function, and
:cpp:func:`net_mgmt_del_event_callback()`
for unregistering. A helper function, :cpp:func:`net_mgmt_init_event_cb()`, can
be used to ease the initialization of the callback structure.

When an event is raised that matches a registered event mask, the
associated callback function is invoked with the actual event
code. This makes it possible for different events to be handled by the
same callback function, if desired.

See an example of registering callback functions and using the network
management API in :file:`tests/net/mgmt/src/mgmt.c`.

Defining a network management procedure
***************************************

You can provide additional management procedures specific to your
stack implementation by defining a handler and registering it with an
associated mgmt_request code.

Management request code are defined in relevant places depending on
the targeted layer or eventually, if l2 is the layer, on the
technology as well. For instance, all IP layer management request code
will be found in the :file:`include/net/net_mgmt.h` header file. But in case
of an L2 technology, let's say Ethernet, these would be found in
:file:`include/net/ethernet.h`

You define your handler modeled with this signature:

.. code-block:: c

   static int your_handler(u32_t mgmt_event, struct net_if *iface,
                           void *data, size_t len);

and then register it with an associated mgmt_request code:

.. code-block:: c

   NET_MGMT_REGISTER_REQUEST_HANDLER(<mgmt_request code>, your_handler);

This new management procedure could then be called by using:

.. code-block:: c

   net_mgmt(<mgmt_request code>, ...);


Signaling a network event
*************************

You can signal a specific network event using the :cpp:func:`net_mgmt_notify()`
function and provide the network event code. See
:file:`include/net/net_mgmt.h` for details. As for the management request
code, event code can be also found on specific L2 technology headers,
for example :file:`include/net/ieee802154.h` would be the right place if
802.15.4 L2 is the technology one wants to listen to events.
