#ifndef _GPXE_DHCPPKT_H #define _GPXE_DHCPPKT_H /** @file * * DHCP packets * */ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include /** * 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 /* _GPXE_DHCPPKT_H */