Files
webmin/net/delete_bifcs.cgi
2026-06-20 20:23:36 +02:00

73 lines
2.1 KiB
Perl
Executable File

#!/usr/local/bin/perl
# Delete some boot-time interfaces, and perhaps de-activate them too
require './net-lib.pl';
&ReadParse();
&error_setup($in{'apply'} ? $text{'dbifcs_err2'} : $text{'dbifcs_err'});
@d = split(/\0/, $in{'b'});
@d || &error($text{'daifcs_enone'});
# Do the deletes
@boot = &boot_interfaces();
@active = &active_interfaces();
foreach $d (reverse(@d)) {
($b) = grep { $_->{'fullname'} eq $d } @boot;
$b || &error($text{'daifcs_egone'});
&can_iface($b) || &error($text{'ifcs_ecannot_this'});
$act = undef;
if ($in{'deleteapply'}) {
($act) = grep { $_->{'fullname'} eq $b->{'fullname'} } @active;
if (!$act && $b->{'virtual'} ne '' && $b->{'address'}) {
# ip(8) may renumber unlabelled secondary addresses.
($act) = grep { $_->{'virtual'} ne '' &&
$_->{'name'} eq $b->{'name'} &&
$_->{'address'} eq $b->{'address'} } @active;
}
}
if ($in{'apply'}) {
# Make this interface active
if (defined(&apply_interface)) {
$err = &apply_interface($b);
$err && &error("<pre>$err</pre>");
}
else {
&activate_interface($b);
}
}
else {
# Deleting
if ($in{'deleteapply'} && $act &&
!defined(&unapply_interface_after_delete)) {
# De-activate first for legacy immediate-action backends.
if (defined(&unapply_interface)) {
$err = &unapply_interface($act);
$err && &error("<pre>$err</pre>");
}
else {
&deactivate_interface($act);
if (&iface_type($b->{'name'}) eq 'Bonded'){
if ($gconfig{'os_type'} eq 'debian-linux' &&
$gconfig{'os_version'} >= 5) {}
else {&unload_module($b->{'name'});}
}
}
}
# Delete config
&delete_interface($b);
if(&iface_type($b->{'name'}) eq 'Bonded' &&
defined(&delete_module_def)){
&delete_module_def($b->{'name'});
}
if ($in{'deleteapply'} && $act &&
defined(&unapply_interface_after_delete)) {
# Config-driven backends apply removals after deleting config.
$err = &unapply_interface_after_delete($act, $b);
$err && &error("<pre>$err</pre>");
}
}
}
&webmin_log($in{'apply'} ? "apply" : "delete", "bifcs", scalar(@d));
&redirect("list_ifcs.cgi?mode=boot");