OPNsense Forum
Archive => 17.1 Legacy Series => Topic started by: jalalahmadi on March 08, 2017, 01:09:05 pm
-
Hi
I want convert CIDR to Netmask Addresses just for show to user in UI .
<select name="subnet" class="selectpicker" data-style="btn-default" data-width="auto" data-size="10" dataid="subnet">
<?php
for ($i = 32; $i > 0; $i--):?>
<option value="<?=$i;?>" <?=$i == $pconfig['subnet'] ? "selected=\"selected\"" : "";?>><?=$i;?></option>
<?php
endfor;?>
</select>
Please help me .
Thank you
-
You could use something along the lines of one of these functions:
The first one is the simplest, you can simply use it like ipv4cidr2subnet($i) to return the subnet mask
<?php
function ipv4cidr2subnet($cidr) {
static $max_ip;
if (!isset($max_ip))
$max_ip = ip2long('255.255.255.255');
if ($cidr < 0 || $cidr > 32)
return NULL;
$subnet_long = $max_ip << (32 - $cidr);
return long2ip($subnet_long);
}
The second is a bit more complex but will reduce execution time if displaying the list more than once per page and can be used in a foreach loop like this:
$cidr_subnets = ipv4_cidr_subnets();
foreach ($cidr_subnets as $i => $subnet):
<?php
function ipv4_cidr_subnets() {
static $subnets = [];
if (empty($subnets)) {
$max_ip = ip2long('255.255.255.255');
for ($i = 0; $i <= 32; $i++)
$subnets[$i] = long2ip($max_ip << (32 - $i));
}
return $subnets;
}
-
Thank you djGrrr :D :D ;) ;)
This function works fine ipv4cidr2subnet .
<?php
for ($i = 32; $i > 0; $i--):?>
<option value="<?=$i;?>" <?=$i == $pconfig['subnet'] ? "selected=\"selected\"" : "";?>> <?= ipv4cidr2subnet($i);?> ( /<?= $i;?> )</option>
<?php
endfor;?>