infiniband.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*-
  2. * Copyright (c) 2020 Mellanox Technologies. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND
  14. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  16. * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
  17. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  18. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  19. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  20. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  21. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  23. * SUCH DAMAGE.
  24. */
  25. #ifndef __INFINIBAND_H__
  26. #define __INFINIBAND_H__
  27. #include <sys/cdefs.h>
  28. #include <sys/stdint.h>
  29. #define INFINIBAND_ADDR_LEN 20 /* bytes */
  30. #define INFINIBAND_MTU 1500 /* bytes - default value */
  31. #define INFINIBAND_ENC_LEN 4 /* bytes */
  32. #define INFINIBAND_HDR_LEN \
  33. (INFINIBAND_ADDR_LEN + INFINIBAND_ENC_LEN)
  34. #define INFINIBAND_IS_MULTICAST(addr) \
  35. ((addr)[4] == 0xff)
  36. struct infiniband_header {
  37. uint8_t ib_hwaddr[INFINIBAND_ADDR_LEN];
  38. uint16_t ib_protocol; /* big endian */
  39. uint16_t ib_reserved; /* zero */
  40. } __packed;
  41. struct infiniband_address {
  42. uint8_t octet[INFINIBAND_ADDR_LEN];
  43. } __packed;
  44. #ifdef _KERNEL
  45. #include <sys/_eventhandler.h>
  46. struct ifnet;
  47. struct mbuf;
  48. extern void infiniband_ifattach(struct ifnet *, const uint8_t *hwaddr, const uint8_t *bcaddr);
  49. extern void infiniband_ifdetach(struct ifnet *);
  50. extern void infiniband_bpf_mtap(struct ifnet *, struct mbuf *);
  51. /* new infiniband interface attached event */
  52. typedef void (*infiniband_ifattach_event_handler_t)(void *, struct ifnet *);
  53. EVENTHANDLER_DECLARE(infiniband_ifattach_event, infiniband_ifattach_event_handler_t);
  54. #endif
  55. #endif /* __INFINIBAND_H__ */