| .. _net_if_interface: |
| |
| Network Interface |
| ################# |
| |
| .. contents:: |
| :local: |
| :depth: 2 |
| |
| Overview |
| ******** |
| |
| The network interface is a nexus that ties the network device drivers |
| and the upper part of the network stack together. All the sent and received |
| data is transferred via a network interface. The network interfaces cannot be |
| created at runtime. A special linker section will contain information about them |
| and that section is populated at linking time. |
| |
| Network interfaces are created by ``NET_DEVICE_INIT()`` macro. |
| For Ethernet network, a macro called ``ETH_NET_DEVICE_INIT()`` should be used |
| instead as it will create VLAN interfaces automatically if |
| :option:`CONFIG_NET_VLAN` is enabled. These macros are typically used in |
| network device driver source code. |
| |
| The network interface can be turned ON by calling ``net_if_up()`` and OFF |
| by calling ``net_if_down()``. When the device is powered ON, the network |
| interface is also turned ON by default. |
| |
| The network interfaces can be referenced either by a ``struct net_if *`` |
| pointer or by a network interface index. The network interface can be |
| resolved from its index by calling ``net_if_get_by_index()`` and from interface |
| pointer by calling ``net_if_get_by_iface()``. |
| |
| The IP address for network devices must be set for them to be connectable. |
| In a typical dynamic network environment, IP addresses are set automatically |
| by DHCPv4, for example. If needed though, the application can set a device's |
| IP address manually. See the API documentation below for functions such as |
| ``net_if_ipv4_addr_add()`` that do that. |
| |
| The ``net_if_get_default()`` returns a *default* network interface. What |
| this default interface means can be configured via options like |
| :option:`CONFIG_NET_DEFAULT_IF_FIRST` and |
| :option:`CONFIG_NET_DEFAULT_IF_ETHERNET`. |
| See Kconfig file :zephyr_file:`subsys/net/ip/Kconfig` what options are available for |
| selecting the default network interface. |
| |
| The transmitted and received network packets can be classified via a network |
| packet priority. This is typically done in Ethernet networks when virtual LANs |
| (VLANs) are used. Higher priority packets can be sent or received earlier than |
| lower priority packets. The traffic class setup can be configured by |
| :option:`CONFIG_NET_TC_TX_COUNT` and :option:`CONFIG_NET_TC_RX_COUNT` options. |
| |
| If the :option:`CONFIG_NET_PROMISCUOUS_MODE` is enabled and if the underlaying |
| network technology supports promiscuous mode, then it is possible to receive |
| all the network packets that the network device driver is able to receive. |
| See :ref:`promiscuous_interface` API for more details. |
| |
| API Reference |
| ************* |
| |
| .. doxygengroup:: net_if |
| :project: Zephyr |