diff -ru webmin-1.480/net/edit_bifc.cgi /usr/libexec/webmin/net/edit_bifc.cgi --- webmin-1.480/net/edit_bifc.cgi 2009-06-10 19:47:38.000000000 -0400 +++ /usr/libexec/webmin/net/edit_bifc.cgi 2009-07-07 18:25:50.000000000 -0400 @@ -202,6 +202,12 @@ : $vlanid.&ui_hidden("vlanid", $vlanid)); } +if($in{'virtual'}){ +print qq!$text{'bulk_a_or'}$text{'bulk_aliases'} + + +!; +} print &ui_table_end(); # Generate and show buttons at end of the form diff -ru webmin-1.480/net/lang/en /usr/libexec/webmin/net/lang/en --- webmin-1.480/net/lang/en 2009-06-10 19:47:38.000000000 -0400 +++ /usr/libexec/webmin/net/lang/en 2009-07-07 18:31:39.000000000 -0400 @@ -293,3 +293,6 @@ hdelete_enone=None selected idelete_err=Failed to delete IPv6 host addresses +bulk_aliases=Bulk Aliases
(One ip per line) +bulk_a_or=OR: +bifc_bulk_no_address=No new address in the bulk list diff -ru webmin-1.480/net/save_bifc.cgi /usr/libexec/webmin/net/save_bifc.cgi --- webmin-1.480/net/save_bifc.cgi 2009-06-10 19:47:38.000000000 -0400 +++ /usr/libexec/webmin/net/save_bifc.cgi 2009-07-07 18:40:07.000000000 -0400 @@ -45,7 +45,7 @@ if (defined($oldb->{'virtual'})); $b->{'code'} = $oldb->{'code'}; } - elsif (defined($in{'virtual'})) { + elsif (defined($in{'virtual'}) && $in{'virtual'}>$min_virtual_number) { # creating a virtual interface $in{'virtual'} =~ /^\d+$/ || &error($text{'bifc_evirt'}); @@ -63,6 +63,20 @@ &can_create_iface() || &error($text{'ifcs_ecannot'}); &can_iface($b) || &error($text{'ifcs_ecannot'}); } + elsif (defined($in{'bulk_aliases'})){ + $b->{'virtual'}=$min_virtual_number+1; + foreach $eb (@boot) { + if ($eb->{'name'} eq $in{'name'}) { + if($eb->{'virtual'}>$b->{'virtual'}){ + $b->{'virtual'}=$eb->{'virtual'}+1; + } + } + } + $b->{'name'} = $in{'name'}; + &can_create_iface() || &error($text{'ifcs_ecannot'}); + &can_iface($b) || &error($text{'ifcs_ecannot'}); + + } elsif ($in{'name'} =~ /^([a-z]+\d*(\.\d+)?):(\d+)$/) { # also creating a virtual interface foreach $eb (@boot) { @@ -122,6 +136,24 @@ $auto++; } else { + if(defined($in{'bulk_aliases'})){ + @bulk_lines=split(/\r\n/,$in{'bulk_aliases'}); + local $i=0; + foreach my $bl (@bulk_lines) { + chomp($bl); + $bulk_lines[$i++]=$bl; + } + foreach $eb (@boot){ + @bulk_lines=grep {!/$eb->{'address'}/} @bulk_lines; + } + undef %sawbl; + @bulk_lines = grep(!$sawbl{$_}++, @bulk_lines); + if(@bulk_lines < 1 ){ + &error(&text('bifc_bulk_no_address')); + } + $in{'address'}=$bulk_lines[0]; + $in{'broadcast'}=&compute_broadcast($in{'address'}, $b->{'netmask'}); + } &valid_boot_address($in{'address'}) || &error(&text('bifc_eip', $in{'address'})); $b->{'address'} = $in{'address'}; @@ -132,7 +164,7 @@ $b->{'desc'} = $in{'desc'}; } - if ($virtual_netmask && $b->{'virtual'} ne "") { + if ($virtual_netmask && $b->{'virtual'} ne "" ) { # Always use this netmask for virtuals $b->{'netmask'} = $virtual_netmask; } @@ -220,8 +252,32 @@ else{ $b->{'fullname'} = $b->{'name'}.( $b->{'virtual'} eq '' ? '' : ':'.$b->{'virtual'}); } - &save_interface($b); +if(defined($in{'bulk_aliases'})){ + $b->{'netmask'} = $virtual_netmask; + foreach my $l (@bulk_lines) { + $b->{'address'}=$l; + $b->{'broadcast'} = &compute_broadcast($b->{'address'}, $b->{'netmask'}); + &save_interface($b); + + if($in{'activate'}){ + &error_setup($text{'bifc_err3'}); + $b->{'up'}++; + $b->{'address'} = &to_ipaddress($b->{'address'}); + if (defined(&apply_interface)) { + $err = &apply_interface($b); + $err && &error("
$err
"); + } + else { + if($in{'bond'}) {&load_module($b);} + &activate_interface($b); + } + } + $b->{'up'}--; + $b->{'virtual'}++; + } +} else{ + &save_interface($b); if ($in{'activate'}) { # Make this interface active (if possible) &error_setup($text{'bifc_err3'}); @@ -236,6 +292,7 @@ &activate_interface($b); } } + } &webmin_log($in{'new'} ? 'create' : 'modify', "bifc", $b->{'fullname'}, $b); }