blob: 08402712a452cc697513fc2676f91659834092a2 [file] [log] [blame]
Peng Taod7e09d02013-05-02 16:46:55 +08001/*
2 * GPL HEADER START
3 *
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
Oleg Drokin6a5b99a2016-06-14 23:33:40 -040018 * http://www.gnu.org/licenses/gpl-2.0.html
Peng Taod7e09d02013-05-02 16:46:55 +080019 *
Peng Taod7e09d02013-05-02 16:46:55 +080020 * GPL HEADER END
21 */
22/*
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
25 */
26/*
27 * This file is part of Lustre, http://www.lustre.org/
28 * Lustre is a trademark of Sun Microsystems, Inc.
29 */
30
31#define DEBUG_SUBSYSTEM S_LNET
Greg Kroah-Hartman9fdaf8c2014-07-11 20:51:16 -070032#include "../../include/linux/lnet/lib-lnet.h"
Peng Taod7e09d02013-05-02 16:46:55 +080033
Thomas Gummererca4be882014-10-07 10:10:32 +020034static int
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030035lolnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
Peng Taod7e09d02013-05-02 16:46:55 +080036{
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030037 LASSERT(!lntmsg->msg_routing);
38 LASSERT(!lntmsg->msg_target_is_router);
Peng Taod7e09d02013-05-02 16:46:55 +080039
40 return lnet_parse(ni, &lntmsg->msg_hdr, ni->ni_nid, lntmsg, 0);
41}
42
Thomas Gummererca4be882014-10-07 10:10:32 +020043static int
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030044lolnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
James Simmonsc314c312016-02-12 12:06:01 -050045 int delayed, unsigned int niov,
46 struct kvec *iov, lnet_kiov_t *kiov,
47 unsigned int offset, unsigned int mlen, unsigned int rlen)
Peng Taod7e09d02013-05-02 16:46:55 +080048{
49 lnet_msg_t *sendmsg = private;
50
James Simmons06ace262016-02-12 12:06:08 -050051 if (lntmsg) { /* not discarding */
52 if (sendmsg->msg_iov) {
53 if (iov)
Peng Taod7e09d02013-05-02 16:46:55 +080054 lnet_copy_iov2iov(niov, iov, offset,
55 sendmsg->msg_niov,
56 sendmsg->msg_iov,
57 sendmsg->msg_offset, mlen);
58 else
59 lnet_copy_iov2kiov(niov, kiov, offset,
60 sendmsg->msg_niov,
61 sendmsg->msg_iov,
62 sendmsg->msg_offset, mlen);
63 } else {
James Simmons06ace262016-02-12 12:06:08 -050064 if (iov)
Peng Taod7e09d02013-05-02 16:46:55 +080065 lnet_copy_kiov2iov(niov, iov, offset,
66 sendmsg->msg_niov,
67 sendmsg->msg_kiov,
68 sendmsg->msg_offset, mlen);
69 else
70 lnet_copy_kiov2kiov(niov, kiov, offset,
71 sendmsg->msg_niov,
72 sendmsg->msg_kiov,
73 sendmsg->msg_offset, mlen);
74 }
75
76 lnet_finalize(ni, lntmsg, 0);
77 }
78
79 lnet_finalize(ni, sendmsg, 0);
80 return 0;
81}
82
83static int lolnd_instanced;
84
Thomas Gummererca4be882014-10-07 10:10:32 +020085static void
Peng Taod7e09d02013-05-02 16:46:55 +080086lolnd_shutdown(lnet_ni_t *ni)
87{
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030088 CDEBUG(D_NET, "shutdown\n");
89 LASSERT(lolnd_instanced);
Peng Taod7e09d02013-05-02 16:46:55 +080090
91 lolnd_instanced = 0;
92}
93
Thomas Gummererca4be882014-10-07 10:10:32 +020094static int
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030095lolnd_startup(lnet_ni_t *ni)
Peng Taod7e09d02013-05-02 16:46:55 +080096{
Ebru Akagunduz3f13cd92013-10-08 23:43:21 +030097 LASSERT(ni->ni_lnd == &the_lolnd);
98 LASSERT(!lolnd_instanced);
Peng Taod7e09d02013-05-02 16:46:55 +080099 lolnd_instanced = 1;
100
Ebru Akagunduzcb03b882013-10-08 23:43:22 +0300101 return 0;
Peng Taod7e09d02013-05-02 16:46:55 +0800102}
103
104lnd_t the_lolnd = {
105 /* .lnd_list = */ {&the_lolnd.lnd_list, &the_lolnd.lnd_list},
106 /* .lnd_refcount = */ 0,
107 /* .lnd_type = */ LOLND,
108 /* .lnd_startup = */ lolnd_startup,
109 /* .lnd_shutdown = */ lolnd_shutdown,
Mike Shuey7e7ab092015-05-19 10:14:32 -0400110 /* .lnt_ctl = */ NULL,
Peng Taod7e09d02013-05-02 16:46:55 +0800111 /* .lnd_send = */ lolnd_send,
112 /* .lnd_recv = */ lolnd_recv,
113 /* .lnd_eager_recv = */ NULL,
114 /* .lnd_notify = */ NULL,
115 /* .lnd_accept = */ NULL
116};