X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flnetconfig%2Fliblnetconfig.h;h=3e4334b535ac2d5eeeeb3d342cb8f0d8cfc14847;hb=04dda288a415312747ea783ef59a4a92103a3452;hp=a051220d4e0e1555dbc3edd20b72804d16d01302;hpb=d10200a80770f0029d1d665af954187b9ad883df;p=fs%2Flustre-release.git diff --git a/lnet/utils/lnetconfig/liblnetconfig.h b/lnet/utils/lnetconfig/liblnetconfig.h index a051220..3e4334b 100644 --- a/lnet/utils/lnetconfig/liblnetconfig.h +++ b/lnet/utils/lnetconfig/liblnetconfig.h @@ -18,7 +18,7 @@ * * LGPL HEADER END * - * Copyright (c) 2014, 2016, Intel Corporation. + * Copyright (c) 2014, 2017, Intel Corporation. * * Author: * Amir Shehata @@ -27,7 +27,10 @@ #ifndef LIB_LNET_CONFIG_API_H #define LIB_LNET_CONFIG_API_H -#include +#include +#include +#include +#include #define LUSTRE_CFG_RC_NO_ERR 0 #define LUSTRE_CFG_RC_BAD_PARAM -1 @@ -35,6 +38,33 @@ #define LUSTRE_CFG_RC_OUT_OF_RANGE_PARAM -3 #define LUSTRE_CFG_RC_OUT_OF_MEM -4 #define LUSTRE_CFG_RC_GENERIC_ERR -5 +#define LUSTRE_CFG_RC_NO_MATCH -6 +#define LUSTRE_CFG_RC_MATCH -7 +#define LUSTRE_CFG_RC_SKIP -8 +#define LUSTRE_CFG_RC_LAST_ELEM -9 + +enum lnetctl_cmd { + LNETCTL_CONFIG_CMD = 1, + LNETCTL_UNCONFIG_CMD = 2, + LNETCTL_ADD_CMD = 3, + LNETCTL_DEL_CMD = 4, + LNETCTL_SHOW_CMD = 5, + LNETCTL_DBG_CMD = 6, + LNETCTL_MANAGE_CMD = 7, + LNETCTL_LAST_CMD +}; + +struct lnet_dlc_network_descr { + struct list_head network_on_rule; + __u32 nw_id; + struct list_head nw_intflist; +}; + +struct lnet_dlc_intf_descr { + struct list_head intf_on_network; + char intf_name[IFNAMSIZ]; + struct cfs_expr_list *cpt_expr; +}; /* forward declaration of the cYAML structure. */ struct cYAML; @@ -47,6 +77,12 @@ struct cYAML; int lustre_lnet_config_lib_init(); /* + * lustre_lnet_config_lib_uninit + * Uninitialize the DLC Library + */ +void lustre_lnet_config_lib_uninit(); + +/* * lustre_lnet_config_ni_system * Initialize/Uninitialize the lnet NI system. * @@ -67,11 +103,12 @@ int lustre_lnet_config_ni_system(bool up, bool load_ni_from_mod, * gw - gateway * hops - number of hops passed down by the user * prio - priority of the route + * sen - health sensitivity value for the gateway * seq_no - sequence number of the request * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller */ int lustre_lnet_config_route(char *nw, char *gw, int hops, int prio, - int seq_no, struct cYAML **err_rc); + int sen, int seq_no, struct cYAML **err_rc); /* * lustre_lnet_del_route @@ -101,46 +138,45 @@ int lustre_lnet_del_route(char *nw, char *gw, int seq_no, * seq_no - sequence number of the request * show_rc - [OUT] The show output in YAML. Must be freed by caller. * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller + * backup - true to output only what's necessary for reconfiguring + * a node. */ int lustre_lnet_show_route(char *nw, char *gw, int hops, int prio, int detail, int seq_no, struct cYAML **show_rc, - struct cYAML **err_rc); + struct cYAML **err_rc, bool backup); /* - * lustre_lnet_config_net - * Send down an IOCTL to configure a network. + * lustre_lnet_config_ni + * Send down an IOCTL to configure a network interface. It implicitly + * creates a network if one doesn't exist.. * - * net - the network name - * intf - the interface of the network of the form net_name(intf) + * nw_descr - network and interface descriptor + * global_cpts - globally defined CPTs * ip2net - this parameter allows configuring multiple networks. * it takes precedence over the net and intf parameters - * peer_to - peer timeout - * peer_cr - peer credit - * peer_buf_cr - peer buffer credits - * - the above are LND tunable parameters and are optional - * credits - network interface credits - * smp - cpu affinity + * tunables - LND tunables * seq_no - sequence number of the request * lnd_tunables - lnet specific tunable parameters * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller */ -int lustre_lnet_config_net(char *net, char *intf, char *ip2net, - int peer_to, int peer_cr, int peer_buf_cr, - int credits, char *smp, int seq_no, - struct lnet_ioctl_config_lnd_tunables *lnd_tunables, - struct cYAML **err_rc); +int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr, + struct cfs_expr_list *global_cpts, + char *ip2net, + struct lnet_ioctl_config_lnd_tunables *tunables, + int seq_no, struct cYAML **err_rc); /* - * lustre_lnet_del_net - * Send down an IOCTL to delete a network. + * lustre_lnet_del_ni + * Send down an IOCTL to delete a network interface. It implicitly + * deletes a network if it becomes empty of nis * - * nw - network to delete. + * nw - network and interface list * seq_no - sequence number of the request * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller */ -int lustre_lnet_del_net(char *nw, int seq_no, - struct cYAML **err_rc); +int lustre_lnet_del_ni(struct lnet_dlc_network_descr *nw, + int seq_no, struct cYAML **err_rc); /* * lustre_lnet_show_net @@ -153,9 +189,12 @@ int lustre_lnet_del_net(char *nw, int seq_no, * seq_no - sequence number of the request * show_rc - [OUT] The show output in YAML. Must be freed by caller. * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller + * backup - true to output only what's necessary for reconfiguring + * a node. */ int lustre_lnet_show_net(char *nw, int detail, int seq_no, - struct cYAML **show_rc, struct cYAML **err_rc); + struct cYAML **show_rc, struct cYAML **err_rc, + bool backup); /* * lustre_lnet_enable_routing @@ -169,6 +208,261 @@ int lustre_lnet_enable_routing(int enable, int seq_no, struct cYAML **err_rc); /* + * lustre_lnet_config_numa_range + * Set the NUMA range which impacts the NIs to be selected + * during sending. If the NUMA range is large the NUMA + * distance between the message memory and the NI becomes + * less significant. The NUMA range is a relative number + * with no other meaning besides allowing a wider breadth + * for picking an NI to send from. + * + * range - numa range value. + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_numa_range(int range, int seq_no, + struct cYAML **err_rc); + +/* + * lustre_lnet_show_num_range + * Get the currently set NUMA range + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing NUMA range info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_numa_range(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_ni_healthv + * set the health value of the NI. -1 resets the value to maximum. + * + * value: health value to set. + * all: true to set all local NIs to that value. + * ni_nid: NI NID to set its health value. all parameter always takes + * precedence + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_ni_healthv(int value, bool all, char *ni_nid, + int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_config_peer_ni_healthv + * set the health value of the peer NI. -1 resets the value to maximum. + * + * value: health value to set. + * all: true to set all local NIs to that value. + * pni_nid: Peer NI NID to set its health value. all parameter always takes + * precedence + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_peer_ni_healthv(int value, bool all, char *pni_nid, + int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_config_recov_intrv + * set the recovery interval in seconds. That's the interval to ping an + * unhealthy interface. + * + * intrv - recovery interval value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_recov_intrv(int intrv, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_recov_intrv + * show the recovery interval set in the system + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing health sensitivity info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_recov_intrv(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_rtr_sensitivity + * sets the router sensitivity percentage. If the percentage health + * of a router interface drops below that it's considered failed + * + * sen - sensitivity value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_rtr_sensitivity(int sen, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_config_hsensitivity + * sets the health sensitivity; the value by which to decrement the + * health value of a local or peer NI. If 0 then health is turned off + * + * sen - sensitivity value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_hsensitivity(int sen, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_hsensitivity + * show the health sensitivity in the system + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing health sensitivity info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_hsensitivity(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_show_rtr_sensitivity + * show the router sensitivity percentage in the system + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing health sensitivity info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_rtr_sensitivity(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_transaction_to + * sets the timeout after which a message expires or a timeout event is + * propagated for an expired response. + * + * timeout - timeout value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_transaction_to(int timeout, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_transaction_to + * show the transaction timeout in the system + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing transaction timeout info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_transaction_to(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_retry_count + * sets the maximum number of retries to resend a message + * + * count - maximum value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_retry_count(int count, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_retry_count + * show current maximum number of retries in the system + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing retry count info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_retry_count(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +int lustre_lnet_show_local_ni_recovq(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +int lustre_lnet_show_peer_ni_recovq(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_max_intf + * Sets the maximum number of interfaces per node. this tunable is + * primarily useful for sanity checks prior to allocating memory. + * + * max - maximum value to configure + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_max_intf(int max, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_max_intf + * show current maximum interface setting + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing NUMA range info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_max_intf(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_discovery + * Enable or disable peer discovery. Peer discovery is enabled by default. + * + * enable - non-0 enables, 0 disables + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_discovery(int enable, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_discovery + * show current peer discovery setting + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing NUMA range info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_discovery(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_config_drop_asym_route + * Drop or accept asymmetrical route messages. Accept by default. + * + * drop - non-0 drops, 0 accepts + * seq_no - sequence number of the request + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_config_drop_asym_route(int drop, int seq_no, + struct cYAML **err_rc); + +/* + * lustre_lnet_show_drop_asym_route + * show current drop asym route setting + * + * seq_no - sequence number of the request + * show_rc - [OUT] struct cYAML tree containing NUMA range info + * err_rc - [OUT] struct cYAML tree describing the error. Freed by + * caller + */ +int lustre_lnet_show_drop_asym_route(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* * lustre_lnet_config_buffers * Send down an IOCTL to configure routing buffer sizes. A value of 0 means * default that particular buffer to default size. A value of -1 means @@ -191,32 +485,122 @@ int lustre_lnet_config_buffers(int tiny, int small, int large, * seq_no - sequence number of the request * show_rc - [OUT] The show output in YAML. Must be freed by caller. * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller + * backup - true to output only what's necessary for reconfiguring + * a node. */ int lustre_lnet_show_routing(int seq_no, struct cYAML **show_rc, - struct cYAML **err_rc); + struct cYAML **err_rc, bool backup); /* - * lustre_lnet_show_peer_credits - * Shows credit details on the peers in the system + * lustre_lnet_show_stats + * Shows internal LNET statistics. This is useful to display the + * current LNET activity, such as number of messages route, etc * * seq_no - sequence number of the command * show_rc - YAML structure of the resultant show * err_rc - YAML strucutre of the resultant return code. */ -int lustre_lnet_show_peer_credits(int seq_no, struct cYAML **show_rc, - struct cYAML **err_rc); +int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc, + struct cYAML **err_rc); /* - * lustre_lnet_show_stats - * Shows internal LNET statistics. This is useful to display the - * current LNET activity, such as number of messages route, etc + * lustre_lnet_config_peer_nid + * Add a peer nid to a peer with primary nid pnid. If no pnid is given + * then the first nid in the nid list becomes the primary nid for + * a newly created peer. + * Otherwise if pnid is provided and it's unique then a new peer is + * created with pnid as the primary NID and the nids in the nid list as + * secondary nids. + * If any of the peers nids provided in with exception to the pnid is + * not unique the operation fails. Some peer nids might have already + * been added. It's the role of the caller of this API to remove the + * added NIDs if they wish. * + * pnid - Primary NID of the peer + * nid - list of nids to add + * num_nids - number of nids in the nid array + * mr - true if this peer is MR capable. + * ip2nets - true if a list of nid expressions are given to configure + * multiple peers + * seq_no - sequence number of the command + * err_rc - YAML strucutre of the resultant return code. + */ +int lustre_lnet_config_peer_nid(char *pnid, char **nid, int num_nids, + bool mr, bool ip2nets, int seq_no, + struct cYAML **err_rc); + +/* + * lustre_lnet_del_peer_nid + * Delete the nids given in the nid list from the peer with primary NID + * pnid. If pnid is NULL or it doesn't identify a peer the operation + * fails and no change happens to the system. + * The operation is aborted on the first NID that fails to be deleted. + * + * pnid - Primary NID of the peer + * nid - list of nids to add + * num_nids - number of nids in the nid array + * ip2nets - used to specify a range of nids + * seq_no - sequence number of the command + * err_rc - YAML strucutre of the resultant return code. + */ +int lustre_lnet_del_peer_nid(char *pnid, char **nid, int num_nids, + bool ip2nets, int seq_no, struct cYAML **err_rc); + +/* + * lustre_lnet_show_peer + * Show the peer identified by nid, knid. If knid is NULL all + * peers in the system are shown. + * + * knid - A NID of the peer + * detail - display detailed information * seq_no - sequence number of the command * show_rc - YAML structure of the resultant show * err_rc - YAML strucutre of the resultant return code. + * backup - true to output only what's necessary for reconfiguring + * a node. + * */ -int lustre_lnet_show_stats(int seq_no, struct cYAML **show_rc, - struct cYAML **err_rc); +int lustre_lnet_show_peer(char *knid, int detail, int seq_no, + struct cYAML **show_rc, struct cYAML **err_rc, + bool backup); + +/* + * lustre_lnet_list_peer + * List the known peers. + * + * seq_no - sequence number of the command + * show_rc - YAML structure of the resultant show + * err_rc - YAML strucutre of the resultant return code. + * + */ +int lustre_lnet_list_peer(int seq_no, + struct cYAML **show_rc, struct cYAML **err_rc); + +/* lustre_lnet_ping_nid + * Ping the nid list, pnids. + * + * pnids - NID list to ping. + * timeout - timeout(seconds) for ping. + * seq_no - sequence number of the command. + * show_rc - YAML structure of the resultant show. + * err_rc - YAML strucutre of the resultant return code. + * + */ +int lustre_lnet_ping_nid(char *pnid, int timeout, int seq_no, + struct cYAML **show_rc, struct cYAML **err_rc); + +/* lustre_lnet_discover_nid + * Discover the nid list, pnids. + * + * pnids - NID list to discover. + * force - force discovery. + * seq_no - sequence number of the command. + * show_rc - YAML structure of the resultant show. + * err_rc - YAML strucutre of the resultant return code. + * + */ +int lustre_lnet_discover_nid(char *pnid, int force, int seq_no, + struct cYAML **show_rc, struct cYAML **err_rc); /* * lustre_yaml_config @@ -250,4 +634,82 @@ int lustre_yaml_del(char *f, struct cYAML **err_rc); int lustre_yaml_show(char *f, struct cYAML **show_rc, struct cYAML **err_rc); +/* + * lustre_yaml_exec + * Parses the provided YAML file and then calls the specific APIs + * to execute the entities identified in the file + * + * f - YAML file + * show_rc - [OUT] The show output in YAML. Must be freed by caller. + * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller + */ +int lustre_yaml_exec(char *f, struct cYAML **show_rc, + struct cYAML **err_rc); + +/* + * lustre_lnet_init_nw_descr + * initialize the network descriptor structure for use + */ +void lustre_lnet_init_nw_descr(struct lnet_dlc_network_descr *nw_descr); + +/* + * lustre_lnet_parse_interfaces + * prase an interface string and populate descriptor structures + * intf_str - interface string of the format + * [], [],.. + * nw_descr - network descriptor to populate + * init - True to initialize nw_descr + */ +int lustre_lnet_parse_interfaces(char *intf_str, + struct lnet_dlc_network_descr *nw_descr); + +/* + * lustre_lnet_parse_nidstr + * This is a small wrapper around cfs_parse_nidlist. + * nidstr - A string parseable by cfs_parse_nidlist + * lnet_nidlist - An array of lnet_nid_t to hold the nids specified + * by the nidstring. + * max_nids - Size of the lnet_nidlist array, and the maximum number of + * nids that can be expressed by the nidstring. If the + * nidstring expands to a larger number of nids than max_nids + * then an error is returned. + * err_str - char pointer where we store an informative error + * message when an error is encountered + * Returns: + * The number (> 0) of lnet_nid_t stored in the supplied array, or + * LUSTRE_CFG_RC_BAD_PARAM if: + * - nidstr is NULL + * - nidstr contains an asterisk. This character is not allowed + * because it would cause the size of the expanded nidlist to exceed + * the maximum number of nids that is supported by expected callers + * of this function. + * - cfs_parse_nidlist fails to parse the nidstring + * - The nidlist populated by cfs_parse_nidlist is empty + * - The nidstring expands to a larger number of nids than max_nids + * - The nidstring expands to zero nids + * LUSTRE_CFG_RC_OUT_OF_MEM if: + * - cfs_expand_nidlist can return ENOMEM. We return out of mem in + * this case. + */ +int lustre_lnet_parse_nidstr(char *nidstr, lnet_nid_t *lnet_nidlist, + int max_nids, char *err_str); + +/* + * lustre_lnet_parse_nids + * Parse a set of nids into a locally allocated array and return the + * pointer of the array to the caller. The caller is responsible for + * freeing the array. If an initial array is provided then copy over + * the contents of that array into the new array and append to it the + * new content. + * The nids can be of the form "nid [,nid, nid, nid]" + * nids: nids string to be parsed + * array: initial array of content + * size: num of elements in the array + * out_array: [OUT] new allocated array. + * Returns size of array + * sets the out_array to NULL on failure. + */ +int lustre_lnet_parse_nids(char *nids, char **array, int size, + char ***out_array); + #endif /* LIB_LNET_CONFIG_API_H */