blob: b0fe35b79a4cf5f0104a07ad4e21e804ebbf0c3e [file] [log] [blame]
.. _vlan_interface:
Virtual LAN (VLAN) Support
##########################
.. contents::
:local:
:depth: 2
Overview
********
`Virtual LAN <https://wikipedia.org/wiki/Virtual_LAN>`_ (VLAN) is a
partitioned and isolated computer network at the data link layer
(OSI layer 2). For ethernet network this refers to
`IEEE 802.1Q <https://en.wikipedia.org/wiki/IEEE_802.1Q>`_
In Zephyr, each individual VLAN is modeled as a virtual network interface.
This means that there is an ethernet network interface that corresponds to
a real physical ethernet port in the system. A virtual network interface is
created for each VLAN, and this virtual network interface connects to the
real network interface. This is similar to how Linux implements VLANs. The
*eth0* is the real network interface and *vlan0* is a virtual network interface
that is run on top of *eth0*.
VLAN support must be enabled at compile time by setting option
:kconfig:option:`CONFIG_NET_VLAN` and :kconfig:option:`CONFIG_NET_VLAN_COUNT` to reflect how
many network interfaces there will be in the system. For example, if there is
one network interface without VLAN support, and two with VLAN support, the
:kconfig:option:`CONFIG_NET_VLAN_COUNT` option should be set to 3.
Even if VLAN is enabled in a :file:`prj.conf` file, the VLAN needs to be
activated at runtime by the application. The VLAN API provides a
:c:func:`net_eth_vlan_enable` function to do that. The application needs
to give the network interface and desired VLAN tag as a parameter to that
function. The VLAN tagging for a given network interface can be disabled by a
:c:func:`net_eth_vlan_disable` function. The application needs to configure
the VLAN network interface itself, such as setting the IP address, etc.
See also the :ref:`VLAN sample application <vlan-sample>` for API usage
example. The source code for that sample application can be found at
:zephyr_file:`samples/net/vlan`.
The net-shell module contains *net vlan add* and *net vlan del* commands
that can be used to enable or disable VLAN tags for a given network interface.
See the `IEEE 802.1Q spec`_ for more information about ethernet VLANs.
.. _IEEE 802.1Q spec: https://ieeexplore.ieee.org/document/6991462/
API Reference
*************
.. doxygengroup:: vlan_api