# host network related utility functions
+our $ipv4_reverse_mask = [
+ '0.0.0.0',
+ '128.0.0.0',
+ '192.0.0.0',
+ '224.0.0.0',
+ '240.0.0.0',
+ '248.0.0.0',
+ '252.0.0.0',
+ '254.0.0.0',
+ '255.0.0.0',
+ '255.128.0.0',
+ '255.192.0.0',
+ '255.224.0.0',
+ '255.240.0.0',
+ '255.248.0.0',
+ '255.252.0.0',
+ '255.254.0.0',
+ '255.255.0.0',
+ '255.255.128.0',
+ '255.255.192.0',
+ '255.255.224.0',
+ '255.255.240.0',
+ '255.255.248.0',
+ '255.255.252.0',
+ '255.255.254.0',
+ '255.255.255.0',
+ '255.255.255.128',
+ '255.255.255.192',
+ '255.255.255.224',
+ '255.255.255.240',
+ '255.255.255.248',
+ '255.255.255.252',
+ '255.255.255.254',
+ '255.255.255.255',
+];
+
+our $ipv4_mask_hash_localnet = {
+ '255.255.0.0' => 16,
+ '255.255.128.0' => 17,
+ '255.255.192.0' => 18,
+ '255.255.224.0' => 19,
+ '255.255.240.0' => 20,
+ '255.255.248.0' => 21,
+ '255.255.252.0' => 22,
+ '255.255.254.0' => 23,
+ '255.255.255.0' => 24,
+ '255.255.255.128' => 25,
+ '255.255.255.192' => 26,
+ '255.255.255.224' => 27,
+ '255.255.255.240' => 28,
+ '255.255.255.248' => 29,
+ '255.255.255.252' => 30,
+};
+
sub setup_tc_rate_limit {
my ($iface, $rate, $burst, $debug) = @_;
die "interface activation failed\n" if $@;
}
+sub veth_create {
+ my ($veth, $vethpeer, $bridge, $mac) = @_;
+
+ die "unable to get bridge setting\n" if !$bridge;
+
+ my $bridgemtu = &$read_bridge_mtu($bridge);
+
+ # create veth pair
+ if (! -d "/sys/class/net/$veth") {
+ my $cmd = "/sbin/ip link add name $veth type veth peer name $vethpeer mtu $bridgemtu";
+ $cmd .= " addr $mac" if $mac;
+ system($cmd) == 0 || die "can't create interface $veth\n";
+ }
+
+ # up vethpair
+ &$activate_interface($veth);
+ &$activate_interface($vethpeer);
+}
+
+sub veth_delete {
+ my ($veth) = @_;
+
+ if (-d "/sys/class/net/$veth") {
+ run_command("/sbin/ip link delete dev $veth", outfunc => sub {}, errfunc => sub {});
+ }
+
+}
+
my $create_firewall_bridge_linux = sub {
my ($iface, $bridge) = @_;
my ($vmid, $devid) = &$parse_tap_devive_name($iface);
my ($fwbr, $vethfw, $vethfwpeer) = &$compute_fwbr_names($vmid, $devid);
- my $bridgemtu = &$read_bridge_mtu($bridge);
-
&$cond_create_bridge($fwbr);
&$activate_interface($fwbr);
copy_bridge_config($bridge, $fwbr);
- # create veth pair
- if (! -d "/sys/class/net/$vethfw") {
- system("/sbin/ip link add name $vethfw type veth peer name $vethfwpeer mtu $bridgemtu") == 0 ||
- die "can't create interface $vethfw\n";
- }
-
- # up vethpair
- &$activate_interface($vethfw);
- &$activate_interface($vethfwpeer);
+ veth_create($vethfw, $vethfwpeer, $bridge);
&$bridge_add_interface($fwbr, $vethfw);
&$bridge_add_interface($bridge, $vethfwpeer);
}
# delete old vethfw interface
- if (-d "/sys/class/net/$vethfw") {
- run_command("/sbin/ip link delete dev $vethfw", outfunc => sub {}, errfunc => sub {});
- }
+ veth_delete($vethfw);
# cleanup fwbr bridge
if (-d "/sys/class/net/$fwbr") {