libnet: HW filter disable/enable on queue creation
[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 <collections/list.h>
39
40 #include <if/net_ARP_defs.h>
41
42 #include "debug.h"
43
44 // enable benchmarking
45 #define BENCH_LWIP_STACK 0
46 #define BENCH_DEVQ_ENQUEUE 0
47 #define BENCH_DEVQ_DEQUEUE 0
48 #define BENCH_NUM_MEASUREMENTS_BITS 16
49 #define BENCH_NUM_MEASUREMENTS (1UL << BENCH_NUM_MEASUREMENTS_BITS)
50
51 #define NETBUF_DEBGUG 0
52
53 /**
54  * @brief encapsulates the state of the networking library
55  */
56 struct net_state {
57     uint64_t queueid;
58     const char *cardname;
59     net_flags_t flags;
60     bool initialized;
61
62     /* DHCP timer events */
63     uint64_t dhcp_ticks;
64     struct periodic_event dhcp_timer;
65     bool dhcp_done;
66     bool dhcp_running;
67
68     bool arp_running;
69     bool arp_connected;
70     uint64_t arp_triggerid;
71     struct net_ARP_binding* arp;
72     collections_listnode *outstanding_arp;
73     struct periodic_event arp_send;
74
75     struct waitset *waitset;
76
77     struct devq *queue;
78     struct net_buf_pool *pool;
79     struct netif netif;
80     bool hw_filter;
81     struct net_filter_state* filter;
82
83   //  ip4_addr_t ipaddr, netmask, gw;
84 };
85
86 extern struct net_state state;
87
88 static inline struct net_state *get_default_net_state(void)
89 {
90     return &state;
91 }
92
93
94 struct net_buf_pool;
95
96 struct net_buf_p
97 {
98     struct pbuf_custom pbuf;
99 #if NETBUF_DEBGUG
100     uint64_t flags;
101     bool allocated;
102     bool enqueued;
103 #endif
104     lpaddr_t offset;
105     void *vbase;
106     struct net_buf_region *region;
107 #if BENCH_LWIP_STACK
108     cycles_t timestamp;
109     cycles_t timestamp2;
110 #endif
111 #if NETBUF_DEBGUG
112     uint64_t magic;
113 #endif
114 };
115
116 struct net_buf_region
117 {
118     void *vbase;
119     struct frame_identity frame;
120     struct capref framecap;
121     struct net_buf_region *next;
122     size_t buffer_size;
123     uint8_t buffer_shift;
124     regionid_t regionid;
125     struct net_buf_pool *pool;
126     struct net_buf_p *netbufs;    /// array of netbufs
127 };
128
129 struct net_buf_pool
130 {
131     struct net_buf_region *regions;
132     struct devq *dev_q;
133     struct pbuf *pbufs;
134     // stats
135     size_t buffer_count;
136     size_t buffer_free;
137
138 };
139
140 #endif /* LIB_NET_INCLUDE_NETWORKING_INTERNAL_H_ */