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#define DEBUG_SUBSYSTEM S_LNET
36#include "../../include/linux/lnet/lib-lnet.h"
37
38static int
39lolnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
40{
41 LASSERT(!lntmsg->msg_routing);
42 LASSERT(!lntmsg->msg_target_is_router);
43
44 return lnet_parse(ni, &lntmsg->msg_hdr, ni->ni_nid, lntmsg, 0);
45}
46
47static int
48lolnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
49 int delayed, unsigned int niov,
50 struct kvec *iov, lnet_kiov_t *kiov,
51 unsigned int offset, unsigned int mlen, unsigned int rlen)
52{
53 lnet_msg_t *sendmsg = private;
54
55 if (lntmsg != NULL) {
56 if (sendmsg->msg_iov != NULL) {
57 if (iov != NULL)
58 lnet_copy_iov2iov(niov, iov, offset,
59 sendmsg->msg_niov,
60 sendmsg->msg_iov,
61 sendmsg->msg_offset, mlen);
62 else
63 lnet_copy_iov2kiov(niov, kiov, offset,
64 sendmsg->msg_niov,
65 sendmsg->msg_iov,
66 sendmsg->msg_offset, mlen);
67 } else {
68 if (iov != NULL)
69 lnet_copy_kiov2iov(niov, iov, offset,
70 sendmsg->msg_niov,
71 sendmsg->msg_kiov,
72 sendmsg->msg_offset, mlen);
73 else
74 lnet_copy_kiov2kiov(niov, kiov, offset,
75 sendmsg->msg_niov,
76 sendmsg->msg_kiov,
77 sendmsg->msg_offset, mlen);
78 }
79
80 lnet_finalize(ni, lntmsg, 0);
81 }
82
83 lnet_finalize(ni, sendmsg, 0);
84 return 0;
85}
86
87static int lolnd_instanced;
88
89static void
90lolnd_shutdown(lnet_ni_t *ni)
91{
92 CDEBUG(D_NET, "shutdown\n");
93 LASSERT(lolnd_instanced);
94
95 lolnd_instanced = 0;
96}
97
98static int
99lolnd_startup(lnet_ni_t *ni)
100{
101 LASSERT(ni->ni_lnd == &the_lolnd);
102 LASSERT(!lolnd_instanced);
103 lolnd_instanced = 1;
104
105 return 0;
106}
107
108lnd_t the_lolnd = {
109 {&the_lolnd.lnd_list, &the_lolnd.lnd_list},
110 0,
111 LOLND,
112 lolnd_startup,
113 lolnd_shutdown,
114 NULL,
115 lolnd_send,
116 lolnd_recv,
117 NULL,
118 NULL,
119 NULL
120};
121