tftpclient: converting to net sockets
[barrelfish] / lib / net / networking_internal.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_INTERNAL_H_
17 #define LIB_NET_INCLUDE_NETWORKING_INTERNAL_H_
18
19
20 #include <barrelfish/barrelfish.h>
21 #include <barrelfish/deferred.h>
22
23 #include <devif/queue_interface.h>
24 #include <devif/backends/loopback_devif.h>
25 #include <devif/backends/net/sfn5122f_devif.h>
26 #include <devif/backends/net/e10k_devif.h>
27 #include <devif/backends/net/e1000_devif.h>
28
29 #include <lwip/netif.h>
30
31 #include <net/net_filter.h>
32 #include <net/net.h>
33 #include <net/netbufs.h>
34 #include <net/netif.h>
35 #include <net/dhcp.h>
36 #include <net/arp.h>
37
38 #include "debug.h"
39
40 // enable benchmarking
41 #define BENCH_LWIP_STACK 0
42 #define BENCH_DEVQ_ENQUEUE 0
43 #define BENCH_DEVQ_DEQUEUE 0
44 #define BENCH_NUM_MEASUREMENTS_BITS 16
45 #define BENCH_NUM_MEASUREMENTS (1UL << BENCH_NUM_MEASUREMENTS_BITS)
46
47 #define NETBUF_DEBGUG 0
48
49 /**
50  * @brief encapsulates the state of the networking library
51  */
52 struct net_state {
53     uint64_t queueid;
54     const char *cardname;
55     net_flags_t flags;
56     bool initialized;
57
58     /* DHCP timer events */
59     uint64_t dhcp_ticks;
60     struct periodic_event dhcp_timer;
61     bool dhcp_done;
62     bool dhcp_running;
63
64     bool arp_running;
65     uint64_t arp_triggerid;
66
67     struct waitset *waitset;
68
69     struct devq *queue;
70     struct net_buf_pool *pool;
71     struct netif netif;
72     struct net_filter_state* filter;
73
74   //  ip4_addr_t ipaddr, netmask, gw;
75 };
76
77 extern struct net_state state;
78
79 static inline struct net_state *get_default_net_state(void)
80 {
81     return &state;
82 }
83
84
85 struct net_buf_pool;
86
87 struct net_buf_p
88 {
89     struct pbuf_custom pbuf;
90 #if NETBUF_DEBGUG
91     uint64_t flags;
92     bool allocated;
93     bool enqueued;
94 #endif
95     lpaddr_t offset;
96     void *vbase;
97     struct net_buf_region *region;
98 #if BENCH_LWIP_STACK
99     cycles_t timestamp;
100     cycles_t timestamp2;
101 #endif
102 #if NETBUF_DEBGUG
103     uint64_t magic;
104 #endif
105 };
106
107 struct net_buf_region
108 {
109     void *vbase;
110     struct frame_identity frame;
111     struct capref framecap;
112     struct net_buf_region *next;
113     size_t buffer_size;
114     uint8_t buffer_shift;
115     regionid_t regionid;
116     struct net_buf_pool *pool;
117     struct net_buf_p *netbufs;    /// array of netbufs
118 };
119
120 struct net_buf_pool
121 {
122     struct net_buf_region *regions;
123     struct devq *dev_q;
124     struct pbuf *pbufs;
125     // stats
126     size_t buffer_count;
127     size_t buffer_free;
128
129 };
130
131 #endif /* LIB_NET_INCLUDE_NETWORKING_INTERNAL_H_ */