...
The net add command will be modified to take the tos ToS value to use for this particular network interface.
...
A new lnetctl set tos command will be added to set or modify the tos value for a particular network interface. If no Network Interface is specified all NIs will be set to the ToS value
liblnetconfig API
struct lnet_ioctl_config_o2iblnd_tunables will be modified to take the tos ToS value
| Code Block |
|---|
71 struct lnet_ioctl_config_o2iblnd_tunables {
72 »·······__u32 lnd_version;
73 »·······__u32 lnd_peercredits_hiw;
74 »·······__u32 lnd_map_on_demand;
75 »·······__u32 lnd_concurrent_sends;
76 »·······__u32 lnd_fmr_pool_size;
77 »·······__u32 lnd_fmr_flush_trigger;
78 »·······__u32 lnd_fmr_cache;
79 »·······__u16 lnd_conns_per_peer;
80 »·······__u16 lnd_ntx;
81 »·······__s16 lnd_tos;
82 }; |
The lnd_tos field will be filled with the value passed by the user from the lnetctl command otherwise it'll be set to -1 to indicate that field is not set. This will help us avoid modification to the API net add API:
| Code Block |
|---|
138 /* 139 * lustre_lnet_config_ni 140 * Send down an IOCTL to configure a network interface. It implicitly 141 * creates a network if one doesn't exist.. 142 * 143 * nw_descr - network and interface descriptor 144 * global_cpts - globally defined CPTs 145 * ip2net - this parameter allows configuring multiple networks. 146 *»·····it takes precedence over the net and intf parameters 147 * tunables - LND tunables 148 * seq_no - sequence number of the request 149 * lnd_tunables - lnet specific tunable parameters 150 * err_rc - [OUT] struct cYAML tree describing the error. Freed by caller 151 */ 152 int lustre_lnet_config_ni(struct lnet_dlc_network_descr *nw_descr, 153 »·······»·······»······· struct cfs_expr_list *global_cpts, 154 »·······»·······»······· char *ip2net, 155 »·······»·······»······· struct lnet_ioctl_config_lnd_tunables *tunables, 156 »·······»·······»······· int seq_no, struct cYAML **err_rc); |
...
In this manner the liblnetconfig API remains backwards compatible.
Module parameters
Setting the ToS will not be done from the module parameters as it will require modification to the net configuration string. The decision has been made a while back to move away from string parsing in the kernel, and add new Network Interface changes to the lnetctl utility and liblnetconfig API.
ioctl Interface
Two new ioctls will be added to get and set the ToS value for the NI
...
There doesn't appear to be a cma API provided to get the service type valueToS value set on a particulr cmid ; therefore, we will need to store the ToS value in the device structure: struct kib_hca_dev. The get operation will return this value.
...