libnet: refactor initialization code
[barrelfish] / lib / net / include / net / net.h
1 /**
2  * @brief 
3  *  net.h
4  */
5
6 /*
7  * Copyright (c) 2017, ETH Zurich.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15
16 #ifndef LIB_NET_INCLUDE_NETWORKING_H_
17 #define LIB_NET_INCLUDE_NETWORKING_H_
18
19 // forward declarations
20 struct devq;
21 struct eth_addr;
22
23
24 /* Initialization flags */
25
26 ///< default flags to initialize the networking library
27 #define NET_FLAGS_DEFAULTS               (0)
28
29 ///< use polling instead of interrupt driven messaging
30 #define NET_FLAGS_ENABLE_POLLING_MODE    (1 << 0)
31
32 ///< enable DHCP functionality on this queue
33 #define NET_FLAGS_DO_DHCP                (1 << 1)
34
35 #define NET_FLAGS_BLOCKING_INIT          (1 << 2)
36
37 ///< networking flags
38 typedef uint32_t net_flags_t;
39
40 /* network interfaces */
41
42 ///< the default network interface
43 #define NET_DEFAULT_NIC NULL
44
45
46 /*
47  * ==============================================================================
48  * Library Initialization
49  * ==============================================================================
50  */
51
52 /**
53  * @brief initializes the networking with the defaults
54  *
55  * @return SYS_ERR_OK on sucess, errval on failure
56  */
57 errval_t networking_init_default(void);
58
59
60 /**
61  * @brief initializes the networking library
62  *
63  * @param nic       the nic to use with the networking library
64  * @param flags     flags to use to initialize the networking library
65  *
66  * @return SYS_ERR_OK on success, errval on failure
67  */
68 errval_t networking_init(const char *nic, net_flags_t flags);
69
70 /**
71  * @brief initializes the netowrking library with a given device queue
72  *
73  * @param q         the device queue to initialize the networking on
74  * @param flags     supplied initialization flags
75  *
76  * @return SYS_ERR_OK on success, errval on failure
77  */
78 errval_t networking_init_with_queue(struct devq *q, net_flags_t flags);
79
80
81
82
83 errval_t networking_poll(void);
84
85
86
87 errval_t networking_get_mac(struct devq *q, uint8_t *hwaddr, uint8_t hwaddrlen);
88
89
90
91 /**
92  * @brief creates a queue to the given card and the queueid
93  *
94  * @param cardname  network card to create the queue for
95  * @param queueid   queueid of the network card
96  * @param retqueue  returns the pointer to the queue
97  *
98  * @return SYS_ERR_OK on success, errval on failure
99  */
100 errval_t networking_create_queue(const char *cardname, uint64_t queueid,
101                                  struct devq **retqueue);
102
103 /**
104  * @brief obtains the default setting for initializaion of the driver
105  *
106  * @param queue     returns the queue to be used
107  * @param cardname  returns the card name to be used
108  *
109  * @return SYS_ERR_OK on success, SKB_ERR_* on failure
110  */
111 errval_t networking_get_defaults(uint64_t *queue, const char **cardname, uint32_t *flags);
112
113
114 #endif /* LIB_NET_INCLUDE_NETWORKING_H_ */