1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef _GPXE_IPOIB_H
- #define _GPXE_IPOIB_H
-
- /** @file
- *
- * IP over Infiniband
- */
-
- #include <gpxe/infiniband.h>
-
- /** IPoIB packet length */
- #define IPOIB_PKT_LEN 2048
-
- /** IPoIB MAC address length */
- #define IPOIB_ALEN 20
-
- /** An IPoIB MAC address */
- struct ipoib_mac {
- /** Queue pair number
- *
- * MSB must be zero; QPNs are only 24-bit.
- */
- uint32_t 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 struct ll_protocol ipoib_protocol;
-
- extern const char * ipoib_ntoa ( const void *ll_addr );
-
- /**
- * Allocate IPoIB device
- *
- * @v priv_size Size of driver private data
- * @ret netdev Network device, or NULL
- */
- static inline struct net_device * alloc_ipoibdev ( size_t priv_size ) {
- struct net_device *netdev;
-
- netdev = alloc_netdev ( priv_size );
- if ( netdev ) {
- netdev->ll_protocol = &ipoib_protocol;
- netdev->max_pkt_len = IPOIB_PKT_LEN;
- }
- return netdev;
- }
-
- 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 );
-
- #endif /* _GPXE_IPOIB_H */
|