Greg Hartman | 76d05dc | 2016-11-23 15:51:27 -0800 | [diff] [blame] | 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 */ |