diff options
Diffstat (limited to 'src/include/ipxe/dhcppkt.h')
-rw-r--r-- | src/include/ipxe/dhcppkt.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/include/ipxe/dhcppkt.h b/src/include/ipxe/dhcppkt.h new file mode 100644 index 000000000..5709cc7d1 --- /dev/null +++ b/src/include/ipxe/dhcppkt.h @@ -0,0 +1,64 @@ +#ifndef _IPXE_DHCPPKT_H +#define _IPXE_DHCPPKT_H + +/** @file + * + * DHCP packets + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/dhcp.h> +#include <ipxe/dhcpopts.h> +#include <ipxe/refcnt.h> + +/** + * A DHCP packet + * + */ +struct dhcp_packet { + /** Reference counter */ + struct refcnt refcnt; + /** The DHCP packet contents */ + struct dhcphdr *dhcphdr; + /** Maximum length of the DHCP packet buffer */ + size_t max_len; + /** Used length of the DHCP packet buffer */ + size_t len; + /** DHCP options */ + struct dhcp_options options; + /** Settings interface */ + struct settings settings; +}; + +/** + * Increment reference count on DHCP packet + * + * @v dhcppkt DHCP packet + * @ret dhcppkt DHCP packet + */ +static inline __attribute__ (( always_inline )) struct dhcp_packet * +dhcppkt_get ( struct dhcp_packet *dhcppkt ) { + ref_get ( &dhcppkt->refcnt ); + return dhcppkt; +} + +/** + * Decrement reference count on DHCP packet + * + * @v dhcppkt DHCP packet + */ +static inline __attribute__ (( always_inline )) void +dhcppkt_put ( struct dhcp_packet *dhcppkt ) { + ref_put ( &dhcppkt->refcnt ); +} + +extern int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag, + const void *data, size_t len ); +extern int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag, + void *data, size_t len ); +extern void dhcppkt_init ( struct dhcp_packet *dhcppkt, + struct dhcphdr *data, size_t len ); + +#endif /* _IPXE_DHCPPKT_H */ |