Files
vpp/src/plugins/dhcp/dhcp4_packet.h
Neale Ranns 6bcc6a4557 dhcp: fix crash on unicast renewal send
Type: fix

- when the addresses were learnt a copy of the client was sent to the
main thread, this meant the unicast adjacecny was saved on the copy
not on the original.
- Add logging.
- Improve the proxy-node that hands the clint packets so the DHCP
packets are traced.
 - allow a renewal to configure new address data

Change-Id: I6ab0afcccbc4a1cdefdd1b8beeda8fc7ba20ec1f
Signed-off-by: Neale Ranns <nranns@cisco.com>
2019-10-25 17:56:06 +00:00

85 lines
2.1 KiB
C

#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 option;
u8 length;
union
{
u8 data[0];
u32 data_as_u32[0];
};
} __attribute__ ((packed)) dhcp_option_t;
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;
dhcp_option_t options[0];
} dhcp_header_t;
extern u8 *format_dhcp_header (u8 * s, va_list * args);
typedef enum
{
DHCP_PACKET_DISCOVER = 1,
DHCP_PACKET_OFFER,
DHCP_PACKET_REQUEST,
DHCP_PACKET_ACK = 5,
DHCP_PACKET_NAK,
} dhcp_packet_type_t;
extern u8 *format_dhcp_packet_type (u8 * s, va_list * args);
typedef enum dhcp_packet_option_t_
{
DHCP_PACKET_OPTION_MSG_TYPE = 53,
DHCP_PACKET_OPTION_END = 0xff,
} 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:
*/