diff options
author | Yang Zhang <yang.z.zhang@intel.com> | 2015-08-28 09:58:54 +0800 |
---|---|---|
committer | Yang Zhang <yang.z.zhang@intel.com> | 2015-09-01 12:44:00 +0800 |
commit | e44e3482bdb4d0ebde2d8b41830ac2cdb07948fb (patch) | |
tree | 66b09f592c55df2878107a468a91d21506104d3f /qemu/roms/ipxe/src/include/ipxe/dhcpv6.h | |
parent | 9ca8dbcc65cfc63d6f5ef3312a33184e1d726e00 (diff) |
Add qemu 2.4.0
Change-Id: Ic99cbad4b61f8b127b7dc74d04576c0bcbaaf4f5
Signed-off-by: Yang Zhang <yang.z.zhang@intel.com>
Diffstat (limited to 'qemu/roms/ipxe/src/include/ipxe/dhcpv6.h')
-rw-r--r-- | qemu/roms/ipxe/src/include/ipxe/dhcpv6.h | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/qemu/roms/ipxe/src/include/ipxe/dhcpv6.h b/qemu/roms/ipxe/src/include/ipxe/dhcpv6.h new file mode 100644 index 000000000..2636b8ab2 --- /dev/null +++ b/qemu/roms/ipxe/src/include/ipxe/dhcpv6.h @@ -0,0 +1,227 @@ +#ifndef _IPXE_DHCPV6_H +#define _IPXE_DHCPV6_H + +/** @file + * + * Dynamic Host Configuration Protocol for IPv6 + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <stdint.h> +#include <ipxe/in.h> +#include <ipxe/uuid.h> + +/** DHCPv6 server port */ +#define DHCPV6_SERVER_PORT 547 + +/** DHCPv6 client port */ +#define DHCPV6_CLIENT_PORT 546 + +/** + * A DHCPv6 option + * + */ +struct dhcpv6_option { + /** Code */ + uint16_t code; + /** Length of the data field */ + uint16_t len; + /** Data */ + uint8_t data[0]; +} __attribute__ (( packed )); + +/** DHCP unique identifier based on UUID (DUID-UUID) */ +struct dhcpv6_duid_uuid { + /** Type */ + uint16_t type; + /** UUID */ + union uuid uuid; +} __attribute__ (( packed )); + +/** DHCP unique identifier based on UUID (DUID-UUID) */ +#define DHCPV6_DUID_UUID 4 + +/** DHCPv6 client or server identifier option */ +struct dhcpv6_duid_option { + /** Option header */ + struct dhcpv6_option header; + /** DHCP unique identifier (DUID) */ + uint8_t duid[0]; +} __attribute__ (( packed )); + +/** DHCPv6 client identifier option */ +#define DHCPV6_CLIENT_ID 1 + +/** DHCPv6 server identifier option */ +#define DHCPV6_SERVER_ID 2 + +/** DHCPv6 identity association for non-temporary address (IA_NA) option */ +struct dhcpv6_ia_na_option { + /** Option header */ + struct dhcpv6_option header; + /** Identity association identifier (IAID) */ + uint32_t iaid; + /** Renew time (in seconds) */ + uint32_t renew; + /** Rebind time (in seconds) */ + uint32_t rebind; + /** IA_NA options */ + struct dhcpv6_option options[0]; +} __attribute__ (( packed )); + +/** DHCPv6 identity association for non-temporary address (IA_NA) option */ +#define DHCPV6_IA_NA 3 + +/** DHCPv6 identity association address (IAADDR) option */ +struct dhcpv6_iaaddr_option { + /** Option header */ + struct dhcpv6_option header; + /** IPv6 address */ + struct in6_addr address; + /** Preferred lifetime (in seconds) */ + uint32_t preferred; + /** Valid lifetime (in seconds) */ + uint32_t valid; + /** IAADDR options */ + struct dhcpv6_option options[0]; +} __attribute__ (( packed )); + +/** DHCPv6 identity association address (IAADDR) option */ +#define DHCPV6_IAADDR 5 + +/** DHCPv6 option request option */ +struct dhcpv6_option_request_option { + /** Option header */ + struct dhcpv6_option header; + /** Requested options */ + uint16_t requested[0]; +} __attribute__ (( packed )); + +/** DHCPv6 option request option */ +#define DHCPV6_OPTION_REQUEST 6 + +/** DHCPv6 elapsed time option */ +struct dhcpv6_elapsed_time_option { + /** Option header */ + struct dhcpv6_option header; + /** Elapsed time, in centiseconds */ + uint16_t elapsed; +} __attribute__ (( packed )); + +/** DHCPv6 elapsed time option */ +#define DHCPV6_ELAPSED_TIME 8 + +/** DHCPv6 status code option */ +struct dhcpv6_status_code_option { + /** Option header */ + struct dhcpv6_option header; + /** Status code */ + uint16_t status; + /** Status message */ + char message[0]; +} __attribute__ (( packed )); + +/** DHCPv6 status code option */ +#define DHCPV6_STATUS_CODE 13 + +/** DHCPv6 user class */ +struct dhcpv6_user_class { + /** Length */ + uint16_t len; + /** User class string */ + char string[0]; +} __attribute__ (( packed )); + +/** DHCPv6 user class option */ +struct dhcpv6_user_class_option { + /** Option header */ + struct dhcpv6_option header; + /** User class */ + struct dhcpv6_user_class user_class[0]; +} __attribute__ (( packed )); + +/** DHCPv6 user class option */ +#define DHCPV6_USER_CLASS 15 + +/** DHCPv6 DNS recursive name server option */ +#define DHCPV6_DNS_SERVERS 23 + +/** DHCPv6 domain search list option */ +#define DHCPV6_DOMAIN_LIST 24 + +/** DHCPv6 bootfile URI option */ +#define DHCPV6_BOOTFILE_URL 59 + +/** DHCPv6 bootfile parameters option */ +#define DHCPV6_BOOTFILE_PARAM 60 + +/** DHCPv6 syslog server option + * + * This option code has not yet been assigned by IANA. Please update + * this definition once an option code has been assigned. + */ +#define DHCPV6_LOG_SERVERS 0xffffffffUL + +/** + * Any DHCPv6 option + * + */ +union dhcpv6_any_option { + struct dhcpv6_option header; + struct dhcpv6_duid_option duid; + struct dhcpv6_ia_na_option ia_na; + struct dhcpv6_iaaddr_option iaaddr; + struct dhcpv6_option_request_option option_request; + struct dhcpv6_elapsed_time_option elapsed_time; + struct dhcpv6_status_code_option status_code; + struct dhcpv6_user_class_option user_class; +}; + +/** + * A DHCPv6 header + * + */ +struct dhcpv6_header { + /** Message type */ + uint8_t type; + /** Transaction ID */ + uint8_t xid[3]; + /** Options */ + struct dhcpv6_option options[0]; +} __attribute__ (( packed )); + +/** DHCPv6 solicitation */ +#define DHCPV6_SOLICIT 1 + +/** DHCPv6 advertisement */ +#define DHCPV6_ADVERTISE 2 + +/** DHCPv6 request */ +#define DHCPV6_REQUEST 3 + +/** DHCPv6 reply */ +#define DHCPV6_REPLY 7 + +/** DHCPv6 information request */ +#define DHCPV6_INFORMATION_REQUEST 11 + +/** DHCPv6 settings block name */ +#define DHCPV6_SETTINGS_NAME "dhcpv6" + +/** + * Construct all-DHCP-relay-agents-and-servers multicast address + * + * @v addr Zeroed address to construct + */ +static inline void ipv6_all_dhcp_relay_and_servers ( struct in6_addr *addr ) { + addr->s6_addr16[0] = htons ( 0xff02 ); + addr->s6_addr[13] = 1; + addr->s6_addr[15] = 2; +} + +extern int start_dhcpv6 ( struct interface *job, struct net_device *netdev, + int stateful ); + +#endif /* _IPXE_DHCPV6_H */ |