1 | /* SPDX-License-Identifier: BSD-3-Clause */ |
2 | /* bootp/dhcp defines */ |
3 | |
4 | #ifndef SLIRP_BOOTP_H |
5 | #define SLIRP_BOOTP_H |
6 | |
7 | #define BOOTP_SERVER 67 |
8 | #define BOOTP_CLIENT 68 |
9 | |
10 | #define BOOTP_REQUEST 1 |
11 | #define BOOTP_REPLY 2 |
12 | |
13 | #define RFC1533_COOKIE 99, 130, 83, 99 |
14 | #define RFC1533_PAD 0 |
15 | #define RFC1533_NETMASK 1 |
16 | #define RFC1533_TIMEOFFSET 2 |
17 | #define RFC1533_GATEWAY 3 |
18 | #define RFC1533_TIMESERVER 4 |
19 | #define RFC1533_IEN116NS 5 |
20 | #define RFC1533_DNS 6 |
21 | #define RFC1533_LOGSERVER 7 |
22 | #define RFC1533_COOKIESERVER 8 |
23 | #define RFC1533_LPRSERVER 9 |
24 | #define RFC1533_IMPRESSSERVER 10 |
25 | #define RFC1533_RESOURCESERVER 11 |
26 | #define RFC1533_HOSTNAME 12 |
27 | #define RFC1533_BOOTFILESIZE 13 |
28 | #define RFC1533_MERITDUMPFILE 14 |
29 | #define RFC1533_DOMAINNAME 15 |
30 | #define RFC1533_SWAPSERVER 16 |
31 | #define RFC1533_ROOTPATH 17 |
32 | #define RFC1533_EXTENSIONPATH 18 |
33 | #define RFC1533_IPFORWARDING 19 |
34 | #define RFC1533_IPSOURCEROUTING 20 |
35 | #define RFC1533_IPPOLICYFILTER 21 |
36 | #define RFC1533_IPMAXREASSEMBLY 22 |
37 | #define RFC1533_IPTTL 23 |
38 | #define RFC1533_IPMTU 24 |
39 | #define RFC1533_IPMTUPLATEAU 25 |
40 | #define RFC1533_INTMTU 26 |
41 | #define RFC1533_INTLOCALSUBNETS 27 |
42 | #define RFC1533_INTBROADCAST 28 |
43 | #define RFC1533_INTICMPDISCOVER 29 |
44 | #define RFC1533_INTICMPRESPOND 30 |
45 | #define RFC1533_INTROUTEDISCOVER 31 |
46 | #define RFC1533_INTROUTESOLICIT 32 |
47 | #define RFC1533_INTSTATICROUTES 33 |
48 | #define RFC1533_LLTRAILERENCAP 34 |
49 | #define RFC1533_LLARPCACHETMO 35 |
50 | #define RFC1533_LLETHERNETENCAP 36 |
51 | #define RFC1533_TCPTTL 37 |
52 | #define RFC1533_TCPKEEPALIVETMO 38 |
53 | #define RFC1533_TCPKEEPALIVEGB 39 |
54 | #define RFC1533_NISDOMAIN 40 |
55 | #define RFC1533_NISSERVER 41 |
56 | #define RFC1533_NTPSERVER 42 |
57 | #define RFC1533_VENDOR 43 |
58 | #define RFC1533_NBNS 44 |
59 | #define RFC1533_NBDD 45 |
60 | #define RFC1533_NBNT 46 |
61 | #define RFC1533_NBSCOPE 47 |
62 | #define RFC1533_XFS 48 |
63 | #define RFC1533_XDM 49 |
64 | |
65 | #define RFC2132_REQ_ADDR 50 |
66 | #define RFC2132_LEASE_TIME 51 |
67 | #define RFC2132_MSG_TYPE 53 |
68 | #define RFC2132_SRV_ID 54 |
69 | #define RFC2132_PARAM_LIST 55 |
70 | #define RFC2132_MESSAGE 56 |
71 | #define RFC2132_MAX_SIZE 57 |
72 | #define RFC2132_RENEWAL_TIME 58 |
73 | #define RFC2132_REBIND_TIME 59 |
74 | #define RFC2132_TFTP_SERVER_NAME 66 |
75 | |
76 | #define DHCPDISCOVER 1 |
77 | #define DHCPOFFER 2 |
78 | #define DHCPREQUEST 3 |
79 | #define DHCPACK 5 |
80 | #define DHCPNAK 6 |
81 | |
82 | #define RFC1533_VENDOR_MAJOR 0 |
83 | #define RFC1533_VENDOR_MINOR 0 |
84 | |
85 | #define RFC1533_VENDOR_MAGIC 128 |
86 | #define RFC1533_VENDOR_ADDPARM 129 |
87 | #define RFC1533_VENDOR_ETHDEV 130 |
88 | #define RFC1533_VENDOR_HOWTO 132 |
89 | #define RFC1533_VENDOR_MNUOPTS 160 |
90 | #define RFC1533_VENDOR_SELECTION 176 |
91 | #define RFC1533_VENDOR_MOTD 184 |
92 | #define RFC1533_VENDOR_NUMOFMOTD 8 |
93 | #define RFC1533_VENDOR_IMG 192 |
94 | #define RFC1533_VENDOR_NUMOFIMG 16 |
95 | |
96 | #define RFC1533_END 255 |
97 | #define BOOTP_VENDOR_LEN 64 |
98 | #define DHCP_OPT_LEN 312 |
99 | |
100 | struct bootp_t { |
101 | struct ip ip; |
102 | struct udphdr udp; |
103 | uint8_t bp_op; |
104 | uint8_t bp_htype; |
105 | uint8_t bp_hlen; |
106 | uint8_t bp_hops; |
107 | uint32_t bp_xid; |
108 | uint16_t bp_secs; |
109 | uint16_t unused; |
110 | struct in_addr bp_ciaddr; |
111 | struct in_addr bp_yiaddr; |
112 | struct in_addr bp_siaddr; |
113 | struct in_addr bp_giaddr; |
114 | uint8_t bp_hwaddr[16]; |
115 | uint8_t bp_sname[64]; |
116 | uint8_t bp_file[128]; |
117 | uint8_t bp_vend[DHCP_OPT_LEN]; |
118 | }; |
119 | |
120 | typedef struct { |
121 | uint16_t allocated; |
122 | uint8_t macaddr[6]; |
123 | } BOOTPClient; |
124 | |
125 | #define NB_BOOTP_CLIENTS 16 |
126 | |
127 | void bootp_input(struct mbuf *m); |
128 | |
129 | #endif |
130 | |