1 /*
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
18 * http://www.gnu.org/licenses/gpl-2.0.html
19 *
20 * GPL HEADER END
21 */
22 /*
23 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
25 *
26 * Copyright (c) 2011, 2015, Intel Corporation.
27 */
28 #ifndef _LNET_NIDSTRINGS_H
29 #define _LNET_NIDSTRINGS_H
30
31 #include "types.h"
32
33 /**
34 * Lustre Network Driver types.
35 */
36 enum {
37 /*
38 * Only add to these values (i.e. don't ever change or redefine them):
39 * network addresses depend on them...
40 */
41 QSWLND = 1,
42 SOCKLND = 2,
43 GMLND = 3,
44 PTLLND = 4,
45 O2IBLND = 5,
46 CIBLND = 6,
47 OPENIBLND = 7,
48 IIBLND = 8,
49 LOLND = 9,
50 RALND = 10,
51 VIBLND = 11,
52 MXLND = 12,
53 GNILND = 13,
54 GNIIPLND = 14,
55 };
56
57 struct list_head;
58
59 #define LNET_NIDSTR_COUNT 1024 /* # of nidstrings */
60 #define LNET_NIDSTR_SIZE 32 /* size of each one (see below for usage) */
61
62 /* support decl needed by both kernel and user space */
63 char *libcfs_next_nidstring(void);
64 int libcfs_isknown_lnd(__u32 lnd);
65 char *libcfs_lnd2modname(__u32 lnd);
66 char *libcfs_lnd2str_r(__u32 lnd, char *buf, size_t buf_size);
libcfs_lnd2str(__u32 lnd)67 static inline char *libcfs_lnd2str(__u32 lnd)
68 {
69 return libcfs_lnd2str_r(lnd, libcfs_next_nidstring(),
70 LNET_NIDSTR_SIZE);
71 }
72
73 int libcfs_str2lnd(const char *str);
74 char *libcfs_net2str_r(__u32 net, char *buf, size_t buf_size);
libcfs_net2str(__u32 net)75 static inline char *libcfs_net2str(__u32 net)
76 {
77 return libcfs_net2str_r(net, libcfs_next_nidstring(),
78 LNET_NIDSTR_SIZE);
79 }
80
81 char *libcfs_nid2str_r(lnet_nid_t nid, char *buf, size_t buf_size);
libcfs_nid2str(lnet_nid_t nid)82 static inline char *libcfs_nid2str(lnet_nid_t nid)
83 {
84 return libcfs_nid2str_r(nid, libcfs_next_nidstring(),
85 LNET_NIDSTR_SIZE);
86 }
87
88 __u32 libcfs_str2net(const char *str);
89 lnet_nid_t libcfs_str2nid(const char *str);
90 int libcfs_str2anynid(lnet_nid_t *nid, const char *str);
91 char *libcfs_id2str(lnet_process_id_t id);
92 void cfs_free_nidlist(struct list_head *list);
93 int cfs_parse_nidlist(char *str, int len, struct list_head *list);
94 int cfs_print_nidlist(char *buffer, int count, struct list_head *list);
95 int cfs_match_nid(lnet_nid_t nid, struct list_head *list);
96
97 int cfs_ip_addr_parse(char *str, int len, struct list_head *list);
98 int cfs_ip_addr_match(__u32 addr, struct list_head *list);
99 bool cfs_nidrange_is_contiguous(struct list_head *nidlist);
100 void cfs_nidrange_find_min_max(struct list_head *nidlist, char *min_nid,
101 char *max_nid, size_t nidstr_length);
102
103 struct netstrfns {
104 __u32 nf_type;
105 char *nf_name;
106 char *nf_modname;
107 void (*nf_addr2str)(__u32 addr, char *str, size_t size);
108 int (*nf_str2addr)(const char *str, int nob, __u32 *addr);
109 int (*nf_parse_addrlist)(char *str, int len,
110 struct list_head *list);
111 int (*nf_print_addrlist)(char *buffer, int count,
112 struct list_head *list);
113 int (*nf_match_addr)(__u32 addr, struct list_head *list);
114 bool (*nf_is_contiguous)(struct list_head *nidlist);
115 void (*nf_min_max)(struct list_head *nidlist, __u32 *min_nid,
116 __u32 *max_nid);
117 };
118
119 #endif /* _LNET_NIDSTRINGS_H */
120