4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.gnu.org/licenses/gpl-2.0.html
23 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
26 * Copyright (c) 2012, 2015, Intel Corporation.
29 * This file is part of Lustre, http://www.lustre.org/
30 * Lustre is a trademark of Seagate, Inc.
32 * lnet/include/lnet/lib-lnet.h
35 #ifndef __LNET_LIB_LNET_H__
36 #define __LNET_LIB_LNET_H__
38 #include "../libcfs/libcfs.h"
41 #include "lib-types.h"
44 extern lnet_t the_lnet
; /* THE network */
46 #if (BITS_PER_LONG == 32)
47 /* 2 CPTs, allowing more CPTs might make us under memory pressure */
48 #define LNET_CPT_MAX_BITS 1
50 #else /* 64-bit system */
52 * 256 CPTs for thousands of CPUs, allowing more CPTs might make us
53 * under risk of consuming all lh_cookie.
55 #define LNET_CPT_MAX_BITS 8
56 #endif /* BITS_PER_LONG == 32 */
58 /* max allowed CPT number */
59 #define LNET_CPT_MAX (1 << LNET_CPT_MAX_BITS)
61 #define LNET_CPT_NUMBER (the_lnet.ln_cpt_number)
62 #define LNET_CPT_BITS (the_lnet.ln_cpt_bits)
63 #define LNET_CPT_MASK ((1ULL << LNET_CPT_BITS) - 1)
66 #define LNET_LOCK_EX CFS_PERCPT_LOCK_EX
68 static inline int lnet_is_route_alive(lnet_route_t
*route
)
71 if (!route
->lr_gateway
->lp_alive
)
73 /* no NI status, assume it's alive */
74 if ((route
->lr_gateway
->lp_ping_feats
&
75 LNET_PING_FEAT_NI_STATUS
) == 0)
77 /* has NI status, check # down NIs */
78 return route
->lr_downis
== 0;
81 static inline int lnet_is_wire_handle_none(lnet_handle_wire_t
*wh
)
83 return (wh
->wh_interface_cookie
== LNET_WIRE_HANDLE_COOKIE_NONE
&&
84 wh
->wh_object_cookie
== LNET_WIRE_HANDLE_COOKIE_NONE
);
87 static inline int lnet_md_exhausted(lnet_libmd_t
*md
)
89 return (!md
->md_threshold
||
90 ((md
->md_options
& LNET_MD_MAX_SIZE
) &&
91 md
->md_offset
+ md
->md_max_size
> md
->md_length
));
94 static inline int lnet_md_unlinkable(lnet_libmd_t
*md
)
97 * Should unlink md when its refcount is 0 and either:
98 * - md has been flagged for deletion (by auto unlink or
99 * LNetM[DE]Unlink, in the latter case md may not be exhausted).
100 * - auto unlink is on and md is exhausted.
105 if (md
->md_flags
& LNET_MD_FLAG_ZOMBIE
)
108 return ((md
->md_flags
& LNET_MD_FLAG_AUTO_UNLINK
) &&
109 lnet_md_exhausted(md
));
112 #define lnet_cpt_table() (the_lnet.ln_cpt_table)
113 #define lnet_cpt_current() cfs_cpt_current(the_lnet.ln_cpt_table, 1)
116 lnet_cpt_of_cookie(__u64 cookie
)
118 unsigned int cpt
= (cookie
>> LNET_COOKIE_TYPE_BITS
) & LNET_CPT_MASK
;
121 * LNET_CPT_NUMBER doesn't have to be power2, which means we can
122 * get illegal cpt from it's invalid cookie
124 return cpt
< LNET_CPT_NUMBER
? cpt
: cpt
% LNET_CPT_NUMBER
;
128 lnet_res_lock(int cpt
)
130 cfs_percpt_lock(the_lnet
.ln_res_lock
, cpt
);
134 lnet_res_unlock(int cpt
)
136 cfs_percpt_unlock(the_lnet
.ln_res_lock
, cpt
);
140 lnet_res_lock_current(void)
142 int cpt
= lnet_cpt_current();
149 lnet_net_lock(int cpt
)
151 cfs_percpt_lock(the_lnet
.ln_net_lock
, cpt
);
155 lnet_net_unlock(int cpt
)
157 cfs_percpt_unlock(the_lnet
.ln_net_lock
, cpt
);
161 lnet_net_lock_current(void)
163 int cpt
= lnet_cpt_current();
169 #define LNET_LOCK() lnet_net_lock(LNET_LOCK_EX)
170 #define LNET_UNLOCK() lnet_net_unlock(LNET_LOCK_EX)
172 #define lnet_ptl_lock(ptl) spin_lock(&(ptl)->ptl_lock)
173 #define lnet_ptl_unlock(ptl) spin_unlock(&(ptl)->ptl_lock)
174 #define lnet_eq_wait_lock() spin_lock(&the_lnet.ln_eq_wait_lock)
175 #define lnet_eq_wait_unlock() spin_unlock(&the_lnet.ln_eq_wait_lock)
176 #define lnet_ni_lock(ni) spin_lock(&(ni)->ni_lock)
177 #define lnet_ni_unlock(ni) spin_unlock(&(ni)->ni_lock)
179 #define MAX_PORTALS 64
181 static inline lnet_eq_t
*
186 LIBCFS_ALLOC(eq
, sizeof(*eq
));
191 lnet_eq_free(lnet_eq_t
*eq
)
193 LIBCFS_FREE(eq
, sizeof(*eq
));
196 static inline lnet_libmd_t
*
197 lnet_md_alloc(lnet_md_t
*umd
)
203 if (umd
->options
& LNET_MD_KIOV
) {
205 size
= offsetof(lnet_libmd_t
, md_iov
.kiov
[niov
]);
207 niov
= umd
->options
& LNET_MD_IOVEC
? umd
->length
: 1;
208 size
= offsetof(lnet_libmd_t
, md_iov
.iov
[niov
]);
211 LIBCFS_ALLOC(md
, size
);
214 /* Set here in case of early free */
215 md
->md_options
= umd
->options
;
217 INIT_LIST_HEAD(&md
->md_list
);
224 lnet_md_free(lnet_libmd_t
*md
)
228 if (md
->md_options
& LNET_MD_KIOV
)
229 size
= offsetof(lnet_libmd_t
, md_iov
.kiov
[md
->md_niov
]);
231 size
= offsetof(lnet_libmd_t
, md_iov
.iov
[md
->md_niov
]);
233 LIBCFS_FREE(md
, size
);
236 static inline lnet_me_t
*
241 LIBCFS_ALLOC(me
, sizeof(*me
));
246 lnet_me_free(lnet_me_t
*me
)
248 LIBCFS_FREE(me
, sizeof(*me
));
251 static inline lnet_msg_t
*
256 LIBCFS_ALLOC(msg
, sizeof(*msg
));
258 /* no need to zero, LIBCFS_ALLOC does for us */
263 lnet_msg_free(lnet_msg_t
*msg
)
265 LASSERT(!msg
->msg_onactivelist
);
266 LIBCFS_FREE(msg
, sizeof(*msg
));
269 lnet_libhandle_t
*lnet_res_lh_lookup(struct lnet_res_container
*rec
,
271 void lnet_res_lh_initialize(struct lnet_res_container
*rec
,
272 lnet_libhandle_t
*lh
);
274 lnet_res_lh_invalidate(lnet_libhandle_t
*lh
)
276 /* NB: cookie is still useful, don't reset it */
277 list_del(&lh
->lh_hash_chain
);
281 lnet_eq2handle(lnet_handle_eq_t
*handle
, lnet_eq_t
*eq
)
284 LNetInvalidateHandle(handle
);
288 handle
->cookie
= eq
->eq_lh
.lh_cookie
;
291 static inline lnet_eq_t
*
292 lnet_handle2eq(lnet_handle_eq_t
*handle
)
294 lnet_libhandle_t
*lh
;
296 lh
= lnet_res_lh_lookup(&the_lnet
.ln_eq_container
, handle
->cookie
);
300 return lh_entry(lh
, lnet_eq_t
, eq_lh
);
304 lnet_md2handle(lnet_handle_md_t
*handle
, lnet_libmd_t
*md
)
306 handle
->cookie
= md
->md_lh
.lh_cookie
;
309 static inline lnet_libmd_t
*
310 lnet_handle2md(lnet_handle_md_t
*handle
)
312 /* ALWAYS called with resource lock held */
313 lnet_libhandle_t
*lh
;
316 cpt
= lnet_cpt_of_cookie(handle
->cookie
);
317 lh
= lnet_res_lh_lookup(the_lnet
.ln_md_containers
[cpt
],
322 return lh_entry(lh
, lnet_libmd_t
, md_lh
);
325 static inline lnet_libmd_t
*
326 lnet_wire_handle2md(lnet_handle_wire_t
*wh
)
328 /* ALWAYS called with resource lock held */
329 lnet_libhandle_t
*lh
;
332 if (wh
->wh_interface_cookie
!= the_lnet
.ln_interface_cookie
)
335 cpt
= lnet_cpt_of_cookie(wh
->wh_object_cookie
);
336 lh
= lnet_res_lh_lookup(the_lnet
.ln_md_containers
[cpt
],
337 wh
->wh_object_cookie
);
341 return lh_entry(lh
, lnet_libmd_t
, md_lh
);
345 lnet_me2handle(lnet_handle_me_t
*handle
, lnet_me_t
*me
)
347 handle
->cookie
= me
->me_lh
.lh_cookie
;
350 static inline lnet_me_t
*
351 lnet_handle2me(lnet_handle_me_t
*handle
)
353 /* ALWAYS called with resource lock held */
354 lnet_libhandle_t
*lh
;
357 cpt
= lnet_cpt_of_cookie(handle
->cookie
);
358 lh
= lnet_res_lh_lookup(the_lnet
.ln_me_containers
[cpt
],
363 return lh_entry(lh
, lnet_me_t
, me_lh
);
367 lnet_peer_addref_locked(lnet_peer_t
*lp
)
369 LASSERT(lp
->lp_refcount
> 0);
373 void lnet_destroy_peer_locked(lnet_peer_t
*lp
);
376 lnet_peer_decref_locked(lnet_peer_t
*lp
)
378 LASSERT(lp
->lp_refcount
> 0);
380 if (!lp
->lp_refcount
)
381 lnet_destroy_peer_locked(lp
);
385 lnet_isrouter(lnet_peer_t
*lp
)
387 return lp
->lp_rtr_refcount
? 1 : 0;
391 lnet_ni_addref_locked(lnet_ni_t
*ni
, int cpt
)
393 LASSERT(cpt
>= 0 && cpt
< LNET_CPT_NUMBER
);
394 LASSERT(*ni
->ni_refs
[cpt
] >= 0);
396 (*ni
->ni_refs
[cpt
])++;
400 lnet_ni_addref(lnet_ni_t
*ni
)
403 lnet_ni_addref_locked(ni
, 0);
408 lnet_ni_decref_locked(lnet_ni_t
*ni
, int cpt
)
410 LASSERT(cpt
>= 0 && cpt
< LNET_CPT_NUMBER
);
411 LASSERT(*ni
->ni_refs
[cpt
] > 0);
413 (*ni
->ni_refs
[cpt
])--;
417 lnet_ni_decref(lnet_ni_t
*ni
)
420 lnet_ni_decref_locked(ni
, 0);
424 void lnet_ni_free(lnet_ni_t
*ni
);
426 lnet_ni_alloc(__u32 net
, struct cfs_expr_list
*el
, struct list_head
*nilist
);
429 lnet_nid2peerhash(lnet_nid_t nid
)
431 return hash_long(nid
, LNET_PEER_HASH_BITS
);
434 static inline struct list_head
*
435 lnet_net2rnethash(__u32 net
)
437 return &the_lnet
.ln_remote_nets_hash
[(LNET_NETNUM(net
) +
439 ((1U << the_lnet
.ln_remote_nets_hbits
) - 1)];
442 extern lnd_t the_lolnd
;
443 extern int avoid_asym_router_failure
;
445 int lnet_cpt_of_nid_locked(lnet_nid_t nid
);
446 int lnet_cpt_of_nid(lnet_nid_t nid
);
447 lnet_ni_t
*lnet_nid2ni_locked(lnet_nid_t nid
, int cpt
);
448 lnet_ni_t
*lnet_net2ni_locked(__u32 net
, int cpt
);
449 lnet_ni_t
*lnet_net2ni(__u32 net
);
451 extern int portal_rotor
;
453 int lnet_lib_init(void);
454 void lnet_lib_exit(void);
456 int lnet_notify(lnet_ni_t
*ni
, lnet_nid_t peer
, int alive
, unsigned long when
);
457 void lnet_notify_locked(lnet_peer_t
*lp
, int notifylnd
, int alive
,
459 int lnet_add_route(__u32 net
, __u32 hops
, lnet_nid_t gateway_nid
,
460 unsigned int priority
);
461 int lnet_check_routes(void);
462 int lnet_del_route(__u32 net
, lnet_nid_t gw_nid
);
463 void lnet_destroy_routes(void);
464 int lnet_get_route(int idx
, __u32
*net
, __u32
*hops
,
465 lnet_nid_t
*gateway
, __u32
*alive
, __u32
*priority
);
466 int lnet_get_net_config(int idx
, __u32
*cpt_count
, __u64
*nid
,
467 int *peer_timeout
, int *peer_tx_credits
,
468 int *peer_rtr_cr
, int *max_tx_credits
,
469 struct lnet_ioctl_net_config
*net_config
);
470 int lnet_get_rtr_pool_cfg(int idx
, struct lnet_ioctl_pool_cfg
*pool_cfg
);
472 void lnet_router_debugfs_init(void);
473 void lnet_router_debugfs_fini(void);
474 int lnet_rtrpools_alloc(int im_a_router
);
475 void lnet_destroy_rtrbuf(lnet_rtrbuf_t
*rb
, int npages
);
476 int lnet_rtrpools_adjust(int tiny
, int small
, int large
);
477 int lnet_rtrpools_enable(void);
478 void lnet_rtrpools_disable(void);
479 void lnet_rtrpools_free(int keep_pools
);
480 lnet_remotenet_t
*lnet_find_net_locked(__u32 net
);
481 int lnet_dyn_add_ni(lnet_pid_t requested_pid
, char *nets
,
482 __s32 peer_timeout
, __s32 peer_cr
, __s32 peer_buf_cr
,
484 int lnet_dyn_del_ni(__u32 net
);
485 int lnet_clear_lazy_portal(struct lnet_ni
*ni
, int portal
, char *reason
);
487 int lnet_islocalnid(lnet_nid_t nid
);
488 int lnet_islocalnet(__u32 net
);
490 void lnet_msg_attach_md(lnet_msg_t
*msg
, lnet_libmd_t
*md
,
491 unsigned int offset
, unsigned int mlen
);
492 void lnet_msg_detach_md(lnet_msg_t
*msg
, int status
);
493 void lnet_build_unlink_event(lnet_libmd_t
*md
, lnet_event_t
*ev
);
494 void lnet_build_msg_event(lnet_msg_t
*msg
, lnet_event_kind_t ev_type
);
495 void lnet_msg_commit(lnet_msg_t
*msg
, int cpt
);
496 void lnet_msg_decommit(lnet_msg_t
*msg
, int cpt
, int status
);
498 void lnet_eq_enqueue_event(lnet_eq_t
*eq
, lnet_event_t
*ev
);
499 void lnet_prep_send(lnet_msg_t
*msg
, int type
, lnet_process_id_t target
,
500 unsigned int offset
, unsigned int len
);
501 int lnet_send(lnet_nid_t nid
, lnet_msg_t
*msg
, lnet_nid_t rtr_nid
);
502 void lnet_return_tx_credits_locked(lnet_msg_t
*msg
);
503 void lnet_return_rx_credits_locked(lnet_msg_t
*msg
);
504 void lnet_schedule_blocked_locked(lnet_rtrbufpool_t
*rbp
);
505 void lnet_drop_routed_msgs_locked(struct list_head
*list
, int cpt
);
507 /* portals functions */
508 /* portals attributes */
510 lnet_ptl_is_lazy(lnet_portal_t
*ptl
)
512 return !!(ptl
->ptl_options
& LNET_PTL_LAZY
);
516 lnet_ptl_is_unique(lnet_portal_t
*ptl
)
518 return !!(ptl
->ptl_options
& LNET_PTL_MATCH_UNIQUE
);
522 lnet_ptl_is_wildcard(lnet_portal_t
*ptl
)
524 return !!(ptl
->ptl_options
& LNET_PTL_MATCH_WILDCARD
);
528 lnet_ptl_setopt(lnet_portal_t
*ptl
, int opt
)
530 ptl
->ptl_options
|= opt
;
534 lnet_ptl_unsetopt(lnet_portal_t
*ptl
, int opt
)
536 ptl
->ptl_options
&= ~opt
;
539 /* match-table functions */
540 struct list_head
*lnet_mt_match_head(struct lnet_match_table
*mtable
,
541 lnet_process_id_t id
, __u64 mbits
);
542 struct lnet_match_table
*lnet_mt_of_attach(unsigned int index
,
543 lnet_process_id_t id
, __u64 mbits
,
546 int lnet_mt_match_md(struct lnet_match_table
*mtable
,
547 struct lnet_match_info
*info
, struct lnet_msg
*msg
);
549 /* portals match/attach functions */
550 void lnet_ptl_attach_md(lnet_me_t
*me
, lnet_libmd_t
*md
,
551 struct list_head
*matches
, struct list_head
*drops
);
552 void lnet_ptl_detach_md(lnet_me_t
*me
, lnet_libmd_t
*md
);
553 int lnet_ptl_match_md(struct lnet_match_info
*info
, struct lnet_msg
*msg
);
555 /* initialized and finalize portals */
556 int lnet_portals_create(void);
557 void lnet_portals_destroy(void);
559 /* message functions */
560 int lnet_parse(lnet_ni_t
*ni
, lnet_hdr_t
*hdr
,
561 lnet_nid_t fromnid
, void *private, int rdma_req
);
562 void lnet_recv(lnet_ni_t
*ni
, void *private, lnet_msg_t
*msg
, int delayed
,
563 unsigned int offset
, unsigned int mlen
, unsigned int rlen
);
564 lnet_msg_t
*lnet_create_reply_msg(lnet_ni_t
*ni
, lnet_msg_t
*get_msg
);
565 void lnet_set_reply_msg_len(lnet_ni_t
*ni
, lnet_msg_t
*msg
, unsigned int len
);
567 void lnet_finalize(lnet_ni_t
*ni
, lnet_msg_t
*msg
, int rc
);
569 void lnet_drop_delayed_msg_list(struct list_head
*head
, char *reason
);
570 void lnet_recv_delayed_msg_list(struct list_head
*head
);
572 int lnet_msg_container_setup(struct lnet_msg_container
*container
, int cpt
);
573 void lnet_msg_container_cleanup(struct lnet_msg_container
*container
);
574 void lnet_msg_containers_destroy(void);
575 int lnet_msg_containers_create(void);
577 char *lnet_msgtyp2str(int type
);
578 void lnet_print_hdr(lnet_hdr_t
*hdr
);
579 int lnet_fail_nid(lnet_nid_t nid
, unsigned int threshold
);
581 void lnet_counters_get(lnet_counters_t
*counters
);
582 void lnet_counters_reset(void);
584 unsigned int lnet_iov_nob(unsigned int niov
, struct kvec
*iov
);
585 int lnet_extract_iov(int dst_niov
, struct kvec
*dst
,
586 int src_niov
, struct kvec
*src
,
587 unsigned int offset
, unsigned int len
);
589 unsigned int lnet_kiov_nob(unsigned int niov
, lnet_kiov_t
*iov
);
590 int lnet_extract_kiov(int dst_niov
, lnet_kiov_t
*dst
,
591 int src_niov
, lnet_kiov_t
*src
,
592 unsigned int offset
, unsigned int len
);
594 void lnet_copy_iov2iov(unsigned int ndiov
, struct kvec
*diov
,
595 unsigned int doffset
,
596 unsigned int nsiov
, struct kvec
*siov
,
597 unsigned int soffset
, unsigned int nob
);
598 void lnet_copy_kiov2iov(unsigned int niov
, struct kvec
*iov
,
599 unsigned int iovoffset
,
600 unsigned int nkiov
, lnet_kiov_t
*kiov
,
601 unsigned int kiovoffset
, unsigned int nob
);
602 void lnet_copy_iov2kiov(unsigned int nkiov
, lnet_kiov_t
*kiov
,
603 unsigned int kiovoffset
,
604 unsigned int niov
, struct kvec
*iov
,
605 unsigned int iovoffset
, unsigned int nob
);
606 void lnet_copy_kiov2kiov(unsigned int ndkiov
, lnet_kiov_t
*dkiov
,
607 unsigned int doffset
,
608 unsigned int nskiov
, lnet_kiov_t
*skiov
,
609 unsigned int soffset
, unsigned int nob
);
612 lnet_copy_iov2flat(int dlen
, void *dest
, unsigned int doffset
,
613 unsigned int nsiov
, struct kvec
*siov
, unsigned int soffset
,
616 struct kvec diov
= {/*.iov_base = */ dest
, /*.iov_len = */ dlen
};
618 lnet_copy_iov2iov(1, &diov
, doffset
,
619 nsiov
, siov
, soffset
, nob
);
623 lnet_copy_kiov2flat(int dlen
, void *dest
, unsigned int doffset
,
624 unsigned int nsiov
, lnet_kiov_t
*skiov
,
625 unsigned int soffset
, unsigned int nob
)
627 struct kvec diov
= {/* .iov_base = */ dest
, /* .iov_len = */ dlen
};
629 lnet_copy_kiov2iov(1, &diov
, doffset
,
630 nsiov
, skiov
, soffset
, nob
);
634 lnet_copy_flat2iov(unsigned int ndiov
, struct kvec
*diov
, unsigned int doffset
,
635 int slen
, void *src
, unsigned int soffset
, unsigned int nob
)
637 struct kvec siov
= {/*.iov_base = */ src
, /*.iov_len = */slen
};
639 lnet_copy_iov2iov(ndiov
, diov
, doffset
,
640 1, &siov
, soffset
, nob
);
644 lnet_copy_flat2kiov(unsigned int ndiov
, lnet_kiov_t
*dkiov
,
645 unsigned int doffset
, int slen
, void *src
,
646 unsigned int soffset
, unsigned int nob
)
648 struct kvec siov
= {/* .iov_base = */ src
, /* .iov_len = */ slen
};
650 lnet_copy_iov2kiov(ndiov
, dkiov
, doffset
,
651 1, &siov
, soffset
, nob
);
654 void lnet_me_unlink(lnet_me_t
*me
);
656 void lnet_md_unlink(lnet_libmd_t
*md
);
657 void lnet_md_deconstruct(lnet_libmd_t
*lmd
, lnet_md_t
*umd
);
659 void lnet_register_lnd(lnd_t
*lnd
);
660 void lnet_unregister_lnd(lnd_t
*lnd
);
662 int lnet_connect(struct socket
**sockp
, lnet_nid_t peer_nid
,
663 __u32 local_ip
, __u32 peer_ip
, int peer_port
);
664 void lnet_connect_console_error(int rc
, lnet_nid_t peer_nid
,
665 __u32 peer_ip
, int port
);
666 int lnet_count_acceptor_nis(void);
667 int lnet_acceptor_timeout(void);
668 int lnet_acceptor_port(void);
670 int lnet_count_acceptor_nis(void);
671 int lnet_acceptor_port(void);
673 int lnet_acceptor_start(void);
674 void lnet_acceptor_stop(void);
676 int lnet_ipif_query(char *name
, int *up
, __u32
*ip
, __u32
*mask
);
677 int lnet_ipif_enumerate(char ***names
);
678 void lnet_ipif_free_enumeration(char **names
, int n
);
679 int lnet_sock_setbuf(struct socket
*socket
, int txbufsize
, int rxbufsize
);
680 int lnet_sock_getbuf(struct socket
*socket
, int *txbufsize
, int *rxbufsize
);
681 int lnet_sock_getaddr(struct socket
*socket
, bool remote
, __u32
*ip
, int *port
);
682 int lnet_sock_write(struct socket
*sock
, void *buffer
, int nob
, int timeout
);
683 int lnet_sock_read(struct socket
*sock
, void *buffer
, int nob
, int timeout
);
685 int lnet_sock_listen(struct socket
**sockp
, __u32 ip
, int port
, int backlog
);
686 int lnet_sock_accept(struct socket
**newsockp
, struct socket
*sock
);
687 int lnet_sock_connect(struct socket
**sockp
, int *fatal
,
688 __u32 local_ip
, int local_port
,
689 __u32 peer_ip
, int peer_port
);
690 void libcfs_sock_release(struct socket
*sock
);
692 int lnet_peers_start_down(void);
693 int lnet_peer_buffer_credits(lnet_ni_t
*ni
);
695 int lnet_router_checker_start(void);
696 void lnet_router_checker_stop(void);
697 void lnet_router_ni_update_locked(lnet_peer_t
*gw
, __u32 net
);
698 void lnet_swap_pinginfo(lnet_ping_info_t
*info
);
700 int lnet_parse_ip2nets(char **networksp
, char *ip2nets
);
701 int lnet_parse_routes(char *route_str
, int *im_a_router
);
702 int lnet_parse_networks(struct list_head
*nilist
, char *networks
);
703 int lnet_net_unique(__u32 net
, struct list_head
*nilist
);
705 int lnet_nid2peer_locked(lnet_peer_t
**lpp
, lnet_nid_t nid
, int cpt
);
706 lnet_peer_t
*lnet_find_peer_locked(struct lnet_peer_table
*ptable
,
708 void lnet_peer_tables_cleanup(lnet_ni_t
*ni
);
709 void lnet_peer_tables_destroy(void);
710 int lnet_peer_tables_create(void);
711 void lnet_debug_peer(lnet_nid_t nid
);
712 int lnet_get_peer_info(__u32 peer_index
, __u64
*nid
,
713 char alivness
[LNET_MAX_STR_LEN
],
714 __u32
*cpt_iter
, __u32
*refcount
,
715 __u32
*ni_peer_tx_credits
, __u32
*peer_tx_credits
,
716 __u32
*peer_rtr_credits
, __u32
*peer_min_rtr_credtis
,
717 __u32
*peer_tx_qnob
);
720 lnet_peer_set_alive(lnet_peer_t
*lp
)
722 lp
->lp_last_query
= jiffies
;
723 lp
->lp_last_alive
= jiffies
;
725 lnet_notify_locked(lp
, 0, 1, lp
->lp_last_alive
);