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 v3: [Put Hannes back as author] Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Lee Duncan <lduncan@suse.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: Konrad Rzeszutek Wilk <konrad@kernel.org>
This commit is contained in:
parent
18558cae02
commit
c988cabe25
|
@ -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)
|
||||||
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 = {
|
||||||
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[] = {
|
||||||
&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,
|
||||||
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 {
|
||||||
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,
|
||||||
|
|
Loading…
Reference in New Issue