diff options
Diffstat (limited to 'qemu/roms/ipxe/src/include/ipxe/pccrr.h')
-rw-r--r-- | qemu/roms/ipxe/src/include/ipxe/pccrr.h | 376 |
1 files changed, 0 insertions, 376 deletions
diff --git a/qemu/roms/ipxe/src/include/ipxe/pccrr.h b/qemu/roms/ipxe/src/include/ipxe/pccrr.h deleted file mode 100644 index 1ea86c40d..000000000 --- a/qemu/roms/ipxe/src/include/ipxe/pccrr.h +++ /dev/null @@ -1,376 +0,0 @@ -#ifndef _IPXE_PCCRR_H -#define _IPXE_PCCRR_H - -/** @file - * - * Peer Content Caching and Retrieval: Retrieval Protocol [MS-PCCRR] - * - * All fields are in network byte order. - * - */ - -FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); - -#include <stdint.h> -#include <ipxe/uaccess.h> - -/** Magic retrieval URI path */ -#define PEERDIST_MAGIC_PATH "/116B50EB-ECE2-41ac-8429-9F9E963361B7/" - -/** Retrieval protocol version */ -union peerdist_msg_version { - /** Raw version number */ - uint32_t raw; - /** Major:minor version number */ - struct { - /** Minor version number */ - uint16_t minor; - /** Major version number */ - uint16_t major; - } __attribute__ (( packed )); -} __attribute__ (( packed )); - -/** Retrieval protocol version 1.0 */ -#define PEERDIST_MSG_VERSION_1_0 0x00000001UL - -/** Retrieval protocol version 2.0 */ -#define PEERDIST_MSG_VERSION_2_0 0x00000002UL - -/** Retrieval protocol supported versions */ -struct peerdist_msg_versions { - /** Minimum supported protocol version */ - union peerdist_msg_version min; - /** Maximum supported protocol version */ - union peerdist_msg_version max; -} __attribute__ (( packed )); - -/** Retrieval protocol block range */ -struct peerdist_msg_range { - /** First block in range */ - uint32_t first; - /** Number of blocks in range */ - uint32_t count; -} __attribute__ (( packed )); - -/** Retrieval protocol segment ID header */ -struct peerdist_msg_segment { - /** Digest size (i.e. length of segment ID) */ - uint32_t digestsize; - /* Followed by a single variable-length ID and padding: - * - * uint8_t id[digestsize]; - * uint8_t pad[ (-digestsize) & 0x3 ]; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol segment ID - * - * @v digestsize Digest size - */ -#define peerdist_msg_segment_t( digestsize ) \ - struct { \ - struct peerdist_msg_segment segment; \ - uint8_t id[digestsize]; \ - uint8_t pad[ ( -(digestsize) ) & 0x3 ]; \ - } __attribute__ (( packed )) - -/** Retrieval protocol block range list header */ -struct peerdist_msg_ranges { - /** Number of ranges */ - uint32_t count; - /* Followed by an array of block ranges: - * - * struct peerdist_msg_range range[count]; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol block range list - * - * @v count Number of ranges - */ -#define peerdist_msg_ranges_t( count ) \ - struct { \ - struct peerdist_msg_ranges ranges; \ - struct peerdist_msg_range range[count]; \ - } __attribute__ (( packed )) - -/** Retrieval protocol data block header */ -struct peerdist_msg_block { - /** Length of data block */ - uint32_t len; - /* Followed by the (encrypted) data block: - * - * uint8_t data[len]; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol data block */ -#define peerdist_msg_block_t( len ) \ - struct { \ - struct peerdist_msg_block block; \ - uint8_t data[len]; \ - } __attribute__ (( packed )) - -/** Retrieval protocol initialisation vector header */ -struct peerdist_msg_iv { - /** Cipher block size */ - uint32_t blksize; - /* Followed by the initialisation vector: - * - * uint8_t data[blksize]; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol initialisation vector */ -#define peerdist_msg_iv_t( blksize ) \ - struct { \ - struct peerdist_msg_iv iv; \ - uint8_t data[blksize]; \ - } __attribute__ (( packed )) - -/** Retrieval protocol useless VRF data header */ -struct peerdist_msg_useless_vrf { - /** Length of useless VRF data */ - uint32_t len; - /* Followed by a variable-length useless VRF data block and - * padding: - * - * uint8_t data[len]; - * uint8_t pad[ (-len) & 0x3 ]; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol useless VRF data */ -#define peerdist_msg_useless_vrf_t( vrf_len ) \ - struct { \ - struct peerdist_msg_useless_vrf vrf; \ - uint8_t data[vrf_len]; \ - uint8_t pad[ ( -(vrf_len) ) & 0x3 ]; \ - } __attribute__ (( packed )) - -/** Retrieval protocol message header */ -struct peerdist_msg_header { - /** Protocol version - * - * This is the protocol version in which the message type was - * first defined. - */ - union peerdist_msg_version version; - /** Message type */ - uint32_t type; - /** Message size (including this header) */ - uint32_t len; - /** Cryptographic algorithm ID */ - uint32_t algorithm; -} __attribute__ (( packed )); - -/** Retrieval protocol cryptographic algorithm IDs */ -enum peerdist_msg_algorithm { - /** No encryption */ - PEERDIST_MSG_PLAINTEXT = 0x00000000UL, - /** AES-128 in CBC mode */ - PEERDIST_MSG_AES_128_CBC = 0x00000001UL, - /** AES-192 in CBC mode */ - PEERDIST_MSG_AES_192_CBC = 0x00000002UL, - /** AES-256 in CBC mode */ - PEERDIST_MSG_AES_256_CBC = 0x00000003UL, -}; - -/** Retrieval protocol transport response header */ -struct peerdist_msg_transport_header { - /** Length (excluding this header) - * - * This seems to be identical in both purpose and value to the - * length found within the message header, and therefore - * serves no useful purpose. - */ - uint32_t len; -} __attribute__ (( packed )); - -/** Retrieval protocol negotiation request */ -struct peerdist_msg_nego_req { - /** Message header */ - struct peerdist_msg_header hdr; - /** Supported versions */ - struct peerdist_msg_versions versions; -} __attribute__ (( packed )); - -/** Retrieval protocol negotiation request version */ -#define PEERDIST_MSG_NEGO_REQ_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol negotiation request type */ -#define PEERDIST_MSG_NEGO_REQ_TYPE 0x00000000UL - -/** Retrieval protocol negotiation response */ -struct peerdist_msg_nego_resp { - /** Message header */ - struct peerdist_msg_header hdr; - /** Supported versions */ - struct peerdist_msg_versions versions; -} __attribute__ (( packed )); - -/** Retrieval protocol negotiation response version */ -#define PEERDIST_MSG_NEGO_RESP_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol negotiation response type */ -#define PEERDIST_MSG_NEGO_RESP_TYPE 0x00000001UL - -/** Retrieval protocol block list request header */ -struct peerdist_msg_getblklist { - /** Message header */ - struct peerdist_msg_header hdr; - /* Followed by a segment ID and a block range list: - * - * peerdist_msg_segment_t(digestsize) segment; - * peerdist_msg_ranges_t(count) ranges; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol block list request - * - * @v digestsize Digest size - * @v count Block range count - */ -#define peerdist_msg_getblklist_t( digestsize, count ) \ - struct { \ - struct peerdist_msg_getblklist getblklist; \ - peerdist_msg_segment_t ( digestsize ) segment; \ - peerdist_msg_ranges_t ( count ) ranges; \ - } __attribute__ (( packed )) - -/** Retrieval protocol block list request version */ -#define PEERDIST_MSG_GETBLKLIST_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol block list request type */ -#define PEERDIST_MSG_GETBLKLIST_TYPE 0x00000002UL - -/** Retrieval protocol block fetch request header */ -struct peerdist_msg_getblks { - /** Message header */ - struct peerdist_msg_header hdr; - /* Followed by a segment ID, a block range list, and a useless - * VRF block: - * - * peerdist_msg_segment_t(digestsize) segment; - * peerdist_msg_ranges_t(count) ranges; - * peerdist_msg_vrf_t(vrf_len) vrf; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol block fetch request - * - * @v digestsize Digest size - * @v count Block range count - * @v vrf_len Length of uselessness - */ -#define peerdist_msg_getblks_t( digestsize, count, vrf_len ) \ - struct { \ - struct peerdist_msg_getblks getblks; \ - peerdist_msg_segment_t ( digestsize ) segment; \ - peerdist_msg_ranges_t ( count ) ranges; \ - peerdist_msg_useless_vrf_t ( vrf_len ); \ - } __attribute__ (( packed )) - -/** Retrieval protocol block fetch request version */ -#define PEERDIST_MSG_GETBLKS_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol block fetch request type */ -#define PEERDIST_MSG_GETBLKS_TYPE 0x00000003UL - -/** Retrieval protocol block list response header */ -struct peerdist_msg_blklist { - /** Message header */ - struct peerdist_msg_header hdr; - /* Followed by a segment ID, a block range list, and a next - * block index: - * - * peerdist_msg_segment_t(digestsize) segment; - * peerdist_msg_ranges_t(count) ranges; - * uint32_t next; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol block list response - * - * @v digestsize Digest size - * @v count Block range count - */ -#define peerdist_msg_blklist_t( digestsize, count ) \ - struct { \ - struct peerdist_msg_blklist blklist; \ - peerdist_msg_segment_t ( digestsize ) segment; \ - peerdist_msg_ranges_t ( count ) ranges; \ - uint32_t next; \ - } __attribute__ (( packed )) - -/** Retrieval protocol block list response version */ -#define PEERDIST_MSG_BLKLIST_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol block list response type */ -#define PEERDIST_MSG_BLKLIST_TYPE 0x00000004UL - -/** Retrieval protocol block fetch response header */ -struct peerdist_msg_blk { - /** Message header */ - struct peerdist_msg_header hdr; - /* Followed by a segment ID, a block index, a next block - * index, a data block, a useless VRF block, and an - * initialisation vector: - * - * peerdist_msg_segment_t(digestsize) segment; - * uint32_t index; - * uint32_t next; - * peerdist_msg_block_t(len) data; - * peerdist_msg_useless_vrf_t(vrf_len) vrf; - * peerdist_msg_iv_t(blksize) iv; - */ -} __attribute__ (( packed )); - -/** Retrieval protocol block fetch response - * - * @v digestsize Digest size - * @v len Data block length - * @v vrf_len Length of uselessness - * @v blksize Cipher block size - */ -#define peerdist_msg_blk_t( digestsize, len, vrf_len, blksize ) \ - struct { \ - struct peerdist_msg_blk blk; \ - peerdist_msg_segment_t ( digestsize ) segment; \ - uint32_t index; \ - uint32_t next; \ - peerdist_msg_block_t ( len ) block; \ - peerdist_msg_useless_vrf_t ( vrf_len ) vrf; \ - peerdist_msg_iv_t ( blksize ) iv; \ - } __attribute__ (( packed )) - -/** Retrieval protocol block fetch response version */ -#define PEERDIST_MSG_BLK_VERSION PEERDIST_MSG_VERSION_1_0 - -/** Retrieval protocol block fetch response type */ -#define PEERDIST_MSG_BLK_TYPE 0x00000005UL - -/** - * Parse retrieval protocol block fetch response - * - * @v raw Raw data - * @v raw_len Length of raw data - * @v digestsize Digest size - * @v blksize Cipher block size - * @v blk Structure to fill in - * @ret rc Return status code - */ -#define peerdist_msg_blk( raw, raw_len, digestsize, blksize, blk ) ( { \ - assert ( sizeof ( (blk)->segment.id ) == (digestsize) ); \ - assert ( sizeof ( (blk)->block.data ) == 0 ); \ - assert ( sizeof ( (blk)->vrf.data ) == 0 ); \ - assert ( sizeof ( (blk)->iv.data ) == blksize ); \ - peerdist_msg_blk_untyped ( (raw), (raw_len), (digestsize), \ - (blksize), blk ); \ - } ) - -extern int peerdist_msg_blk_untyped ( userptr_t raw, size_t raw_len, - size_t digestsize, size_t blksize, - void *out ); - -#endif /* _IPXE_PCCRR_H */ |