/*
 * Copyright 2008, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 *
 *     http://www.apache.org/licenses/LICENSE-2.0 
 *
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License.
 */

#ifndef _WIFI_DHCP_H_
#define _WIFI_DHCP_H_

#include <sys/types.h>

#define PORT_BOOTP_SERVER 67
#define PORT_BOOTP_CLIENT 68

/* RFC 2131 p 9 */
typedef struct dhcp_msg dhcp_msg;

#define OP_BOOTREQUEST 1
#define OP_BOOTREPLY   2

#define FLAGS_BROADCAST 0x8000

#define HTYPE_ETHER    1

struct dhcp_msg
{
    uint8_t op;           /* BOOTREQUEST / BOOTREPLY    */
    uint8_t htype;        /* hw addr type               */
    uint8_t hlen;         /* hw addr len                */
    uint8_t hops;         /* client set to 0            */
    
    uint32_t xid;         /* transaction id             */

    uint16_t secs;        /* seconds since start of acq */
    uint16_t flags;

    uint32_t ciaddr;      /* client IP addr             */
    uint32_t yiaddr;      /* your (client) IP addr      */
    uint32_t siaddr;      /* ip addr of next server     */
                          /* (DHCPOFFER and DHCPACK)    */
    uint32_t giaddr;      /* relay agent IP addr        */

    uint8_t chaddr[16];  /* client hw addr             */
    char sname[64];      /* asciiz server hostname     */
    char file[128];      /* asciiz boot file name      */

    uint8_t options[1024];  /* optional parameters        */
};

#define DHCP_MSG_FIXED_SIZE 236

/* first four bytes of options are a cookie to indicate that
** the payload are DHCP options as opposed to some other BOOTP
** extension.
*/
#define OPT_COOKIE1          0x63
#define OPT_COOKIE2          0x82
#define OPT_COOKIE3          0x53
#define OPT_COOKIE4          0x63

/* BOOTP/DHCP options - see RFC 2132 */
#define OPT_PAD              0

#define OPT_SUBNET_MASK      1     /* 4 <ipaddr> */
#define OPT_TIME_OFFSET      2     /* 4 <seconds> */
#define OPT_GATEWAY          3     /* 4*n <ipaddr> * n */
#define OPT_DNS              6     /* 4*n <ipaddr> * n */
#define OPT_DOMAIN_NAME      15    /* n <domainnamestring> */
#define OPT_BROADCAST_ADDR   28    /* 4 <ipaddr> */

#define OPT_REQUESTED_IP     50    /* 4 <ipaddr> */
#define OPT_LEASE_TIME       51    /* 4 <seconds> */
#define OPT_MESSAGE_TYPE     53    /* 1 <msgtype> */
#define OPT_SERVER_ID        54    /* 4 <ipaddr> */
#define OPT_PARAMETER_LIST   55    /* n <optcode> * n */
#define OPT_MESSAGE          56    /* n <errorstring> */
#define OPT_CLASS_ID         60    /* n <opaque> */
#define OPT_CLIENT_ID        61    /* n <opaque> */
#define OPT_END              255

/* DHCP message types */
#define DHCPDISCOVER         1
#define DHCPOFFER            2
#define DHCPREQUEST          3
#define DHCPDECLINE          4
#define DHCPACK              5
#define DHCPNAK              6
#define DHCPRELEASE          7
#define DHCPINFORM           8

int init_dhcp_discover_msg(dhcp_msg *msg, void *hwaddr, uint32_t xid);

int init_dhcp_request_msg(dhcp_msg *msg, void *hwaddr, uint32_t xid,
                          uint32_t ipaddr, uint32_t serveraddr);

#endif
