1/* TODO: spec citations per structure */
2
3#include <drivers/e1000.h>
4#include <drivers/verifier.h>
5
6#define DV_STRUCT e1000_tx_desc
7dv_size(0x10);
8dv_align(1);
9dv_field(uint64_t, addr, 0x00);
10dv_field(uint16_t, length, 0x08);
11dv_field(uint8_t, cso, 0x0A);
12dv_field(uint8_t, css, 0x0D);
13dv_field(uint16_t, special, 0x0E);
14#undef DV_STRUCT
15
16#define DV_STRUCT e1000_rx_desc
17dv_size(0x10);
18dv_align(1);
19dv_field(uint64_t, addr, 0x00);
20dv_field(uint16_t, length, 0x08);
21dv_field(uint16_t, checksum, 0x0A);
22dv_field(uint8_t, errors, 0x0D);
23dv_field(uint16_t, special, 0x0E);
24#undef DV_STRUCT
25
26#define DV_STRUCT eth_hdr
27dv_size(0x0E);
28dv_align(1);
29dv_field(uint8_t[6], dest, 0x00);
30dv_field(uint8_t[6], src, 0x06);
31dv_field(uint16_t, ethertype, 0x0C);
32#undef DV_STRUCT
33
34#define DV_STRUCT ipv4_hdr
35dv_size(0x14);
36dv_align(1);
37dv_field(uint8_t, version_ihl, 0x00);
38dv_field(uint8_t, tos, 0x01);
39dv_field(uint16_t, total_length, 0x02);
40dv_field(uint16_t, id, 0x04);
41dv_field(uint16_t, flags_fragment, 0x06);
42dv_field(uint8_t, ttl, 0x08);
43dv_field(uint8_t, protocol, 0x09);
44dv_field(uint16_t, checksum, 0x0A);
45dv_field(uint32_t, src_ip, 0x0C);
46dv_field(uint32_t, dest_ip, 0x10);
47#undef DV_STRUCT
48
49#define DV_STRUCT icmp_hdr
50dv_size(0x08);
51dv_align(1);
52dv_field(uint8_t, type, 0x00);
53dv_field(uint8_t, code, 0x01);
54dv_field(uint16_t, checksum, 0x02);
55dv_field(uint16_t, identifier, 0x04);
56dv_field(uint16_t, sequence, 0x06);
57#undef DV_STRUCT
58