tftpclient: converting to net sockets
[barrelfish] / 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 #include <netinet/in.h>
20 #include <errors/errno.h>
21
22 // forward declarations
23 struct devq;
24 struct eth_addr;
25
26 /*
27  * ==============================================================================
28  * Networking Flags
29  * ==============================================================================
30  */
31
32 ///< default flags to initialize the networking library
33 #define NET_FLAGS_DEFAULTS               (0)
34
35 ///< use polling instead of interrupt driven messaging
36 #define NET_FLAGS_POLLING                (1 << 0)
37
38 ///< enable DHCP functionality on this queue
39 #define NET_FLAGS_DO_DHCP                (1 << 1)
40
41 #define NET_FLAGS_BLOCKING_INIT          (1 << 2)
42
43 ///< initalize with default queue
44 #define NET_FLAGS_DEFAULT_QUEUE          (1 << 3)
45
46 ///< do not initalize the net filter
47 #define NET_FLAGS_NO_NET_FILTER          (1 << 4)
48
49 ///< networking flags
50 typedef uint32_t net_flags_t;
51
52
53
54 /* network interfaces */
55
56 ///< the default network interface
57 #define NET_DEFAULT_NIC NULL
58
59 /*
60  * ==============================================================================
61  * Library Initialization
62  * ==============================================================================
63  */
64
65 /**
66  * @brief initializes the networking with the defaults
67  *
68  * @return SYS_ERR_OK on sucess, errval on failure
69  */
70 errval_t networking_init_default(void);
71
72
73 /**
74  * @brief initializes the networking library
75  *
76  * @param nic       the nic to use with the networking library
77  * @param flags     flags to use to initialize the networking library
78  *
79  * @return SYS_ERR_OK on success, errval on failure
80  */
81 errval_t networking_init(const char *nic, net_flags_t flags);
82
83 /**
84  * @brief initializes the networking library with a given device queue
85  *
86  * @param q         the device queue to initialize the networking on
87  * @param flags     supplied initialization flags
88  *
89  * @return SYS_ERR_OK on success, errval on failure
90  */
91 errval_t networking_init_with_queue(struct devq *q, net_flags_t flags);
92
93
94 /**
95  * @brief polls the network for new packets
96  *
97  * @return SYS_ERR_OK on success, errval on failure
98  */
99 errval_t networking_poll(void);
100
101
102
103
104 /**
105  * @brief creates a queue to the given card and the queueid
106  *
107  * @param cardname  network card to create the queue for
108  * @param queueid   queueid of the network card
109  * @param retqueue  returns the pointer to the queue
110  *
111  * @return SYS_ERR_OK on success, errval on failure
112  */
113 errval_t networking_create_queue(const char *cardname, uint64_t* queueid,
114                                  struct devq **retqueue);
115
116 /**
117  * @brief obtains the default setting for initialization of the driver
118  *
119  * @param queue     returns the queue to be used
120  * @param cardname  returns the card name to be used
121  *
122  * @return SYS_ERR_OK on success, SKB_ERR_* on failure
123  */
124 errval_t networking_get_defaults(uint64_t *queue, const char **cardname, uint32_t *flags);
125
126 /*
127  * ==============================================================================
128  * Installing filters
129  * ==============================================================================
130  */
131
132 /**
133  * @brief Install L3/L4 filter
134  *
135  * @param tcp       should TCP packets be filtered or UPD
136  * @param src_ip    source ip of the filter, 0 for wildcard
137  * @param src_port  source port of the filter, 0 for wildcard
138  * @param dst_port  destination port fo the filter
139  *
140  * @return SYS_ERR_OK on success, NET_FILTER_ERR_* on failure
141  */
142 errval_t networking_install_ip_filter(bool tcp, struct in_addr *src,
143                                       uint16_t src_port, uint16_t dst_port);
144
145 /**
146  * @brief Remove L3/L4 filter
147  *
148  * @param tcp       should TCP packets be filtered or UPD
149  * @param src_ip    source ip of the filter, 0 for wildcard
150  * @param src_port  source port of the filter, 0 for wildcard
151  * @param dst_port  destination port fo the filter
152  *
153  * @return SYS_ERR_OK on success, NET_FILTER_ERR_* on failure
154  */
155 errval_t networking_remove_ip_filter(bool tcp, struct in_addr *src,
156                                      uint16_t src_port, uint16_t dst_port);
157
158 #endif /* LIB_NET_INCLUDE_NETWORKING_H_ */