1*c39526b7SPramod Gunjikar /*
2*c39526b7SPramod Gunjikar  * This file contains definitions used in OFED defined user/kernel
3*c39526b7SPramod Gunjikar  * interfaces. These are imported from the OFED header ib_addr.h. Oracle
4*c39526b7SPramod Gunjikar  * elects to have and use the contents of ib_addr.h under and governed
5*c39526b7SPramod Gunjikar  * by the OpenIB.org BSD license (see below for details). However,
6*c39526b7SPramod Gunjikar  * the following notice accompanied the original version of this file:
7*c39526b7SPramod Gunjikar  */
8*c39526b7SPramod Gunjikar 
9*c39526b7SPramod Gunjikar /*
10*c39526b7SPramod Gunjikar  * Copyright (c) 2005 Voltaire Inc.  All rights reserved.
11*c39526b7SPramod Gunjikar  * Copyright (c) 2005 Intel Corporation.  All rights reserved.
12*c39526b7SPramod Gunjikar  *
13*c39526b7SPramod Gunjikar  * This Software is licensed under one of the following licenses:
14*c39526b7SPramod Gunjikar  *
15*c39526b7SPramod Gunjikar  * 1) under the terms of the "Common Public License 1.0" a copy of which is
16*c39526b7SPramod Gunjikar  *    available from the Open Source Initiative, see
17*c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/cpl.php.
18*c39526b7SPramod Gunjikar  *
19*c39526b7SPramod Gunjikar  * 2) under the terms of the "The BSD License" a copy of which is
20*c39526b7SPramod Gunjikar  *    available from the Open Source Initiative, see
21*c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/bsd-license.php.
22*c39526b7SPramod Gunjikar  *
23*c39526b7SPramod Gunjikar  * 3) under the terms of the "GNU General Public License (GPL) Version 2" a
24*c39526b7SPramod Gunjikar  *    copy of which is available from the Open Source Initiative, see
25*c39526b7SPramod Gunjikar  *    http://www.opensource.org/licenses/gpl-license.php.
26*c39526b7SPramod Gunjikar  *
27*c39526b7SPramod Gunjikar  * Licensee has the right to choose one of the above licenses.
28*c39526b7SPramod Gunjikar  *
29*c39526b7SPramod Gunjikar  * Redistributions of source code must retain the above copyright
30*c39526b7SPramod Gunjikar  * notice and one of the license notices.
31*c39526b7SPramod Gunjikar  *
32*c39526b7SPramod Gunjikar  * Redistributions in binary form must reproduce both the above copyright
33*c39526b7SPramod Gunjikar  * notice, one of the license notices in the documentation
34*c39526b7SPramod Gunjikar  * and/or other materials provided with the distribution.
35*c39526b7SPramod Gunjikar  *
36*c39526b7SPramod Gunjikar  */
37*c39526b7SPramod Gunjikar 
38*c39526b7SPramod Gunjikar #ifndef _SYS_IB_CLIENTS_OF_RDMA_IB_ADDR_H
39*c39526b7SPramod Gunjikar #define	_SYS_IB_CLIENTS_OF_RDMA_IB_ADDR_H
40*c39526b7SPramod Gunjikar 
41*c39526b7SPramod Gunjikar #ifdef __cplusplus
42*c39526b7SPramod Gunjikar extern "C" {
43*c39526b7SPramod Gunjikar #endif
44*c39526b7SPramod Gunjikar 
45*c39526b7SPramod Gunjikar 
46*c39526b7SPramod Gunjikar #include <sys/socket.h>
47*c39526b7SPramod Gunjikar #include <sys/ib/clients/of/rdma/ib_verbs.h>
48*c39526b7SPramod Gunjikar 
49*c39526b7SPramod Gunjikar #define	MAX_ADDR_LEN	32	/* Maximim hardware length */
50*c39526b7SPramod Gunjikar 
51*c39526b7SPramod Gunjikar struct rdma_dev_addr {
52*c39526b7SPramod Gunjikar 	unsigned char src_dev_addr[MAX_ADDR_LEN];
53*c39526b7SPramod Gunjikar 	unsigned char dst_dev_addr[MAX_ADDR_LEN];
54*c39526b7SPramod Gunjikar 	unsigned char broadcast[MAX_ADDR_LEN];
55*c39526b7SPramod Gunjikar 	enum rdma_node_type dev_type;
56*c39526b7SPramod Gunjikar };
57*c39526b7SPramod Gunjikar 
ip_addr_size(struct sockaddr * addr)58*c39526b7SPramod Gunjikar static inline int ip_addr_size(struct sockaddr *addr)
59*c39526b7SPramod Gunjikar {
60*c39526b7SPramod Gunjikar 	return addr->sa_family == AF_INET6 ?
61*c39526b7SPramod Gunjikar 	    sizeof (struct sockaddr_in6) :
62*c39526b7SPramod Gunjikar 	    sizeof (struct sockaddr_in);
63*c39526b7SPramod Gunjikar }
64*c39526b7SPramod Gunjikar 
ib_addr_get_pkey(struct rdma_dev_addr * dev_addr)65*c39526b7SPramod Gunjikar static inline uint16_t ib_addr_get_pkey(struct rdma_dev_addr *dev_addr)
66*c39526b7SPramod Gunjikar {
67*c39526b7SPramod Gunjikar 	return (((uint16_t)dev_addr->broadcast[8] << 8) |
68*c39526b7SPramod Gunjikar 	    (uint16_t)dev_addr->broadcast[9]);
69*c39526b7SPramod Gunjikar }
70*c39526b7SPramod Gunjikar 
ib_addr_set_pkey(struct rdma_dev_addr * dev_addr,uint16_t pkey)71*c39526b7SPramod Gunjikar static inline void ib_addr_set_pkey(struct rdma_dev_addr *dev_addr,
72*c39526b7SPramod Gunjikar     uint16_t pkey)
73*c39526b7SPramod Gunjikar {
74*c39526b7SPramod Gunjikar 	dev_addr->broadcast[8] = pkey >> 8;
75*c39526b7SPramod Gunjikar 	dev_addr->broadcast[9] = (unsigned char) pkey;
76*c39526b7SPramod Gunjikar }
77*c39526b7SPramod Gunjikar 
ib_addr_get_mgid(struct rdma_dev_addr * dev_addr,union ib_gid * gid)78*c39526b7SPramod Gunjikar static inline void ib_addr_get_mgid(struct rdma_dev_addr *dev_addr,
79*c39526b7SPramod Gunjikar     union ib_gid *gid)
80*c39526b7SPramod Gunjikar {
81*c39526b7SPramod Gunjikar 	(void) memcpy(gid, dev_addr->broadcast + 4, sizeof (*gid));
82*c39526b7SPramod Gunjikar }
83*c39526b7SPramod Gunjikar 
ib_addr_get_sgid(struct rdma_dev_addr * dev_addr,union ib_gid * gid)84*c39526b7SPramod Gunjikar static inline void ib_addr_get_sgid(struct rdma_dev_addr *dev_addr,
85*c39526b7SPramod Gunjikar     union ib_gid *gid)
86*c39526b7SPramod Gunjikar {
87*c39526b7SPramod Gunjikar 	(void) memcpy(gid, dev_addr->src_dev_addr + 4, sizeof (*gid));
88*c39526b7SPramod Gunjikar }
89*c39526b7SPramod Gunjikar 
ib_addr_set_sgid(struct rdma_dev_addr * dev_addr,union ib_gid * gid)90*c39526b7SPramod Gunjikar static inline void ib_addr_set_sgid(struct rdma_dev_addr *dev_addr,
91*c39526b7SPramod Gunjikar     union ib_gid *gid)
92*c39526b7SPramod Gunjikar {
93*c39526b7SPramod Gunjikar 	(void) memcpy(dev_addr->src_dev_addr + 4, gid, sizeof (*gid));
94*c39526b7SPramod Gunjikar }
95*c39526b7SPramod Gunjikar 
ib_addr_get_dgid(struct rdma_dev_addr * dev_addr,union ib_gid * gid)96*c39526b7SPramod Gunjikar static inline void ib_addr_get_dgid(struct rdma_dev_addr *dev_addr,
97*c39526b7SPramod Gunjikar     union ib_gid *gid)
98*c39526b7SPramod Gunjikar {
99*c39526b7SPramod Gunjikar 	(void) memcpy(gid, dev_addr->dst_dev_addr + 4, sizeof (*gid));
100*c39526b7SPramod Gunjikar }
101*c39526b7SPramod Gunjikar 
ib_addr_set_dgid(struct rdma_dev_addr * dev_addr,union ib_gid * gid)102*c39526b7SPramod Gunjikar static inline void ib_addr_set_dgid(struct rdma_dev_addr *dev_addr,
103*c39526b7SPramod Gunjikar     union ib_gid *gid)
104*c39526b7SPramod Gunjikar {
105*c39526b7SPramod Gunjikar 	(void) memcpy(dev_addr->dst_dev_addr + 4, gid, sizeof (*gid));
106*c39526b7SPramod Gunjikar }
107*c39526b7SPramod Gunjikar 
108*c39526b7SPramod Gunjikar 
109*c39526b7SPramod Gunjikar #ifdef __cplusplus
110*c39526b7SPramod Gunjikar }
111*c39526b7SPramod Gunjikar #endif
112*c39526b7SPramod Gunjikar #endif /* _SYS_IB_CLIENTS_OF_RDMA_IB_ADDR_H */
113