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