1 /** @file
2  * @brief Routines for network subsystem initialization.
3  */
4 
5 /*
6  * Copyright (c) 2017 Intel Corporation
7  *
8  * SPDX-License-Identifier: Apache-2.0
9  */
10 
11 #ifndef ZEPHYR_INCLUDE_NET_NET_CONFIG_H_
12 #define ZEPHYR_INCLUDE_NET_NET_CONFIG_H_
13 
14 #include <zephyr/types.h>
15 #include <zephyr/device.h>
16 #include <zephyr/net/net_if.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 /**
23  * @brief Network configuration library
24  * @defgroup net_config Network Configuration Library
25  * @since 1.8
26  * @version 0.8.0
27  * @ingroup networking
28  * @{
29  */
30 
31 /* Flags that tell what kind of functionality is needed by the client. */
32 /**
33  * @brief Application needs routers to be set so that connectivity to remote
34  * network is possible. For IPv6 networks, this means that the device should
35  * receive IPv6 router advertisement message before continuing.
36  */
37 #define NET_CONFIG_NEED_ROUTER 0x00000001
38 
39 /**
40  * @brief Application needs IPv6 subsystem configured and initialized.
41  * Typically this means that the device has IPv6 address set.
42  */
43 #define NET_CONFIG_NEED_IPV6   0x00000002
44 
45 /**
46  * @brief Application needs IPv4 subsystem configured and initialized.
47  * Typically this means that the device has IPv4 address set.
48  */
49 #define NET_CONFIG_NEED_IPV4   0x00000004
50 
51 /**
52  * @brief Initialize this network application.
53  *
54  * @details This will call net_config_init_by_iface() with NULL network
55  *          interface.
56  *
57  * @param app_info String describing this application.
58  * @param flags Flags related to services needed by the client.
59  * @param timeout How long to wait the network setup before continuing
60  * the startup.
61  *
62  * @return 0 if ok, <0 if error.
63  */
64 int net_config_init(const char *app_info, uint32_t flags, int32_t timeout);
65 
66 /**
67  * @brief Initialize this network application using a specific network
68  * interface.
69  *
70  * @details If network interface is set to NULL, then the default one
71  *          is used in the configuration.
72  *
73  * @param iface Initialize networking using this network interface.
74  * @param app_info String describing this application.
75  * @param flags Flags related to services needed by the client.
76  * @param timeout How long to wait the network setup before continuing
77  * the startup.
78  *
79  * @return 0 if ok, <0 if error.
80  */
81 int net_config_init_by_iface(struct net_if *iface, const char *app_info,
82 			     uint32_t flags, int32_t timeout);
83 
84 /**
85  * @brief Initialize this network application.
86  *
87  * @details If CONFIG_NET_CONFIG_AUTO_INIT is set, then this function is called
88  *          automatically when the device boots. If that is not desired, unset
89  *          the config option and call the function manually when the
90  *          application starts.
91  *
92  * @param dev Network device to use. The function will figure out what
93  *        network interface to use based on the device. If the device is NULL,
94  *        then default network interface is used by the function.
95  * @param app_info String describing this application.
96  *
97  * @return 0 if ok, <0 if error.
98  */
99 int net_config_init_app(const struct device *dev, const char *app_info);
100 
101 /**
102  * @}
103  */
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif /* ZEPHYR_INCLUDE_NET_NET_CONFIG_H_ */
110