#ifndef included_vnet_dhcp4_packet_h
#define included_vnet_dhcp4_packet_h

/*
 * DHCP packet format
 *
 * Copyright (c) 2013 Cisco and/or its affiliates.
 * 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.
 */
#include <vnet/ip/ip4_packet.h>

typedef struct
{
  u8 opcode;			/* 1 = request, 2 = reply */
  u8 hardware_type;		/* 1 = ethernet */
  u8 hardware_address_length;
  u8 hops;
  u32 transaction_identifier;
  u16 seconds;
  u16 flags;
#define DHCP_FLAG_BROADCAST (1<<15)
  ip4_address_t client_ip_address;
  ip4_address_t your_ip_address;	/* use this one */
  ip4_address_t server_ip_address;
  ip4_address_t gateway_ip_address;	/* use option 3, not this one */
  u8 client_hardware_address[16];
  u8 server_name[64];
  u8 boot_filename[128];
  ip4_address_t magic_cookie;
  u8 options[0];
} dhcp_header_t;

typedef struct
{
  u8 option;
  u8 length;
  union
  {
    u8 data[0];
    u32 data_as_u32[0];
  };
} __attribute__ ((packed)) dhcp_option_t;

typedef enum
{
  DHCP_PACKET_DISCOVER = 1,
  DHCP_PACKET_OFFER,
  DHCP_PACKET_REQUEST,
  DHCP_PACKET_ACK = 5,
  DHCP_PACKET_NAK,
} dhcp_packet_type_t;

typedef enum dhcp_packet_option_t_
{
  DHCP_PACKET_OPTION_MSG_TYPE = 53,
} dhcp_packet_option_t;

/* charming antique: 99.130.83.99 is the dhcp magic cookie */
#define DHCP_MAGIC (clib_host_to_net_u32(0x63825363))

#endif /* included_vnet_dhcp4_packet_h */

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */
