-
Notifications
You must be signed in to change notification settings - Fork 1
/
rxe_net.h
87 lines (75 loc) · 2.7 KB
/
rxe_net.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
* Copyright (c) 2009-2011 Mellanox Technologies Ltd. All rights reserved.
* Copyright (c) 2009-2011 System Fabric Works, Inc. All rights reserved.
*
* This software is available to you under a choice of one of two
* licenses. You may choose to be licensed under the terms of the GNU
* General Public License (GPL) Version 2, available from the file
* COPYING in the main directory of this source tree, or the
* OpenIB.org BSD license below:
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
*
* - Redistributions of source code must retain the above
* copyright notice, this list of conditions and the following
* disclaimer.
*
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef RXE_NET_H
#define RXE_NET_H
#include <net/sock.h>
#include <net/if_inet6.h>
#include <linux/module.h>
/* Should probably move to something other than an array...these can be big */
#define RXE_MAX_IF_INDEX (384)
struct rxe_net_info {
struct rxe_dev *rxe;
u8 port;
struct net_device *ndev;
int status;
};
struct rxe_addr_info {
struct socket *sock4;
struct socket *sock6;
};
extern struct rxe_addr_info addr_info;
extern struct rxe_net_info net_info[RXE_MAX_IF_INDEX];
extern spinlock_t net_info_lock;
/* caller must hold net_dev_lock */
static inline struct rxe_dev *net_to_rxe(struct net_device *ndev)
{
return (ndev->ifindex >= RXE_MAX_IF_INDEX) ?
NULL : net_info[ndev->ifindex].rxe;
}
static inline u8 net_to_port(struct net_device *ndev)
{
return net_info[ndev->ifindex].port;
}
void rxe_net_add(struct net_device *ndev);
void rxe_net_up(struct net_device *ndev);
void rxe_net_down(struct net_device *ndev);
int rxe_net_init(void);
void rxe_net_exit(void);
static inline void ipv6_mcast_addr_set_v4mapped(const __be32 addr,
struct in6_addr *v4mapped)
{
ipv6_addr_set(v4mapped,
htonl(0xFF0E0000), 0,
htonl(0x0000FFFF), addr);
}
#endif /* RXE_NET_H */