summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/include/ipxe/pccrd.h
blob: 3daa92f2987141a758aee0ab1dad458d87e11239 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef _IPXE_PCCRD_H
#define _IPXE_PCCRD_H

/** @file
 *
 * Peer Content Caching and Retrieval: Discovery Protocol [MS-PCCRD]
 *
 */

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );

/** PeerDist discovery port */
#define PEERDIST_DISCOVERY_PORT 3702

/** PeerDist discovery IPv4 address (239.255.255.250) */
#define PEERDIST_DISCOVERY_IPV4 \
	( ( 239 << 24 ) | ( 255 << 16 ) | ( 255 << 8 ) | ( 250 << 0 ) )

/** PeerDist discovery IPv6 address (ff02::c) */
#define PEERDIST_DISCOVERY_IPV6 \
	{ 0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc }

/** A PeerDist discovery reply block count */
struct peerdist_discovery_block_count {
	/** Count (as an eight-digit hex value) */
	char hex[8];
} __attribute__ (( packed ));

/** A PeerDist discovery reply */
struct peerdist_discovery_reply {
	/** List of segment ID strings
	 *
	 * The list is terminated with a zero-length string.
	 */
	char *ids;
	/** List of peer locations
	 *
	 * The list is terminated with a zero-length string.
	 */
	char *locations;
};

extern char * peerdist_discovery_request ( const char *uuid, const char *id );
extern int peerdist_discovery_reply ( char *data, size_t len,
				      struct peerdist_discovery_reply *reply );

#endif /* _IPXE_PCCRD_H */