Create a DHCP Scope for this subnet
<%perl>
my @fields;
my @data;
push @fields,'Global Scope:';
push (@data, &{sub{
my $x;
$x .= '';
$x .= '[new]';
$x;
}});
my @shared_subs = $o->shared_network_subnets();
my @subs = ($o);
if ( @shared_subs ){
print "
(*) It looks like this is a shared network
";
push @subs, @shared_subs;
}
foreach my $s ( @subs ){
push @fields, " ";
push @data, " ";
push @fields, "Subnet:";
push @data, $s->get_label();
push @fields, 'Option routers:';
push @data, '';
}
%perl>
<& /generic/attribute_table.mhtml, field_headers=>\@fields, data=>\@data,
width=>"1", headercolwidth=>"15%", datacolwidth=>"35%" &>
<%perl>
}else{
my @field_headers = ( );
my @cell_data = ( );
################
# Address:
my %addr_tmp = $ui->form_field(object=>$o, column=>"address", edit=>$edit_block, htmlExtra=>"style='width: 15em'");
my %pref_tmp = $ui->form_field(object=>$o, column=>"prefix", edit=>$edit_block, htmlExtra =>"style='width: 2em'");
push( @field_headers, $addr_tmp{'label'} );
push( @cell_data, $addr_tmp{'value'}."/".$pref_tmp{'value'} );
################
# Status:
push( @field_headers, $ui->col_descr_link('Ipblock', 'status', 'Status: ') );
my $status;
my @valid_block_status = qw ( Container Subnet Reserved );
if ( my $sn = $o->status->name ){
if ( $edit eq "blockinfo" ){
$status .= "";
}else{
$status .= "".$sn."";
}
}
push( @cell_data, $status );
################
# Created, Modified
push (@field_headers, "First Created", "Last Modified");
my %createdtmp = $ui->form_field(object=>$o, column=>'first_seen', edit=>0);
my %modtmp = $ui->form_field(object=>$o, column=>'last_seen', edit=>0);
push( @cell_data, $createdtmp{'value'}, $modtmp{'value'} );
################
# Vlan
if ( $o->status->name eq 'Subnet' ){
my %tmp = $ui->form_field(object=>$o, column=>'vlan', edit=>$edit_block, linkPage=>'view.html');
push( @field_headers, $tmp{'label'} );
push( @cell_data, $tmp{'value'} );
}else{
push( @field_headers, ' ');
push( @cell_data, ' ');
}
################
# Description, Info (no link)
{
my @fields = ('description','info');
$ui->add_to_fields(o=>$o, edit=>$edit_block, fields=>\@fields, field_headers=>\@field_headers, cell_data=>\@cell_data);
}
################
# Owner
# For some fields, we will provide a way to update the values recursively in all
# descendant blocks.
my %owner_tmp = $ui->form_field(object=>$o, column=>"owner", edit=>$edit_block, linkPage=>"view.html");
my $owner = $owner_tmp{value};
if ( ! $edit_block ){
if ( $manager && $manager->can($user, 'edit', $o) ){
$owner .= '[edit]';
}
}
push( @field_headers, $owner_tmp{label} );
push( @cell_data, $owner );
################
# Used by
my %usedby_tmp = $ui->form_field(object=>$o, column=>"used_by", edit=>$edit_block, linkPage=>"view.html");
push( @field_headers, $usedby_tmp{'label'} );
push( @cell_data, $usedby_tmp{'value'} );
%perl>
<%perl>
my $ip = new NetAddr::IP($o->address, $o->prefix);
push( @field_headers, "Netmask:", "Broadcast:" );
push( @cell_data, $ip->mask);
push( @cell_data, ($ip->version == 4 ? $ip->broadcast->addr : "n/a") );
################
# Usable address range
push( @field_headers, "Usable Addresses:" );
my ($num_addresses, $first_address, $last_address);
if ( $o->version == 4 ){
if ( $o->prefix == 31 ){
$num_addresses = 2;
$first_address = $ip->addr;
$last_address = $ip->broadcast->addr;
}else{
$num_addresses = $ip->num;
$first_address = $ip->first->addr;
$last_address = $ip->last->addr;
}
}else{
$num_addresses = $o->num_addr;
$first_address = $ip->network->addr;
$last_address = $ip->broadcast->addr;
}
push( @cell_data, ($num_addresses." (". $first_address." - ".$last_address.")") );
if ($o->status->name eq "Subnet") {
my $used = new Math::BigInt($o->num_children);
my $total = $o->num_addr;
my $avail = $total - $used;
my $avail_percent = $ui->friendly_percent(value=>$avail,total=>$total);
my $used_percent = $ui->friendly_percent(value=>$used,total=>$total);
my $percent = ($used*100)/$total;
my $available_text;
{
my $used_text;
if ($used <= $max_ips) {
$used_text = 'Used: '.$used;
if ($total <= $max_ips) {
$used_text .= ' of '.$total;
}
$used_text .= ' ';
}
my $avail_text = 'Available: ';
if ($avail <= $max_ips) {
$avail_text .= $avail.' (';
}
$avail_text .= $ui->friendly_percent(value=>$avail,total=>$total);
if ($avail <= $max_ips) {
$avail_text .= ')';
}
$available_text = $used_text.$avail_text;
}
################
# Utilization
push( @field_headers, "Utilization:" );
push( @cell_data, ($ui->percent_bar(percent=>$percent))
.'
'.$available_text.'
' );
} elsif( $o->status->name eq "Container" ) {
my $total = new Math::BigInt($o->num_addr);
my $used_a = new Math::BigInt($o->address_usage);
my $avail_a = $total - $used_a;
my $used_s = new Math::BigInt($o->subnet_usage);
my $avail_s = $total - $used_s;
my $address_percent = $used_a*100/$total;
my $subnet_percent = $used_s*100/$total;
my $address_text;
my $subnet_text;
$subnet_text = 'Available: '.($ui->friendly_percent(value=>$avail_s,total=>$total));
if( $used_a <= $max_ips ) {
$address_text .= 'Used: '.$used_a;
if( $total <= $max_ips ) {
$address_text .= ' of '.$total;
}
$address_text .= ' Available: ';
if( $total <= $max_ips ) {
$address_text .= $avail_a.' (';
}
$address_text .= $ui->friendly_percent(value=>$avail_a,total=>$total);
if ($total <= $max_ips) {
$address_text .= ')';
}
} else {
if( $avail_a <= $max_ips ) {
$address_text .= 'Available: '.$avail_a.' ('.(100-$address_percent).'%)';
} else {
$address_text .= 'Available: '.(100-$address_percent).'%';
}
}
################
# Address Utilization
push( @field_headers, "Address Utilization:" );
push( @cell_data, $ui->percent_bar(percent=>$address_percent).'