Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / ipoib.h
1 #ifndef _IPXE_IPOIB_H
2 #define _IPXE_IPOIB_H
3
4 /** @file
5  *
6  * IP over Infiniband
7  */
8
9 FILE_LICENCE ( GPL2_OR_LATER );
10
11 #include <ipxe/if_arp.h>
12 #include <ipxe/infiniband.h>
13
14 /** IPoIB MAC address length */
15 #define IPOIB_ALEN 20
16
17 /** An IPoIB MAC address */
18 struct ipoib_mac {
19         /** Queue pair number
20          *
21          * MSB indicates support for IPoIB "connected mode".  Lower 24
22          * bits are the QPN.
23          */
24         uint32_t flags__qpn;
25         /** Port GID */
26         union ib_gid gid;
27 } __attribute__ (( packed ));
28
29 /** IPoIB link-layer header length */
30 #define IPOIB_HLEN 4
31
32 /** IPoIB link-layer header */
33 struct ipoib_hdr {
34         /** Network-layer protocol */
35         uint16_t proto;
36         /** Reserved, must be zero */
37         uint16_t reserved;
38 } __attribute__ (( packed ));
39
40 /** GUID mask used for constructing eIPoIB Local Ethernet MAC address (LEMAC) */
41 #define IPOIB_GUID_MASK 0xe7
42
43 /** eIPoIB Remote Ethernet MAC address
44  *
45  * An eIPoIB REMAC address is an Ethernet-like (6 byte) link-layer
46  * pseudo-address used to look up a full IPoIB link-layer address.
47  */
48 struct ipoib_remac {
49         /** Remote QPN
50          *
51          * Must be ORed with EIPOIB_QPN_LA so that eIPoIB REMAC
52          * addresses are considered as locally-assigned Ethernet MAC
53          * addreses.
54          */
55         uint32_t qpn;
56         /** Remote LID */
57         uint16_t lid;
58 } __attribute__ (( packed ));
59
60 /** eIPoIB REMAC locally-assigned address indicator */
61 #define EIPOIB_QPN_LA 0x02000000UL
62
63 extern const char * ipoib_ntoa ( const void *ll_addr );
64 extern struct net_device * alloc_ipoibdev ( size_t priv_size );
65
66 #endif /* _IPXE_IPOIB_H */