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 Lesser General Public License as
8 * published by the Free Software Foundation; either version 2.1 of the
9 * License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 * Copyright (c) 2014, 2017, Intel Corporation.
24 * Amir Shehata <amir.shehata@intel.com>
27 #ifndef LIB_LNET_CONFIG_API_H
28 #define LIB_LNET_CONFIG_API_H
33 #include <sys/socket.h>
35 #include <netlink/netlink.h>
36 #include <netlink/genl/genl.h>
37 #include <netlink/genl/ctrl.h>
39 #include <libcfs/util/ioctl.h>
40 #include <libcfs/util/string.h>
41 #include <linux/lnet/lnet-dlc.h>
42 #include <linux/lnet/nidstr.h>
44 #define LUSTRE_CFG_RC_NO_ERR 0
45 #define LUSTRE_CFG_RC_BAD_PARAM -1
46 #define LUSTRE_CFG_RC_MISSING_PARAM -2
47 #define LUSTRE_CFG_RC_OUT_OF_RANGE_PARAM -3
48 #define LUSTRE_CFG_RC_OUT_OF_MEM -4
49 #define LUSTRE_CFG_RC_GENERIC_ERR -5
50 #define LUSTRE_CFG_RC_NO_MATCH -6
51 #define LUSTRE_CFG_RC_MATCH -7
52 #define LUSTRE_CFG_RC_SKIP -8
53 #define LUSTRE_CFG_RC_LAST_ELEM -9
54 #define LUSTRE_CFG_RC_MARSHAL_FAIL -10
56 #define CONFIG_CMD "configure"
57 #define UNCONFIG_CMD "unconfigure"
60 #define SHOW_CMD "show"
62 #define MANAGE_CMD "manage"
64 #define MAX_NUM_IPS 128
65 #define INT_STRING_LEN 23
66 #define LNET_DEFAULT_INDENT 6
68 #define modparam_path "/sys/module/lnet/parameters/"
69 #define o2ib_modparam_path "/sys/module/ko2iblnd/parameters/"
70 #define gni_nid_path "/proc/cray_xt/"
73 LNETCTL_CONFIG_CMD = 1,
74 LNETCTL_UNCONFIG_CMD = 2,
79 LNETCTL_MANAGE_CMD = 7,
84 * Max number of nids we'll configure for a single peer via a single DLC
87 #define LNET_MAX_NIDS_PER_PEER 128
89 struct lnet_dlc_network_descr {
90 struct list_head network_on_rule;
92 struct list_head nw_intflist;
95 struct lnet_dlc_intf_descr {
96 struct list_head intf_on_network;
97 char intf_name[IFNAMSIZ];
98 struct cfs_expr_list *cpt_expr;
101 /* This UDSP structures need to match the kernel space structures
102 * in order for the marshall and unmarshall functions to be the same.
105 /* Net is described as a
109 struct lnet_ud_net_descr {
111 struct list_head udn_net_num_range;
114 /* each NID range is defined as
116 * 2. address range descriptor
118 struct lnet_ud_nid_descr {
119 struct lnet_ud_net_descr ud_net_id;
120 struct list_head ud_addr_range;
123 /* a UDSP rule can have up to three user defined NID descriptors
124 * - src: defines the local NID range for the rule
125 * - dst: defines the peer NID range for the rule
126 * - rte: defines the router NID range for the rule
128 * An action union defines the action to take when the rule
132 struct list_head udsp_on_list;
134 struct lnet_ud_nid_descr udsp_src;
135 struct lnet_ud_nid_descr udsp_dst;
136 struct lnet_ud_nid_descr udsp_rte;
137 enum lnet_udsp_action_type udsp_action_type;
143 /* This union is passed from lnetctl to fill the action union in udsp
145 * TODO: The idea here is if we add extra actions, ex: drop, it can be
148 union lnet_udsp_action {
152 /* forward declaration of the cYAML structure. */
156 * lustre_lnet_config_lib_init()
157 * Initialize the Library to enable communication with the LNET kernel
158 * module. Returns the device ID or -EINVAL if there is an error
160 int lustre_lnet_config_lib_init();
163 * lustre_lnet_config_lib_uninit
164 * Uninitialize the DLC Library
166 void lustre_lnet_config_lib_uninit();
169 * lustre_lnet_config_ni_system
170 * Initialize/Uninitialize the lnet NI system.
172 * up - whehter to init or uninit the system
173 * load_ni_from_mod - load NI from mod params.
174 * seq_no - sequence number of the request
175 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
178 int lustre_lnet_config_ni_system(bool up, bool load_ni_from_mod,
179 int seq_no, struct cYAML **err_rc);
182 * lustre_lnet_config_route
183 * Send down an IOCTL to the kernel to configure the route
187 * hops - number of hops passed down by the user
188 * prio - priority of the route
189 * sen - health sensitivity value for the gateway
190 * seq_no - sequence number of the request
191 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
193 int lustre_lnet_config_route(char *nw, char *gw, int hops, int prio,
194 int sen, int seq_no, struct cYAML **err_rc);
197 * lustre_lnet_del_route
198 * Send down an IOCTL to the kernel to delete a route
202 * seq_no - sequence number of the request
203 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
205 int lustre_lnet_del_route(char *nw, char *gw, int seq_no,
206 struct cYAML **err_rc);
209 * lustre_lnet_show_route
210 * Send down an IOCTL to the kernel to show routes
211 * This function will get one route at a time and filter according to
212 * provided parameters. If no routes are available then it will dump all
213 * routes that are in the system.
215 * nw - network. Optional. Used to filter output
216 * gw - gateway. Optional. Used to filter ouptut
217 * hops - number of hops passed down by the user
218 * Optional. Used to filter output.
219 * prio - priority of the route. Optional. Used to filter output.
220 * detail - flag to indicate whether detail output is required
221 * seq_no - sequence number of the request
222 * show_rc - [OUT] The show output in YAML. Must be freed by caller.
223 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
224 * backup - true to output only what's necessary for reconfiguring
227 int lustre_lnet_show_route(char *nw, char *gw,
228 int hops, int prio, int detail,
229 int seq_no, struct cYAML **show_rc,
230 struct cYAML **err_rc, bool backup);
233 * lustre_lnet_config_ni
234 * Send down an IOCTL to configure a network interface. It implicitly
235 * creates a network if one doesn't exist..
237 * nw_descr - network and interface descriptor
238 * global_cpts - globally defined CPTs
239 * ip2net - this parameter allows configuring multiple networks.
240 * it takes precedence over the net and intf parameters
241 * tunables - LND tunables
242 * seq_no - sequence number of the request
243 * lnd_tunables - lnet specific tunable parameters
244 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
246 int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr,
247 struct cfs_expr_list *global_cpts,
249 struct lnet_ioctl_config_lnd_tunables *tunables,
250 int seq_no, struct cYAML **err_rc);
254 * Send down an IOCTL to delete a network interface. It implicitly
255 * deletes a network if it becomes empty of nis
257 * nw - network and interface list
258 * seq_no - sequence number of the request
259 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
261 int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw,
262 int seq_no, struct cYAML **err_rc);
265 * lustre_lnet_show_net
266 * Send down an IOCTL to show networks.
267 * This function will use the nw paramter to filter the output. If it's
268 * not provided then all networks are listed.
270 * nw - network to show. Optional. Used to filter output.
271 * detail - flag to indicate if we require detail output.
272 * seq_no - sequence number of the request
273 * show_rc - [OUT] The show output in YAML. Must be freed by caller.
274 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
275 * backup - true to output only what's necessary for reconfiguring
278 int lustre_lnet_show_net(char *nw, int detail, int seq_no,
279 struct cYAML **show_rc, struct cYAML **err_rc,
283 * lustre_lnet_enable_routing
284 * Send down an IOCTL to enable or diable routing
286 * enable - 1 to enable routing, 0 to disable routing
287 * seq_no - sequence number of the request
288 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
290 int lustre_lnet_enable_routing(int enable, int seq_no,
291 struct cYAML **err_rc);
294 * lustre_lnet_config_numa_range
295 * Set the NUMA range which impacts the NIs to be selected
296 * during sending. If the NUMA range is large the NUMA
297 * distance between the message memory and the NI becomes
298 * less significant. The NUMA range is a relative number
299 * with no other meaning besides allowing a wider breadth
300 * for picking an NI to send from.
302 * range - numa range value.
303 * seq_no - sequence number of the request
304 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
307 int lustre_lnet_config_numa_range(int range, int seq_no,
308 struct cYAML **err_rc);
311 * lustre_lnet_show_num_range
312 * Get the currently set NUMA range
314 * seq_no - sequence number of the request
315 * show_rc - [OUT] struct cYAML tree containing NUMA range info
316 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
319 int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc,
320 struct cYAML **err_rc);
323 * lustre_lnet_config_ni_healthv
324 * set the health value of the NI. -1 resets the value to maximum.
326 * value: health value to set.
327 * all: true to set all local NIs to that value.
328 * ni_nid: NI NID to set its health value. all parameter always takes
330 * seq_no - sequence number of the request
331 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
334 int lustre_lnet_config_ni_healthv(int value, bool all, char *ni_nid,
335 int seq_no, struct cYAML **err_rc);
338 /* lustre_lnet_config_ni_conns_per_peer
339 * set the conns_per_peer value of the NI. Valid range is specific to
342 * value: conns_per_peer value to set.
343 * all: true to set all local NIs to that value.
344 * ni_nid: NI NID to set its conns_per_peer value. 'all' parameter always
346 * seq_no - sequence number of the request
347 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
350 int lustre_lnet_config_ni_conns_per_peer(int value, bool all, char *ni_nid,
351 int seq_no, struct cYAML **err_rc);
354 * lustre_lnet_config_peer_ni_healthv
355 * set the health value of the peer NI. -1 resets the value to maximum.
357 * value: health value to set.
358 * all: true to set all local NIs to that value.
359 * pni_nid: Peer NI NID to set its health value. all parameter always takes
361 * seq_no - sequence number of the request
362 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
365 int lustre_lnet_config_peer_ni_healthv(int value, bool all, char *pni_nid,
366 int seq_no, struct cYAML **err_rc);
369 * lustre_lnet_config_recov_intrv
370 * set the recovery interval in seconds. That's the interval to ping an
371 * unhealthy interface.
373 * intrv - recovery interval value to configure
374 * seq_no - sequence number of the request
375 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
378 int lustre_lnet_config_recov_intrv(int intrv, int seq_no, struct cYAML **err_rc);
381 * lustre_lnet_show_recov_intrv
382 * show the recovery interval set in the system
384 * seq_no - sequence number of the request
385 * show_rc - [OUT] struct cYAML tree containing health sensitivity info
386 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
389 int lustre_lnet_show_recov_intrv(int seq_no, struct cYAML **show_rc,
390 struct cYAML **err_rc);
393 * lustre_lnet_config_rtr_sensitivity
394 * sets the router sensitivity percentage. If the percentage health
395 * of a router interface drops below that it's considered failed
397 * sen - sensitivity value to configure
398 * seq_no - sequence number of the request
399 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
402 int lustre_lnet_config_rtr_sensitivity(int sen, int seq_no, struct cYAML **err_rc);
405 * lustre_lnet_config_hsensitivity
406 * sets the health sensitivity; the value by which to decrement the
407 * health value of a local or peer NI. If 0 then health is turned off
409 * sen - sensitivity value to configure
410 * seq_no - sequence number of the request
411 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
414 int lustre_lnet_config_hsensitivity(int sen, int seq_no, struct cYAML **err_rc);
417 * lustre_lnet_show_hsensitivity
418 * show the health sensitivity in the system
420 * seq_no - sequence number of the request
421 * show_rc - [OUT] struct cYAML tree containing health sensitivity info
422 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
425 int lustre_lnet_show_hsensitivity(int seq_no, struct cYAML **show_rc,
426 struct cYAML **err_rc);
429 * lustre_lnet_show_rtr_sensitivity
430 * show the router sensitivity percentage in the system
432 * seq_no - sequence number of the request
433 * show_rc - [OUT] struct cYAML tree containing health sensitivity info
434 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
437 int lustre_lnet_show_rtr_sensitivity(int seq_no, struct cYAML **show_rc,
438 struct cYAML **err_rc);
441 * lustre_lnet_config_transaction_to
442 * sets the timeout after which a message expires or a timeout event is
443 * propagated for an expired response.
445 * timeout - timeout value to configure
446 * seq_no - sequence number of the request
447 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
450 int lustre_lnet_config_transaction_to(int timeout, int seq_no, struct cYAML **err_rc);
453 * lustre_lnet_show_transaction_to
454 * show the transaction timeout in the system
456 * seq_no - sequence number of the request
457 * show_rc - [OUT] struct cYAML tree containing transaction timeout info
458 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
461 int lustre_lnet_show_transaction_to(int seq_no, struct cYAML **show_rc,
462 struct cYAML **err_rc);
465 * lustre_lnet_config_retry_count
466 * sets the maximum number of retries to resend a message
468 * count - maximum value to configure
469 * seq_no - sequence number of the request
470 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
473 int lustre_lnet_config_retry_count(int count, int seq_no, struct cYAML **err_rc);
476 * lustre_lnet_show_retry_count
477 * show current maximum number of retries in the system
479 * seq_no - sequence number of the request
480 * show_rc - [OUT] struct cYAML tree containing retry count info
481 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
484 int lustre_lnet_show_retry_count(int seq_no, struct cYAML **show_rc,
485 struct cYAML **err_rc);
487 int lustre_lnet_show_lnd_timeout(int seq_no, struct cYAML **show_rc,
488 struct cYAML **err_rc);
490 int lustre_lnet_show_local_ni_recovq(int seq_no, struct cYAML **show_rc,
491 struct cYAML **err_rc);
493 int lustre_lnet_show_peer_ni_recovq(int seq_no, struct cYAML **show_rc,
494 struct cYAML **err_rc);
495 int lustre_lnet_config_response_tracking(int count, int seq_no,
496 struct cYAML **err_rc);
497 int lustre_lnet_show_response_tracking(int seq_no, struct cYAML **show_rc,
498 struct cYAML **err_rc);
499 int lustre_lnet_config_recovery_limit(int val, int seq_no,
500 struct cYAML **err_rc);
501 int lustre_lnet_show_recovery_limit(int seq_no, struct cYAML **show_rc,
502 struct cYAML **err_rc);
503 int lustre_lnet_show_max_recovery_ping_interval(int seq_no,
504 struct cYAML **show_rc,
505 struct cYAML **err_rc);
508 * lustre_lnet_config_max_intf
509 * Sets the maximum number of interfaces per node. this tunable is
510 * primarily useful for sanity checks prior to allocating memory.
512 * max - maximum value to configure
513 * seq_no - sequence number of the request
514 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
517 int lustre_lnet_config_max_intf(int max, int seq_no, struct cYAML **err_rc);
520 * lustre_lnet_show_max_intf
521 * show current maximum interface setting
523 * seq_no - sequence number of the request
524 * show_rc - [OUT] struct cYAML tree containing NUMA range info
525 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
528 int lustre_lnet_show_max_intf(int seq_no, struct cYAML **show_rc,
529 struct cYAML **err_rc);
532 * lustre_lnet_calc_service_id
533 * Calculate the lustre service id to be used for qos
535 int lustre_lnet_calc_service_id(__u64 *service_id);
538 * lustre_lnet_setup_mrrouting
539 * configure linux routing tables for tcp interfaces
541 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
544 int lustre_lnet_setup_mrrouting(struct cYAML **err_rc);
547 * lustre_lnet_calc_cpt_of_nid
548 * Return the cpt number of the NID provided
550 int lustre_lnet_calc_cpt_of_nid(char *nidc, long int ncpts);
553 * lustre_lnet_config_discovery
554 * Enable or disable peer discovery. Peer discovery is enabled by default.
556 * enable - non-0 enables, 0 disables
557 * seq_no - sequence number of the request
558 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
561 int lustre_lnet_config_discovery(int enable, int seq_no, struct cYAML **err_rc);
564 * lustre_lnet_show_discovery
565 * show current peer discovery setting
567 * seq_no - sequence number of the request
568 * show_rc - [OUT] struct cYAML tree containing NUMA range info
569 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
572 int lustre_lnet_show_discovery(int seq_no, struct cYAML **show_rc,
573 struct cYAML **err_rc);
576 * lustre_lnet_config_drop_asym_route
577 * Drop or accept asymmetrical route messages. Accept by default.
579 * drop - non-0 drops, 0 accepts
580 * seq_no - sequence number of the request
581 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
584 int lustre_lnet_config_drop_asym_route(int drop, int seq_no,
585 struct cYAML **err_rc);
588 * lustre_lnet_show_drop_asym_route
589 * show current drop asym route setting
591 * seq_no - sequence number of the request
592 * show_rc - [OUT] struct cYAML tree containing NUMA range info
593 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
596 int lustre_lnet_show_drop_asym_route(int seq_no, struct cYAML **show_rc,
597 struct cYAML **err_rc);
600 * lustre_lnet_config_buffers
601 * Send down an IOCTL to configure routing buffer sizes. A value of 0 means
602 * default that particular buffer to default size. A value of -1 means
603 * leave the value of the buffer un changed.
605 * tiny - tiny buffers
606 * small - small buffers
607 * large - large buffers.
608 * seq_no - sequence number of the request
609 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
611 int lustre_lnet_config_buffers(int tiny, int small, int large,
612 int seq_no, struct cYAML **err_rc);
615 * lustre_lnet_config_max_recovery_ping_interval
616 * Set the maximum recovery ping interval.
618 * interval - interval value in seconds
619 * seq_no - sequence number of the request
620 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
622 int lustre_lnet_config_max_recovery_ping_interval(int interval, int seq_no,
623 struct cYAML **err_rc);
626 * lustre_lnet_show_routing
627 * Send down an IOCTL to dump buffers and routing status
628 * This function is used to dump buffers for all CPU partitions.
630 * seq_no - sequence number of the request
631 * show_rc - [OUT] The show output in YAML. Must be freed by caller.
632 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
633 * backup - true to output only what's necessary for reconfiguring
636 int lustre_lnet_show_routing(int seq_no, struct cYAML **show_rc,
637 struct cYAML **err_rc, bool backup);
640 * lustre_lnet_show_stats
641 * Shows internal LNET statistics. This is useful to display the
642 * current LNET activity, such as number of messages route, etc
644 * seq_no - sequence number of the command
645 * show_rc - YAML structure of the resultant show
646 * err_rc - YAML strucutre of the resultant return code.
648 int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc,
649 struct cYAML **err_rc);
652 * lustre_lnet_reset_stats
653 * Resets internal LNET statistics.
655 * err_rc - YAML strucutre of the resultant return code.
657 int lustre_lnet_reset_stats(int seq_no, struct cYAML **err_rc);
660 * lustre_lnet_modify_peer
661 * Handle a peer config or delete operation.
664 * Add a peer NID to a peer with primary NID pnid.
665 * If the provided primary NID is unique, then a new peer is
666 * created with this primary NID, and the NIDs in the NID list are added as
667 * secondary NIDs to this new peer.
668 * If any of the NIDs in the NID list are not unique then the operation
669 * fails. Some peer NIDs might have already been added. It's the responsibility
670 * of the caller of this API to remove the added NIDs if so desired.
673 * Delete the NIDs given in the NID list from the peer with the primary NID
674 * pnid. If pnid is NULL, or it doesn't identify a peer, the operation fails,
675 * and no change happens to the system.
676 * The operation is aborted on the first NID that fails to be deleted.
678 * prim_nid - The desired primary NID of a new peer, or the primary NID of
680 * nids - a comma separated string of nids
681 * is_mr - Specifies whether this peer is MR capable.
682 * cmd - CONFIG or DELETE
683 * force - whether force-deleting a peer with locked primary nid
684 * seq_no - sequence number of the command
685 * err_rc - YAML structure of the resultant return code
687 int lustre_lnet_modify_peer(char *prim_nid, char *nids, bool is_mr, int cmd,
688 int force, int seq_no, struct cYAML **err_rc);
691 * lustre_lnet_show_peer
692 * Show the peer identified by nid, knid. If knid is NULL all
693 * peers in the system are shown.
695 * knid - A NID of the peer
696 * detail - display detailed information
697 * seq_no - sequence number of the command
698 * show_rc - YAML structure of the resultant show
699 * err_rc - YAML strucutre of the resultant return code.
700 * backup - true to output only what's necessary for reconfiguring
704 int lustre_lnet_show_peer(char *knid, int detail, int seq_no,
705 struct cYAML **show_rc, struct cYAML **err_rc,
709 * lustre_lnet_list_peer
710 * List the known peers.
712 * seq_no - sequence number of the command
713 * show_rc - YAML structure of the resultant show
714 * err_rc - YAML strucutre of the resultant return code.
717 int lustre_lnet_list_peer(int seq_no,
718 struct cYAML **show_rc, struct cYAML **err_rc);
720 /* lustre_lnet_ping_nid
721 * Ping the nid list, pnids.
723 * pnids - NID list to ping.
724 * src_nidstr - source NID
725 * timeout - timeout(seconds) for ping.
726 * seq_no - sequence number of the command.
727 * show_rc - YAML structure of the resultant show.
728 * err_rc - YAML strucutre of the resultant return code.
731 int lustre_lnet_ping_nid(char *pnid, char *src_nidstr, int timeout, int seq_no,
732 struct cYAML **show_rc, struct cYAML **err_rc);
734 /* lustre_lnet_discover_nid
735 * Discover the nid list, pnids.
737 * pnids - NID list to discover.
738 * force - force discovery.
739 * seq_no - sequence number of the command.
740 * show_rc - YAML structure of the resultant show.
741 * err_rc - YAML strucutre of the resultant return code.
744 int lustre_lnet_discover_nid(char *pnid, int force, int seq_no,
745 struct cYAML **show_rc, struct cYAML **err_rc);
749 * Parses the provided YAML file and then calls the specific APIs
750 * to configure the entities identified in the file
753 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
755 int lustre_yaml_config(char *f, struct cYAML **err_rc);
759 * Parses the provided YAML file and then calls the specific APIs
760 * to delete the entities identified in the file
763 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
765 int lustre_yaml_del(char *f, struct cYAML **err_rc);
769 * Parses the provided YAML file and then calls the specific APIs
770 * to show the entities identified in the file
773 * show_rc - [OUT] The show output in YAML. Must be freed by caller.
774 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
776 int lustre_yaml_show(char *f, struct cYAML **show_rc,
777 struct cYAML **err_rc);
781 * Parses the provided YAML file and then calls the specific APIs
782 * to execute the entities identified in the file
785 * show_rc - [OUT] The show output in YAML. Must be freed by caller.
786 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller
788 int lustre_yaml_exec(char *f, struct cYAML **show_rc,
789 struct cYAML **err_rc);
792 char nidstr[LNET_MAX_STR_LEN * 2];
793 struct nl_list_head children;
794 struct nl_list_head list;
797 int lustre_lnet_parse_nid_range(struct nid_node *head, char *nidstr,
798 const char **errmsg);
799 void lustre_lnet_free_list(struct nid_node *head);
802 * yaml_emitter_set_output_netlink
804 * Special handling to integrate LNet handling into libyaml.
805 * This function sets up the ability to take the data stored in @emitter
806 * and formats into a netlink packet to send to the kernel.
808 * emitter - YAML emitter containing what the user specified
809 * nl - Netlink socket to be used by libyaml
810 * family - Netlink family
811 * version - notify kernel what version user land supports
812 * cmd - Netlink command to execute
813 * flags - Netlink flags
815 int yaml_emitter_set_output_netlink(yaml_emitter_t *emitter, struct nl_sock *nl,
816 char *family, int version, int cmd,
820 * yaml_parser_set_input_netlink
822 * Special handling to LNet handling into libyaml.
823 * This function sets up the ability to receive the Netlink data
824 * from the Linux kernel. That data is formated into a YAML document.
826 * parser - YAML parser that is used to present the data received
827 * from the kernel in Netlink format.
828 * nl - should be the Netlink socket receiving data from
830 * stream - Handle the case of continuous data coming in.
832 int yaml_parser_set_input_netlink(yaml_parser_t *parser, struct nl_sock *nl,
836 * yaml_parser_get_reader_proto_version
838 * This function retrieves the Neltink version the kernel module
841 * parser - YAML parser being used for Netlink communication.
843 int yaml_parser_get_reader_proto_version(yaml_parser_t *parser);
846 * yaml_parser_get_reader_error
848 * By default libyaml reports a generic write error. We need a way
849 * to report better parser errors so we can track down problems.
851 * parser - YAML parser that has reported an error.
853 const char *yaml_parser_get_reader_error(yaml_parser_t *parser);
856 * yaml_parser_log_error
858 * Helper function to report the parser error to @log.
860 * parser - YAML parser that has reported an error.
861 * log - file descriptor to write the error message out to.
862 * errmsg - Special extra string to append to error message.
864 void yaml_parser_log_error(yaml_parser_t *parser, FILE *log,
868 * yaml_emitter_log_error
870 * Helper function to report the emitter error to @log.
872 * emitter - YAML emitter that has reported an error.
873 * log - file descriptor to write the error message out to.
875 void yaml_emitter_log_error(yaml_emitter_t *emitter, FILE *log);
879 * lustre_lnet_init_nw_descr
880 * initialize the network descriptor structure for use
882 void lustre_lnet_init_nw_descr(struct lnet_dlc_network_descr *nw_descr);
885 * lustre_lnet_parse_interfaces
886 * prase an interface string and populate descriptor structures
887 * intf_str - interface string of the format
888 * <intf>[<expr>], <intf>[<expr>],..
889 * nw_descr - network descriptor to populate
890 * init - True to initialize nw_descr
892 int lustre_lnet_parse_interfaces(char *intf_str,
893 struct lnet_dlc_network_descr *nw_descr);
896 * lustre_lnet_parse_nidstr
897 * This is a small wrapper around cfs_parse_nidlist.
898 * nidstr - A string parseable by cfs_parse_nidlist
899 * lnet_nidlist - An array of lnet_nid_t to hold the nids specified
901 * max_nids - Size of the lnet_nidlist array, and the maximum number of
902 * nids that can be expressed by the nidstring. If the
903 * nidstring expands to a larger number of nids than max_nids
904 * then an error is returned.
905 * err_str - char pointer where we store an informative error
906 * message when an error is encountered
908 * The number (> 0) of lnet_nid_t stored in the supplied array, or
909 * LUSTRE_CFG_RC_BAD_PARAM if:
911 * - nidstr contains an asterisk. This character is not allowed
912 * because it would cause the size of the expanded nidlist to exceed
913 * the maximum number of nids that is supported by expected callers
915 * - cfs_parse_nidlist fails to parse the nidstring
916 * - The nidlist populated by cfs_parse_nidlist is empty
917 * - The nidstring expands to a larger number of nids than max_nids
918 * - The nidstring expands to zero nids
919 * LUSTRE_CFG_RC_OUT_OF_MEM if:
920 * - cfs_expand_nidlist can return ENOMEM. We return out of mem in
923 int lustre_lnet_parse_nidstr(char *nidstr, lnet_nid_t *lnet_nidlist,
924 int max_nids, char *err_str);
926 /* lustre_lnet_add_udsp
927 * Add a selection policy.
928 * src - source NID descriptor
929 * dst - destination NID descriptor
930 * rte - router NID descriptor
932 * action - union of the action
933 * idx - the index to delete
934 * seq_no - sequence number of the request
935 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
938 int lustre_lnet_add_udsp(char *src, char *dst, char *rte, char *type,
939 union lnet_udsp_action *action, int idx,
940 int seq_no, struct cYAML **err_rc);
942 /* lustre_lnet_del_udsp
943 * Delete a net selection policy.
944 * idx - the index to delete
945 * seq_no - sequence number of the request
946 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
949 int lustre_lnet_del_udsp(unsigned int idx, int seq_no, struct cYAML **err_rc);
951 /* lustre_lnet_show_udsp
952 * show selection policy.
953 * idx - the index to show. -1 to show all policies
954 * seq_no - sequence number of the request
955 * err_rc - [IN/OUT] struct cYAML tree containing udsp info
956 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
959 int lustre_lnet_show_udsp(int idx, int seq_no, struct cYAML **show_rc,
960 struct cYAML **err_rc);
962 /* lustre_lnet_show_peer_debug_info
963 * dump peer debug info
964 * peer_nid - nid of the peer to show
965 * seq_no - sequence number of the request
966 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
969 int lustre_lnet_show_peer_debug_info(char *peer_nid, int seq_no,
970 struct cYAML **err_rc);
972 /* lustre_lnet_set_peer_state
974 * lpni_nid - primary nid of the peer
975 * seq_no - sequence number of the request
976 * err_rc - [OUT] struct cYAML tree describing the error. Freed by
979 int lustre_lnet_set_peer_state(int state, char *lpni_nid, int seq_no,
980 struct cYAML **err_rc);
982 #endif /* LIB_LNET_CONFIG_API_H */