|  | @@ -11,6 +11,17 @@
 | 
		
	
		
			
			| 11 | 11 |   *
 | 
		
	
		
			
			| 12 | 12 |   */
 | 
		
	
		
			
			| 13 | 13 |  
 | 
		
	
		
			
			|  | 14 | +/**
 | 
		
	
		
			
			|  | 15 | + * @defgroup featurecat Feature categories
 | 
		
	
		
			
			|  | 16 | + * @{
 | 
		
	
		
			
			|  | 17 | + */
 | 
		
	
		
			
			|  | 18 | +
 | 
		
	
		
			
			|  | 19 | +#define FEATURE_PROTOCOL		01 /**< Network protocols */
 | 
		
	
		
			
			|  | 20 | +#define FEATURE_IMAGE			02 /**< Image formats */
 | 
		
	
		
			
			|  | 21 | +#define FEATURE_MISC			03 /**< Miscellaneous */
 | 
		
	
		
			
			|  | 22 | +
 | 
		
	
		
			
			|  | 23 | +/** @} */
 | 
		
	
		
			
			|  | 24 | +
 | 
		
	
		
			
			| 14 | 25 |  /**
 | 
		
	
		
			
			| 15 | 26 |   * @defgroup dhcpfeatures DHCP feature option tags
 | 
		
	
		
			
			| 16 | 27 |   *
 | 
		
	
	
		
			
			|  | @@ -20,50 +31,58 @@
 | 
		
	
		
			
			| 20 | 31 |   * @{
 | 
		
	
		
			
			| 21 | 32 |   */
 | 
		
	
		
			
			| 22 | 33 |  
 | 
		
	
		
			
			| 23 |  | -/** PXE API extensions */
 | 
		
	
		
			
			| 24 |  | -#define DHCP_EB_FEATURE_PXE_EXT 0x10
 | 
		
	
		
			
			| 25 |  | -
 | 
		
	
		
			
			| 26 |  | -/** iSCSI */
 | 
		
	
		
			
			| 27 |  | -#define DHCP_EB_FEATURE_ISCSI 0x11
 | 
		
	
		
			
			| 28 |  | -
 | 
		
	
		
			
			| 29 |  | -/** AoE */
 | 
		
	
		
			
			| 30 |  | -#define DHCP_EB_FEATURE_AOE 0x12
 | 
		
	
		
			
			| 31 |  | -
 | 
		
	
		
			
			| 32 |  | -/** HTTP */
 | 
		
	
		
			
			| 33 |  | -#define DHCP_EB_FEATURE_HTTP 0x13
 | 
		
	
		
			
			| 34 |  | -
 | 
		
	
		
			
			| 35 |  | -/** HTTPS */
 | 
		
	
		
			
			| 36 |  | -#define DHCP_EB_FEATURE_HTTPS 0x14
 | 
		
	
		
			
			|  | 34 | +#define DHCP_EB_FEATURE_PXE_EXT		0x10 /**< PXE API extensions */
 | 
		
	
		
			
			|  | 35 | +#define DHCP_EB_FEATURE_ISCSI		0x11 /**< iSCSI protocol */
 | 
		
	
		
			
			|  | 36 | +#define DHCP_EB_FEATURE_AOE		0x12 /**< AoE protocol */
 | 
		
	
		
			
			|  | 37 | +#define DHCP_EB_FEATURE_HTTP		0x13 /**< HTTP protocol */
 | 
		
	
		
			
			|  | 38 | +#define DHCP_EB_FEATURE_HTTPS		0x14 /**< HTTPS protocol */
 | 
		
	
		
			
			|  | 39 | +#define DHCP_EB_FEATURE_TFTP		0x15 /**< TFTP protocol */
 | 
		
	
		
			
			|  | 40 | +#define DHCP_EB_FEATURE_FTP		0x16 /**< FTP protocol */
 | 
		
	
		
			
			|  | 41 | +#define DHCP_EB_FEATURE_DNS		0x17 /**< DNS protocol */
 | 
		
	
		
			
			|  | 42 | +#define DHCP_EB_FEATURE_BZIMAGE		0x18 /**< bzImage format */
 | 
		
	
		
			
			|  | 43 | +#define DHCP_EB_FEATURE_MULTIBOOT	0x19 /**< Multiboot format */
 | 
		
	
		
			
			|  | 44 | +#define DHCP_EB_FEATURE_NBI		0x20 /**< NBI format */
 | 
		
	
		
			
			|  | 45 | +#define DHCP_EB_FEATURE_PXE		0x21 /**< PXE format */
 | 
		
	
		
			
			| 37 | 46 |  
 | 
		
	
		
			
			| 38 | 47 |  /** @} */
 | 
		
	
		
			
			| 39 | 48 |  
 | 
		
	
		
			
			| 40 | 49 |  /** Declare a feature code for DHCP */
 | 
		
	
		
			
			| 41 |  | -#define __dhcp_feature __table ( uint8_t, dhcp_features, 01 )
 | 
		
	
		
			
			|  | 50 | +#define __dhcp_feature( category )					    \
 | 
		
	
		
			
			|  | 51 | +	 __table ( uint8_t, dhcp_features, category )
 | 
		
	
		
			
			| 42 | 52 |  
 | 
		
	
		
			
			| 43 | 53 |  /** Construct a DHCP feature table entry */
 | 
		
	
		
			
			| 44 |  | -#define DHCP_FEATURE( feature_opt, version ) \
 | 
		
	
		
			
			| 45 |  | -	_DHCP_FEATURE ( OBJECT, feature_opt, version )
 | 
		
	
		
			
			| 46 |  | -#define _DHCP_FEATURE( _name, feature_opt, version ) \
 | 
		
	
		
			
			| 47 |  | -	__DHCP_FEATURE ( _name, feature_opt, version )
 | 
		
	
		
			
			| 48 |  | -#define __DHCP_FEATURE( _name, feature_opt, version )		\
 | 
		
	
		
			
			| 49 |  | -	uint8_t __dhcp_feature_ ## _name [] __dhcp_feature = {	\
 | 
		
	
		
			
			| 50 |  | -		feature_opt, DHCP_BYTE ( version )		\
 | 
		
	
		
			
			|  | 54 | +#define DHCP_FEATURE( category, feature_opt, version )			    \
 | 
		
	
		
			
			|  | 55 | +	_DHCP_FEATURE ( category, OBJECT, feature_opt, version )
 | 
		
	
		
			
			|  | 56 | +#define _DHCP_FEATURE( category, _name, feature_opt, version )		    \
 | 
		
	
		
			
			|  | 57 | +	__DHCP_FEATURE ( category, _name, feature_opt, version )
 | 
		
	
		
			
			|  | 58 | +#define __DHCP_FEATURE( category, _name, feature_opt, version )		    \
 | 
		
	
		
			
			|  | 59 | +	uint8_t __dhcp_feature_ ## _name [] __dhcp_feature ( category ) = { \
 | 
		
	
		
			
			|  | 60 | +		feature_opt, DHCP_BYTE ( version )			    \
 | 
		
	
		
			
			| 51 | 61 |  	};
 | 
		
	
		
			
			| 52 | 62 |  
 | 
		
	
		
			
			|  | 63 | +/** A named feature */
 | 
		
	
		
			
			|  | 64 | +struct feature {
 | 
		
	
		
			
			|  | 65 | +	/** Feature name */
 | 
		
	
		
			
			|  | 66 | +	char *name;
 | 
		
	
		
			
			|  | 67 | +};
 | 
		
	
		
			
			|  | 68 | +
 | 
		
	
		
			
			| 53 | 69 |  /** Declare a named feature */
 | 
		
	
		
			
			| 54 |  | -#define __feature_name __table ( char *, features, 01 )
 | 
		
	
		
			
			|  | 70 | +#define __feature_name( category )					    \
 | 
		
	
		
			
			|  | 71 | +	__table ( struct feature, features, category )
 | 
		
	
		
			
			| 55 | 72 |  
 | 
		
	
		
			
			| 56 | 73 |  /** Construct a named feature */
 | 
		
	
		
			
			| 57 |  | -#define FEATURE_NAME( text ) \
 | 
		
	
		
			
			| 58 |  | -	_FEATURE_NAME ( OBJECT, text )
 | 
		
	
		
			
			| 59 |  | -#define _FEATURE_NAME( _name, text ) \
 | 
		
	
		
			
			| 60 |  | -	__FEATURE_NAME ( _name, text )
 | 
		
	
		
			
			| 61 |  | -#define __FEATURE_NAME( _name, text )				\
 | 
		
	
		
			
			| 62 |  | -	char * __feature_ ## _name __feature_name = text;
 | 
		
	
		
			
			|  | 74 | +#define FEATURE_NAME( category, text )					    \
 | 
		
	
		
			
			|  | 75 | +	_FEATURE_NAME ( category, OBJECT, text )
 | 
		
	
		
			
			|  | 76 | +#define _FEATURE_NAME( category, _name, text )				    \
 | 
		
	
		
			
			|  | 77 | +	__FEATURE_NAME ( category, _name, text )
 | 
		
	
		
			
			|  | 78 | +#define __FEATURE_NAME( category, _name, text )				    \
 | 
		
	
		
			
			|  | 79 | +	struct feature __feature_ ## _name __feature_name ( category ) = {  \
 | 
		
	
		
			
			|  | 80 | +		.name = text,						    \
 | 
		
	
		
			
			|  | 81 | +	};
 | 
		
	
		
			
			| 63 | 82 |  
 | 
		
	
		
			
			| 64 | 83 |  /** Declare a feature */
 | 
		
	
		
			
			| 65 |  | -#define FEATURE( text, feature_opt, version )			\
 | 
		
	
		
			
			| 66 |  | -	FEATURE_NAME ( text );					\
 | 
		
	
		
			
			| 67 |  | -	DHCP_FEATURE ( feature_opt, version );
 | 
		
	
		
			
			|  | 84 | +#define FEATURE( category, text, feature_opt, version )			    \
 | 
		
	
		
			
			|  | 85 | +	FEATURE_NAME ( category, text );				    \
 | 
		
	
		
			
			|  | 86 | +	DHCP_FEATURE ( category, feature_opt, version );
 | 
		
	
		
			
			| 68 | 87 |  
 | 
		
	
		
			
			| 69 | 88 |  #endif /* _GPXE_FEATURES_H */
 |