Commit 9a99425f authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Konrad Rzeszutek Wilk

iscsi_ibft: Add prefix-len attr and display netmask

The iBFT table only specifies a prefix length, not a netmask.
And the netmask is pretty much pointless for IPv6.
So introduce a new attribute 'prefix-len'.

Some older user-space code might rely on the netmask attribute
being present, so we should always display it.

Changes from v1:
 - Combined two patches into one

Changes from v2:
 - Cleaned up/corrected wording for patch description
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarLee Duncan <lduncan@suse.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad@kernel.org>
parent 18558cae
...@@ -319,6 +319,9 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf) ...@@ -319,6 +319,9 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf)
val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1)); val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
str += sprintf(str, "%pI4", &val); str += sprintf(str, "%pI4", &val);
break; break;
case ISCSI_BOOT_ETH_PREFIX_LEN:
str += sprintf(str, "%d\n", nic->subnet_mask_prefix);
break;
case ISCSI_BOOT_ETH_ORIGIN: case ISCSI_BOOT_ETH_ORIGIN:
str += sprintf(str, "%d\n", nic->origin); str += sprintf(str, "%d\n", nic->origin);
break; break;
...@@ -460,6 +463,7 @@ static umode_t ibft_check_nic_for(void *data, int type) ...@@ -460,6 +463,7 @@ static umode_t ibft_check_nic_for(void *data, int type)
if (address_not_null(nic->ip_addr)) if (address_not_null(nic->ip_addr))
rc = S_IRUGO; rc = S_IRUGO;
break; break;
case ISCSI_BOOT_ETH_PREFIX_LEN:
case ISCSI_BOOT_ETH_SUBNET_MASK: case ISCSI_BOOT_ETH_SUBNET_MASK:
if (nic->subnet_mask_prefix) if (nic->subnet_mask_prefix)
rc = S_IRUGO; rc = S_IRUGO;
......
...@@ -166,6 +166,7 @@ static struct attribute_group iscsi_boot_target_attr_group = { ...@@ -166,6 +166,7 @@ static struct attribute_group iscsi_boot_target_attr_group = {
iscsi_boot_rd_attr(eth_index, index, ISCSI_BOOT_ETH_INDEX); iscsi_boot_rd_attr(eth_index, index, ISCSI_BOOT_ETH_INDEX);
iscsi_boot_rd_attr(eth_flags, flags, ISCSI_BOOT_ETH_FLAGS); iscsi_boot_rd_attr(eth_flags, flags, ISCSI_BOOT_ETH_FLAGS);
iscsi_boot_rd_attr(eth_ip, ip-addr, ISCSI_BOOT_ETH_IP_ADDR); iscsi_boot_rd_attr(eth_ip, ip-addr, ISCSI_BOOT_ETH_IP_ADDR);
iscsi_boot_rd_attr(eth_prefix, prefix-len, ISCSI_BOOT_ETH_PREFIX_LEN);
iscsi_boot_rd_attr(eth_subnet, subnet-mask, ISCSI_BOOT_ETH_SUBNET_MASK); iscsi_boot_rd_attr(eth_subnet, subnet-mask, ISCSI_BOOT_ETH_SUBNET_MASK);
iscsi_boot_rd_attr(eth_origin, origin, ISCSI_BOOT_ETH_ORIGIN); iscsi_boot_rd_attr(eth_origin, origin, ISCSI_BOOT_ETH_ORIGIN);
iscsi_boot_rd_attr(eth_gateway, gateway, ISCSI_BOOT_ETH_GATEWAY); iscsi_boot_rd_attr(eth_gateway, gateway, ISCSI_BOOT_ETH_GATEWAY);
...@@ -181,6 +182,7 @@ static struct attribute *ethernet_attrs[] = { ...@@ -181,6 +182,7 @@ static struct attribute *ethernet_attrs[] = {
&iscsi_boot_attr_eth_index.attr, &iscsi_boot_attr_eth_index.attr,
&iscsi_boot_attr_eth_flags.attr, &iscsi_boot_attr_eth_flags.attr,
&iscsi_boot_attr_eth_ip.attr, &iscsi_boot_attr_eth_ip.attr,
&iscsi_boot_attr_eth_prefix.attr,
&iscsi_boot_attr_eth_subnet.attr, &iscsi_boot_attr_eth_subnet.attr,
&iscsi_boot_attr_eth_origin.attr, &iscsi_boot_attr_eth_origin.attr,
&iscsi_boot_attr_eth_gateway.attr, &iscsi_boot_attr_eth_gateway.attr,
...@@ -208,6 +210,9 @@ static umode_t iscsi_boot_eth_attr_is_visible(struct kobject *kobj, ...@@ -208,6 +210,9 @@ static umode_t iscsi_boot_eth_attr_is_visible(struct kobject *kobj,
else if (attr == &iscsi_boot_attr_eth_ip.attr) else if (attr == &iscsi_boot_attr_eth_ip.attr)
return boot_kobj->is_visible(boot_kobj->data, return boot_kobj->is_visible(boot_kobj->data,
ISCSI_BOOT_ETH_IP_ADDR); ISCSI_BOOT_ETH_IP_ADDR);
else if (attr == &iscsi_boot_attr_eth_prefix.attr)
return boot_kobj->is_visible(boot_kobj->data,
ISCSI_BOOT_ETH_PREFIX_LEN);
else if (attr == &iscsi_boot_attr_eth_subnet.attr) else if (attr == &iscsi_boot_attr_eth_subnet.attr)
return boot_kobj->is_visible(boot_kobj->data, return boot_kobj->is_visible(boot_kobj->data,
ISCSI_BOOT_ETH_SUBNET_MASK); ISCSI_BOOT_ETH_SUBNET_MASK);
......
...@@ -23,6 +23,7 @@ enum iscsi_boot_eth_properties_enum { ...@@ -23,6 +23,7 @@ enum iscsi_boot_eth_properties_enum {
ISCSI_BOOT_ETH_INDEX, ISCSI_BOOT_ETH_INDEX,
ISCSI_BOOT_ETH_FLAGS, ISCSI_BOOT_ETH_FLAGS,
ISCSI_BOOT_ETH_IP_ADDR, ISCSI_BOOT_ETH_IP_ADDR,
ISCSI_BOOT_ETH_PREFIX_LEN,
ISCSI_BOOT_ETH_SUBNET_MASK, ISCSI_BOOT_ETH_SUBNET_MASK,
ISCSI_BOOT_ETH_ORIGIN, ISCSI_BOOT_ETH_ORIGIN,
ISCSI_BOOT_ETH_GATEWAY, ISCSI_BOOT_ETH_GATEWAY,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment