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