diff options
Diffstat (limited to 'src/include/ipxe/ipoib.h')
-rw-r--r-- | src/include/ipxe/ipoib.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/include/ipxe/ipoib.h b/src/include/ipxe/ipoib.h new file mode 100644 index 000000000..31b0c1b6d --- /dev/null +++ b/src/include/ipxe/ipoib.h @@ -0,0 +1,61 @@ +#ifndef _IPXE_IPOIB_H +#define _IPXE_IPOIB_H + +/** @file + * + * IP over Infiniband + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/infiniband.h> + +/** IPoIB MAC address length */ +#define IPOIB_ALEN 20 + +/** An IPoIB MAC address */ +struct ipoib_mac { + /** Queue pair number + * + * MSB indicates support for IPoIB "connected mode". Lower 24 + * bits are the QPN. + */ + uint32_t flags__qpn; + /** Port GID */ + struct ib_gid gid; +} __attribute__ (( packed )); + +/** IPoIB link-layer header length */ +#define IPOIB_HLEN 4 + +/** IPoIB link-layer header */ +struct ipoib_hdr { + /** Network-layer protocol */ + uint16_t proto; + /** Reserved, must be zero */ + union { + /** Reserved, must be zero */ + uint16_t reserved; + /** Peer addresses + * + * We use these fields internally to represent the + * peer addresses using a lookup key. There simply + * isn't enough room in the IPoIB header to store + * literal source or destination MAC addresses. + */ + struct { + /** Destination address key */ + uint8_t dest; + /** Source address key */ + uint8_t src; + } __attribute__ (( packed )) peer; + } __attribute__ (( packed )) u; +} __attribute__ (( packed )); + +extern const char * ipoib_ntoa ( const void *ll_addr ); +extern void ipoib_link_state_changed ( struct ib_device *ibdev ); +extern int ipoib_probe ( struct ib_device *ibdev ); +extern void ipoib_remove ( struct ib_device *ibdev ); +extern struct net_device * alloc_ipoibdev ( size_t priv_size ); + +#endif /* _IPXE_IPOIB_H */ |