#include <freeradius-devel/pair.h>
#include <freeradius-devel/types.h>
#include <freeradius-devel/dhcpv4/dhcpv4.h>
+#include <freeradius-devel/dhcpv4.h>
/** Retrieve a DHCP option from a raw packet buffer
*
* If option Overload is present in the 'options' field, then fields 'file' and/or 'sname'
* are used to hold more options. They are partitioned and must be interpreted in sequence.
*/
- vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, 52, TAG_ANY);
+ vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, FR_DHCP_OVERLOAD, TAG_ANY);
if (vp) {
if ((vp->vp_uint8 & 1) == 1) {
/*
}
p += len;
}
- fr_pair_delete_by_num(&head, DHCP_MAGIC_VENDOR, 269, TAG_ANY);
+ fr_pair_delete_by_num(&head, DHCP_MAGIC_VENDOR, FR_DHCP_BOOT_FILENAME, TAG_ANY);
}
if ((vp->vp_uint8 & 2) == 2) {
/*
}
p += len;
}
- fr_pair_delete_by_num(&head, DHCP_MAGIC_VENDOR, 268, TAG_ANY);
+ fr_pair_delete_by_num(&head, DHCP_MAGIC_VENDOR, FR_DHCP_SERVER_HOST_NAME, TAG_ANY);
}
}
}
/*
* DHCP Opcode is request
*/
- vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, 256, TAG_ANY);
+ vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, FR_DHCP_OPCODE, TAG_ANY);
if (vp && vp->vp_uint8 == 1) {
/*
* Vendor is "MSFT 98"
*/
- vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, 60, TAG_ANY);
+ vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, FR_DHCP_VENDOR_CLASS_IDENTIFIER, TAG_ANY);
if (vp && (strcmp(vp->vp_strvalue, "MSFT 98") == 0)) {
- vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, 262, TAG_ANY);
+ vp = fr_pair_find_by_num(head, DHCP_MAGIC_VENDOR, FR_DHCP_FLAGS, TAG_ANY);
/*
* Reply should be broadcast.
* Client can request a LARGER size, but not a smaller
* one. They also cannot request a size larger than MTU.
*/
- maxms = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 57, TAG_ANY);
- mtu = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 26, TAG_ANY);
+ maxms = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_DHCP_MAXIMUM_MSG_SIZE, TAG_ANY);
+ mtu = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_INTERFACE_MTU_SIZE, TAG_ANY);
if (mtu && (mtu->vp_uint16 < DEFAULT_PACKET_SIZE)) {
fr_strerror_printf("Client says MTU is smaller than minimum permitted by the specification");
if (packet->code == 0) packet->code = FR_DHCPV4_NAK;
/* store xid */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 260, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_TRANSACTION_ID, TAG_ANY))) {
packet->id = vp->vp_uint32;
} else {
packet->id = fr_rand();
*/
/* DHCP-DHCP-Maximum-Msg-Size */
- vp = fr_pair_find_by_num(packet->vps, 57, DHCP_MAGIC_VENDOR, TAG_ANY);
+ vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_DHCP_MAXIMUM_MSG_SIZE, TAG_ANY);
if (vp && (vp->vp_uint32 > mms)) {
mms = vp->vp_uint32;
}
#endif
- vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 256, TAG_ANY);
+ vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_OPCODE, TAG_ANY);
if (vp) {
*p++ = vp->vp_uint32 & 0xff;
} else {
}
/* DHCP-Hardware-Type */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 257, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_HARDWARE_TYPE, TAG_ANY))) {
*p = vp->vp_uint8;
}
p += 1;
/* DHCP-Hardware-Address-len */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 258, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_HARDWARE_ADDRESS_LENGTH, TAG_ANY))) {
*p = vp->vp_uint8;
}
p += 1;
/* DHCP-Hop-Count */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 259, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_HOP_COUNT, TAG_ANY))) {
*p = vp->vp_uint8;
}
p++;
p += 4;
/* DHCP-Number-of-Seconds */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 261, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_NUMBER_OF_SECONDS, TAG_ANY))) {
svalue = htons(vp->vp_uint16);
memcpy(p, &svalue, 2);
}
p += 2;
/* DHCP-Flags */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 262, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_FLAGS, TAG_ANY))) {
svalue = htons(vp->vp_uint16);
memcpy(p, &svalue, 2);
}
p += 2;
/* DHCP-Client-IP-Address */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 263, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_CLIENT_IP_ADDRESS, TAG_ANY))) {
memcpy(p, &vp->vp_ipv4addr, 4);
}
p += 4;
/* DHCP-Your-IP-address */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 264, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_YOUR_IP_ADDRESS, TAG_ANY))) {
lvalue = vp->vp_ipv4addr;
} else {
lvalue = htonl(INADDR_ANY);
p += 4;
/* DHCP-Server-IP-Address */
- vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 265, TAG_ANY);
+ vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_SERVER_IP_ADDRESS, TAG_ANY);
if (vp) {
lvalue = vp->vp_ipv4addr;
} else {
/*
* DHCP-Gateway-IP-Address
*/
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 266, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_GATEWAY_IP_ADDRESS, TAG_ANY))) {
lvalue = vp->vp_ipv4addr;
} else {
lvalue = htonl(INADDR_ANY);
p += 4;
/* DHCP-Client-Hardware-Address */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 267, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_CLIENT_HARDWARE_ADDRESS, TAG_ANY))) {
if (vp->vp_type == FR_TYPE_ETHERNET) {
/*
* Ensure that we mark the packet as being Ethernet.
p += DHCP_CHADDR_LEN;
/* DHCP-Server-Host-Name */
- if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 268, TAG_ANY))) {
+ if ((vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_SERVER_HOST_NAME, TAG_ANY))) {
if (vp->vp_length > DHCP_SNAME_LEN) {
memcpy(p, vp->vp_strvalue, DHCP_SNAME_LEN);
} else {
*/
/* DHCP-Boot-Filename */
- vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, 269, TAG_ANY);
+ vp = fr_pair_find_by_num(packet->vps, DHCP_MAGIC_VENDOR, FR_DHCP_BOOT_FILENAME, TAG_ANY);
if (vp) {
if (vp->vp_length > DHCP_FILE_LEN) {
memcpy(p, vp->vp_strvalue, DHCP_FILE_LEN);