1 /*
2  * Copyright (c) 2018 Intel Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief API for monitoring network connections and interfaces.
10  */
11 
12 #ifndef ZEPHYR_INCLUDE_CONN_MGR_H_
13 #define ZEPHYR_INCLUDE_CONN_MGR_H_
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 #if defined(CONFIG_NET_CONNECTION_MANAGER) || defined(__DOXYGEN__)
20 
21 /**
22  * @brief Connection Manager API
23  * @defgroup conn_mgr Connection Manager API
24  * @since 2.0
25  * @version 0.1.0
26  * @ingroup networking
27  * @{
28  */
29 
30 struct net_if;
31 struct net_l2;
32 
33 /**
34  * @brief Resend either NET_L4_CONNECTED or NET_L4_DISCONNECTED depending on whether connectivity
35  * is currently available.
36  */
37 void conn_mgr_mon_resend_status(void);
38 
39 /**
40  * @brief Mark an iface to be ignored by conn_mgr.
41  *
42  * Ignoring an iface forces conn_mgr to consider it unready/disconnected.
43  *
44  * This means that events related to the iface connecting/disconnecting will not be fired,
45  * and if the iface was connected before being ignored, events will be fired as though it
46  * disconnected at that moment.
47  *
48  * @param iface iface to be ignored.
49  */
50 void conn_mgr_ignore_iface(struct net_if *iface);
51 
52 /**
53  * @brief Watch (stop ignoring) an iface.
54  *
55  * conn_mgr will no longer be forced to consider the iface unreadly/disconnected.
56  *
57  * Events related to the iface connecting/disconnecting will no longer be blocked,
58  * and if the iface was connected before being watched, events will be fired as though
59  * it connected in that moment.
60  *
61  * All ifaces default to watched at boot.
62  *
63  * @param iface iface to no longer ignore.
64  */
65 void conn_mgr_watch_iface(struct net_if *iface);
66 
67 /**
68  * @brief Check whether the provided iface is currently ignored.
69  *
70  * @param iface The iface to check.
71  * @retval true if the iface is being ignored by conn_mgr.
72  * @retval false if the iface is being watched by conn_mgr.
73  */
74 bool conn_mgr_is_iface_ignored(struct net_if *iface);
75 
76 /**
77  * @brief Mark an L2 to be ignored by conn_mgr.
78  *
79  * This is a wrapper for conn_mgr_ignore_iface that ignores all ifaces that use the L2.
80  *
81  * @param l2 L2 to be ignored.
82  */
83 void conn_mgr_ignore_l2(const struct net_l2 *l2);
84 
85 /**
86  * @brief Watch (stop ignoring) an L2.
87  *
88  *  This is a wrapper for conn_mgr_watch_iface that watches all ifaces that use the L2.
89  *
90  * @param l2 L2 to watch.
91  */
92 void conn_mgr_watch_l2(const struct net_l2 *l2);
93 
94 /**
95  * @}
96  */
97 
98 #else
99 
100 #define conn_mgr_mon_resend_status(...)
101 #define conn_mgr_ignore_iface(...)
102 #define conn_mgr_watch_iface(...)
103 #define conn_mgr_ignore_l2(...)
104 #define conn_mgr_watch_l2(...)
105 
106 #endif /* CONFIG_NET_CONNECTION_MANAGER */
107 
108 #ifdef __cplusplus
109 }
110 #endif
111 
112 #endif /* ZEPHYR_INCLUDE_CONN_MGR_H_ */
113