1*00c7fec1SAndroid Build Coastguard Worker /* 2*00c7fec1SAndroid Build Coastguard Worker * Copyright 2008, The Android Open Source Project 3*00c7fec1SAndroid Build Coastguard Worker * 4*00c7fec1SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*00c7fec1SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*00c7fec1SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*00c7fec1SAndroid Build Coastguard Worker * 8*00c7fec1SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*00c7fec1SAndroid Build Coastguard Worker * 10*00c7fec1SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*00c7fec1SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*00c7fec1SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*00c7fec1SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*00c7fec1SAndroid Build Coastguard Worker * limitations under the License. 15*00c7fec1SAndroid Build Coastguard Worker */ 16*00c7fec1SAndroid Build Coastguard Worker 17*00c7fec1SAndroid Build Coastguard Worker #ifndef _WIFI_DHCP_H_ 18*00c7fec1SAndroid Build Coastguard Worker #define _WIFI_DHCP_H_ 19*00c7fec1SAndroid Build Coastguard Worker 20*00c7fec1SAndroid Build Coastguard Worker #include <sys/types.h> 21*00c7fec1SAndroid Build Coastguard Worker 22*00c7fec1SAndroid Build Coastguard Worker #define PORT_BOOTP_SERVER 67 23*00c7fec1SAndroid Build Coastguard Worker #define PORT_BOOTP_CLIENT 68 24*00c7fec1SAndroid Build Coastguard Worker 25*00c7fec1SAndroid Build Coastguard Worker /* RFC 2131 p 9 */ 26*00c7fec1SAndroid Build Coastguard Worker typedef struct dhcp_msg dhcp_msg; 27*00c7fec1SAndroid Build Coastguard Worker 28*00c7fec1SAndroid Build Coastguard Worker #define OP_BOOTREQUEST 1 29*00c7fec1SAndroid Build Coastguard Worker #define OP_BOOTREPLY 2 30*00c7fec1SAndroid Build Coastguard Worker 31*00c7fec1SAndroid Build Coastguard Worker #define FLAGS_BROADCAST 0x8000 32*00c7fec1SAndroid Build Coastguard Worker 33*00c7fec1SAndroid Build Coastguard Worker #define HTYPE_ETHER 1 34*00c7fec1SAndroid Build Coastguard Worker 35*00c7fec1SAndroid Build Coastguard Worker struct dhcp_msg 36*00c7fec1SAndroid Build Coastguard Worker { 37*00c7fec1SAndroid Build Coastguard Worker uint8_t op; /* BOOTREQUEST / BOOTREPLY */ 38*00c7fec1SAndroid Build Coastguard Worker uint8_t htype; /* hw addr type */ 39*00c7fec1SAndroid Build Coastguard Worker uint8_t hlen; /* hw addr len */ 40*00c7fec1SAndroid Build Coastguard Worker uint8_t hops; /* client set to 0 */ 41*00c7fec1SAndroid Build Coastguard Worker 42*00c7fec1SAndroid Build Coastguard Worker uint32_t xid; /* transaction id */ 43*00c7fec1SAndroid Build Coastguard Worker 44*00c7fec1SAndroid Build Coastguard Worker uint16_t secs; /* seconds since start of acq */ 45*00c7fec1SAndroid Build Coastguard Worker uint16_t flags; 46*00c7fec1SAndroid Build Coastguard Worker 47*00c7fec1SAndroid Build Coastguard Worker uint32_t ciaddr; /* client IP addr */ 48*00c7fec1SAndroid Build Coastguard Worker uint32_t yiaddr; /* your (client) IP addr */ 49*00c7fec1SAndroid Build Coastguard Worker uint32_t siaddr; /* ip addr of next server */ 50*00c7fec1SAndroid Build Coastguard Worker /* (DHCPOFFER and DHCPACK) */ 51*00c7fec1SAndroid Build Coastguard Worker uint32_t giaddr; /* relay agent IP addr */ 52*00c7fec1SAndroid Build Coastguard Worker 53*00c7fec1SAndroid Build Coastguard Worker uint8_t chaddr[16]; /* client hw addr */ 54*00c7fec1SAndroid Build Coastguard Worker char sname[64]; /* asciiz server hostname */ 55*00c7fec1SAndroid Build Coastguard Worker char file[128]; /* asciiz boot file name */ 56*00c7fec1SAndroid Build Coastguard Worker 57*00c7fec1SAndroid Build Coastguard Worker uint8_t options[1024]; /* optional parameters */ 58*00c7fec1SAndroid Build Coastguard Worker }; 59*00c7fec1SAndroid Build Coastguard Worker 60*00c7fec1SAndroid Build Coastguard Worker #define DHCP_MSG_FIXED_SIZE 236 61*00c7fec1SAndroid Build Coastguard Worker 62*00c7fec1SAndroid Build Coastguard Worker /* first four bytes of options are a cookie to indicate that 63*00c7fec1SAndroid Build Coastguard Worker ** the payload are DHCP options as opposed to some other BOOTP 64*00c7fec1SAndroid Build Coastguard Worker ** extension. 65*00c7fec1SAndroid Build Coastguard Worker */ 66*00c7fec1SAndroid Build Coastguard Worker #define OPT_COOKIE1 0x63 67*00c7fec1SAndroid Build Coastguard Worker #define OPT_COOKIE2 0x82 68*00c7fec1SAndroid Build Coastguard Worker #define OPT_COOKIE3 0x53 69*00c7fec1SAndroid Build Coastguard Worker #define OPT_COOKIE4 0x63 70*00c7fec1SAndroid Build Coastguard Worker 71*00c7fec1SAndroid Build Coastguard Worker /* BOOTP/DHCP options - see RFC 2132 */ 72*00c7fec1SAndroid Build Coastguard Worker #define OPT_PAD 0 73*00c7fec1SAndroid Build Coastguard Worker 74*00c7fec1SAndroid Build Coastguard Worker #define OPT_SUBNET_MASK 1 /* 4 <ipaddr> */ 75*00c7fec1SAndroid Build Coastguard Worker #define OPT_TIME_OFFSET 2 /* 4 <seconds> */ 76*00c7fec1SAndroid Build Coastguard Worker #define OPT_GATEWAY 3 /* 4*n <ipaddr> * n */ 77*00c7fec1SAndroid Build Coastguard Worker #define OPT_DNS 6 /* 4*n <ipaddr> * n */ 78*00c7fec1SAndroid Build Coastguard Worker #define OPT_DOMAIN_NAME 15 /* n <domainnamestring> */ 79*00c7fec1SAndroid Build Coastguard Worker #define OPT_BROADCAST_ADDR 28 /* 4 <ipaddr> */ 80*00c7fec1SAndroid Build Coastguard Worker 81*00c7fec1SAndroid Build Coastguard Worker #define OPT_REQUESTED_IP 50 /* 4 <ipaddr> */ 82*00c7fec1SAndroid Build Coastguard Worker #define OPT_LEASE_TIME 51 /* 4 <seconds> */ 83*00c7fec1SAndroid Build Coastguard Worker #define OPT_MESSAGE_TYPE 53 /* 1 <msgtype> */ 84*00c7fec1SAndroid Build Coastguard Worker #define OPT_SERVER_ID 54 /* 4 <ipaddr> */ 85*00c7fec1SAndroid Build Coastguard Worker #define OPT_PARAMETER_LIST 55 /* n <optcode> * n */ 86*00c7fec1SAndroid Build Coastguard Worker #define OPT_MESSAGE 56 /* n <errorstring> */ 87*00c7fec1SAndroid Build Coastguard Worker #define OPT_CLASS_ID 60 /* n <opaque> */ 88*00c7fec1SAndroid Build Coastguard Worker #define OPT_CLIENT_ID 61 /* n <opaque> */ 89*00c7fec1SAndroid Build Coastguard Worker #define OPT_END 255 90*00c7fec1SAndroid Build Coastguard Worker 91*00c7fec1SAndroid Build Coastguard Worker /* DHCP message types */ 92*00c7fec1SAndroid Build Coastguard Worker #define DHCPDISCOVER 1 93*00c7fec1SAndroid Build Coastguard Worker #define DHCPOFFER 2 94*00c7fec1SAndroid Build Coastguard Worker #define DHCPREQUEST 3 95*00c7fec1SAndroid Build Coastguard Worker #define DHCPDECLINE 4 96*00c7fec1SAndroid Build Coastguard Worker #define DHCPACK 5 97*00c7fec1SAndroid Build Coastguard Worker #define DHCPNAK 6 98*00c7fec1SAndroid Build Coastguard Worker #define DHCPRELEASE 7 99*00c7fec1SAndroid Build Coastguard Worker #define DHCPINFORM 8 100*00c7fec1SAndroid Build Coastguard Worker 101*00c7fec1SAndroid Build Coastguard Worker int init_dhcp_discover_msg(dhcp_msg *msg, void *hwaddr, uint32_t xid); 102*00c7fec1SAndroid Build Coastguard Worker 103*00c7fec1SAndroid Build Coastguard Worker int init_dhcp_request_msg(dhcp_msg *msg, void *hwaddr, uint32_t xid, 104*00c7fec1SAndroid Build Coastguard Worker uint32_t ipaddr, uint32_t serveraddr); 105*00c7fec1SAndroid Build Coastguard Worker 106*00c7fec1SAndroid Build Coastguard Worker #endif 107