62 lines
1.7 KiB
C
62 lines
1.7 KiB
C
|
|
#ifndef included_vnet_dhcp_packet_h
|
||
|
|
#define included_vnet_dhcp_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_type_t;
|
||
|
|
|
||
|
|
/* charming antique: 99.130.83.99 is the dhcp magic cookie */
|
||
|
|
#define DHCP_MAGIC (clib_host_to_net_u32(0x63825363))
|
||
|
|
|
||
|
|
#endif /* included_vnet_dhcp_packet_h */
|