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 100struct 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 120typedef struct { 121 uint16_t allocated; 122 uint8_t macaddr[6]; 123} BOOTPClient; 124 125#define NB_BOOTP_CLIENTS 16 126 127void bootp_input(struct mbuf *m); 128 129#endif 130