INET numbers and #defines
[akaros.git] / kern / arch / i686 / nic_common.h
1 #ifndef ROS_INC_NIC_COMMON_H
2 #define ROS_INC_NIC_COMMON_H
3
4 #include <ros/common.h>
5 #include <trap.h>
6 #include <net.h>
7 #include <pmap.h>
8
9 // Packet sizes
10 #define MTU              1500
11 #define MAX_FRAME_SIZE   (MTU + 14)
12 #define MIN_FRAME_SIZE   60 // See the spec...
13
14 // Maximum packet buffers we can handle at any given time
15 #define MAX_PACKET_BUFFERS    32 //1024
16  
17 // Global send_frame function pointer
18 // Means we can only have one network card per system right now...
19 extern int (*send_frame)(const char *data, size_t len);
20
21 // Global variables for managing ethernet packets over a nic
22 // Again, since these are global for all network cards we are 
23 // limited to only one for now
24 extern unsigned char device_mac[6];
25 extern uint8_t eth_up;
26 extern uint32_t num_packet_buffers;
27 extern char* packet_buffers[MAX_PACKET_BUFFERS];
28 extern uint32_t packet_buffers_sizes[MAX_PACKET_BUFFERS];
29 extern uint32_t packet_buffers_head;
30 extern uint32_t packet_buffers_tail;
31 extern spinlock_t packet_buffers_lock; 
32
33 // Creates a new ethernet packet and puts the header on it
34 char* eth_wrap(const char* data, size_t len, char src_mac[6], 
35                char dest_mac[6], uint16_t eth_type);
36
37 struct ETH_Header {
38         char dest_mac[6];
39         char source_mac[6];
40         uint16_t eth_type;
41 };
42
43 struct eth_frame {
44         struct ETH_Header eth_head;
45         char data[MTU];
46 } __attribute__((packed));
47
48 #endif /* !ROS_INC_NIC_COMMON_H */