Line data Source code
1 1 : /** @file
2 : * @brief Offloaded network device iface API
3 : *
4 : * This is not to be included by the application.
5 : */
6 :
7 : /*
8 : * Copyright (c) 2022 Nordic Semiconductor ASA
9 : *
10 : * SPDX-License-Identifier: Apache-2.0
11 : */
12 :
13 : #ifndef ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_
14 : #define ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_
15 :
16 : #include <zephyr/kernel.h>
17 : #include <zephyr/types.h>
18 : #include <stdbool.h>
19 : #include <zephyr/net/net_if.h>
20 :
21 : #ifdef __cplusplus
22 : extern "C" {
23 : #endif
24 :
25 : /**
26 : * @brief Offloaded Net Devices
27 : * @defgroup offloaded_netdev Offloaded Net Devices
28 : * @since 3.4
29 : * @version 0.8.0
30 : * @ingroup networking
31 : * @{
32 : */
33 :
34 : /** Types of offloaded netdev L2 */
35 1 : enum offloaded_net_if_types {
36 : /** Unknown, device hasn't register a type */
37 : L2_OFFLOADED_NET_IF_TYPE_UNKNOWN,
38 :
39 : /** Ethernet devices */
40 : L2_OFFLOADED_NET_IF_TYPE_ETHERNET,
41 :
42 : /** Modem */
43 : L2_OFFLOADED_NET_IF_TYPE_MODEM,
44 :
45 : /** IEEE 802.11 Wi-Fi */
46 : L2_OFFLOADED_NET_IF_TYPE_WIFI,
47 : };
48 :
49 : /**
50 : * @brief Extended net_if_api for offloaded ifaces/network devices, allowing handling of
51 : * admin up/down state changes
52 : */
53 1 : struct offloaded_if_api {
54 : /**
55 : * The net_if_api must be placed in first position in this
56 : * struct so that we are compatible with network interface API.
57 : */
58 1 : struct net_if_api iface_api;
59 :
60 : /** Enable or disable the device (in response to admin state change) */
61 1 : int (*enable)(const struct net_if *iface, bool state);
62 :
63 : /** Types of offloaded net device */
64 : enum offloaded_net_if_types (*get_type)(void);
65 : };
66 :
67 : /* Ensure offloaded_if_api is compatible with net_if_api */
68 : BUILD_ASSERT(offsetof(struct offloaded_if_api, iface_api) == 0);
69 :
70 : /**
71 : * @brief Check if the offloaded network interface supports Wi-Fi.
72 : *
73 : * @param iface Pointer to network interface
74 : *
75 : * @return True if interface supports Wi-Fi, False otherwise.
76 : */
77 1 : static inline bool net_off_is_wifi_offloaded(struct net_if *iface)
78 : {
79 : const struct offloaded_if_api *api = (const struct offloaded_if_api *)
80 : net_if_get_device(iface)->api;
81 :
82 : return api->get_type && api->get_type() == L2_OFFLOADED_NET_IF_TYPE_WIFI;
83 : }
84 :
85 : /**
86 : * @}
87 : */
88 :
89 : #ifdef __cplusplus
90 : }
91 : #endif
92 :
93 : #endif /* ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_ */
|