• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _GPXE_IPOIB_H
2 #define _GPXE_IPOIB_H
3 
4 /** @file
5  *
6  * IP over Infiniband
7  */
8 
9 FILE_LICENCE ( GPL2_OR_LATER );
10 
11 #include <gpxe/infiniband.h>
12 
13 /** IPoIB MAC address length */
14 #define IPOIB_ALEN 20
15 
16 /** An IPoIB MAC address */
17 struct ipoib_mac {
18 	/** Queue pair number
19 	 *
20 	 * MSB indicates support for IPoIB "connected mode".  Lower 24
21 	 * bits are the QPN.
22 	 */
23 	uint32_t flags__qpn;
24 	/** Port GID */
25 	struct ib_gid gid;
26 } __attribute__ (( packed ));
27 
28 /** IPoIB link-layer header length */
29 #define IPOIB_HLEN 4
30 
31 /** IPoIB link-layer header */
32 struct ipoib_hdr {
33 	/** Network-layer protocol */
34 	uint16_t proto;
35 	/** Reserved, must be zero */
36 	union {
37 		/** Reserved, must be zero */
38 		uint16_t reserved;
39 		/** Peer addresses
40 		 *
41 		 * We use these fields internally to represent the
42 		 * peer addresses using a lookup key.  There simply
43 		 * isn't enough room in the IPoIB header to store
44 		 * literal source or destination MAC addresses.
45 		 */
46 		struct {
47 			/** Destination address key */
48 			uint8_t dest;
49 			/** Source address key */
50 			uint8_t src;
51 		} __attribute__ (( packed )) peer;
52 	} __attribute__ (( packed )) u;
53 } __attribute__ (( packed ));
54 
55 extern const char * ipoib_ntoa ( const void *ll_addr );
56 extern void ipoib_link_state_changed ( struct ib_device *ibdev );
57 extern int ipoib_probe ( struct ib_device *ibdev );
58 extern void ipoib_remove ( struct ib_device *ibdev );
59 extern struct net_device * alloc_ipoibdev ( size_t priv_size );
60 
61 #endif /* _GPXE_IPOIB_H */
62