static int
kgnilnd_nl_get(int cmd, struct sk_buff *msg, int type, void *data)
{
- struct lnet_ioctl_config_gnilnd_tunables *tuns;
struct lnet_ni *ni = data;
if (!ni || !msg)
if (cmd != LNET_CMD_NETS || type != LNET_NET_LOCAL_NI_ATTR_LND_TUNABLES)
return -EOPNOTSUPP;
- tuns = &ni->ni_lnd_tunables.lnd_tun_u.lnd_gni;
nla_put_u32(msg, LNET_NET_GNILND_TUNABLES_ATTR_LND_TIMEOUT,
kgnilnd_timeout());
return 0;
}
+static int
+kgnilnd_nl_set(int cmd, struct nlattr *attr, int type, void *data)
+{
+ struct lnet_ni *ni = data;
+
+ if (cmd != LNET_CMD_NETS)
+ return -EOPNOTSUPP;
+
+ if (nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
+ return -EINVAL;
+
+ if (type == LNET_NET_GNILND_TUNABLES_ATTR_LND_TIMEOUT) {
+ s64 timeout = nla_get_s64(attr);
+
+ ni->ni_lnd_tunables.lnd_tun_u.lnd_gni.lnd_timeout = timeout;
+ }
+
+ return 0;
+}
+
/* Primary entry points from LNET. There are no guarantees against reentrance. */
const struct lnet_lnd the_kgnilnd = {
.lnd_type = GNILND,
.lnd_recv = kgnilnd_recv,
.lnd_eager_recv = kgnilnd_eager_recv,
.lnd_nl_get = kgnilnd_nl_get,
+ .lnd_nl_set = kgnilnd_nl_set,
};
kgn_data_t kgnilnd_data;
case LNET_NET_O2IBLND_TUNABLES_ATTR_NTX:
tunables->lnd_tun_u.lnd_o2ib.lnd_ntx = nla_get_s64(attr);
break;
+ case LNET_NET_O2IBLND_TUNABLES_ATTR_LND_TIMEOUT:
+ tunables->lnd_tun_u.lnd_o2ib.lnd_timeout = nla_get_s64(attr);
+ break;
case LNET_NET_O2IBLND_TUNABLES_ATTR_CONNS_PER_PEER:
num = nla_get_s64(attr);
clamp_t(s64, num, 1, 127);
if (cmd != LNET_CMD_NETS)
return -EOPNOTSUPP;
- if (type != LNET_NET_SOCKLND_TUNABLES_ATTR_CONNS_PER_PEER ||
- nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
+ if (nla_type(attr) != LN_SCALAR_ATTR_INT_VALUE)
return -EINVAL;
- num = nla_get_s64(attr);
- clamp_t(s64, num, 1, 127);
- tunables->lnd_tun_u.lnd_sock.lnd_conns_per_peer = num;
+ switch (type) {
+ case LNET_NET_SOCKLND_TUNABLES_ATTR_CONNS_PER_PEER:
+ /* value values are 1 to 127. Zero mean calculate the value */
+ num = nla_get_s64(attr);
+ clamp_t(s64, num, 0, 127);
+ tunables->lnd_tun_u.lnd_sock.lnd_conns_per_peer = num;
+ break;
+ case LNET_NET_SOCKLND_TUNABLES_ATTR_LND_TIMEOUT:
+ num = nla_get_s64(attr);
+ tunables->lnd_tun_u.lnd_sock.lnd_timeout = num;
+ fallthrough;
+ default:
+ break;
+ }
return 0;
}