diff options
Diffstat (limited to 'PVE/Network/SDN/SubnetPlugin.pm')
| -rw-r--r-- | PVE/Network/SDN/SubnetPlugin.pm | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/PVE/Network/SDN/SubnetPlugin.pm b/PVE/Network/SDN/SubnetPlugin.pm deleted file mode 100644 index 15b370f..0000000 --- a/PVE/Network/SDN/SubnetPlugin.pm +++ /dev/null @@ -1,166 +0,0 @@ -package PVE::Network::SDN::SubnetPlugin; - -use strict; -use warnings; - -use Net::IP; -use Net::Subnet qw(subnet_matcher); - -use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file); -use PVE::Exception qw(raise raise_param_exc); -use PVE::JSONSchema qw(get_standard_option); -use PVE::Network::SDN::Ipams; -use PVE::Network::SDN::Vnets; - -use base qw(PVE::SectionConfig); - -PVE::Cluster::cfs_register_file('sdn/subnets.cfg', - sub { __PACKAGE__->parse_config(@_); }, - sub { __PACKAGE__->write_config(@_); }); - -PVE::JSONSchema::register_standard_option('pve-sdn-subnet-id', { - description => "The SDN subnet object identifier.", - type => 'string', format => 'pve-sdn-subnet-id', - type => 'string' -}); - -PVE::JSONSchema::register_format('pve-sdn-subnet-id', \&parse_sdn_subnet_id); -sub parse_sdn_subnet_id { - my ($id, $noerr) = @_; - - my $cidr = ""; - if($id =~ /\//) { - $cidr = $id; - } else { - my ($zone, $ip, $mask) = split(/-/, $id); - $cidr = "$ip/$mask"; - } - - if (!(PVE::JSONSchema::pve_verify_cidrv4($cidr, 1) || - PVE::JSONSchema::pve_verify_cidrv6($cidr, 1))) - { - return undef if $noerr; - die "value does not look like a valid CIDR network\n"; - } - return $id; -} - -my $defaultData = { - - propertyList => { - subnet => get_standard_option('pve-sdn-subnet-id', - { completion => \&PVE::Network::SDN::Subnets::complete_sdn_subnet }), - }, -}; - -sub type { - return 'subnet'; -} - -sub private { - return $defaultData; -} - -sub properties { - return { - vnet => { - type => 'string', - description => "associated vnet", - }, - gateway => { - type => 'string', format => 'ip', - description => "Subnet Gateway: Will be assign on vnet for layer3 zones", - }, - snat => { - type => 'boolean', - description => "enable masquerade for this subnet if pve-firewall", - }, -# #cloudinit, dhcp options -# routes => { -# type => 'string', -# description => "static routes [network=<network>:gateway=<ip>,network=<network>:gateway=<ip>,... ]", -# }, - dnszoneprefix => { - type => 'string', format => 'dns-name', - description => "dns domain zone prefix ex: 'adm' -> <hostname>.adm.mydomain.com", - }, - }; -} - -sub options { - return { - vnet => { optional => 0 }, - gateway => { optional => 1 }, -# routes => { optional => 1 }, - snat => { optional => 1 }, - dnszoneprefix => { optional => 1 }, - }; -} - -sub on_update_hook { - my ($class, $zone, $subnetid, $subnet, $old_subnet) = @_; - - my $cidr = $subnet->{cidr}; - my $mask = $subnet->{mask}; - - my $subnet_matcher = subnet_matcher($cidr); - - my $vnetid = $subnet->{vnet}; - my $gateway = $subnet->{gateway}; - my $ipam = $zone->{ipam}; - my $dns = $zone->{dns}; - my $dnszone = $zone->{dnszone}; - my $reversedns = $zone->{reversedns}; - - my $old_gateway = $old_subnet->{gateway} if $old_subnet; - my $mac = undef; - - if($vnetid) { - my $vnet = PVE::Network::SDN::Vnets::get_vnet($vnetid); - raise_param_exc({ vnet => "$vnetid don't exist"}) if !$vnet; - raise_param_exc({ vnet => "you can't add a subnet on a vlanaware vnet"}) if $vnet->{vlanaware}; - $mac = $vnet->{mac}; - } - - my $pointopoint = 1 if Net::IP::ip_is_ipv4($gateway) && $mask == 32; - - #for /32 pointopoint, we allow gateway outside the subnet - raise_param_exc({ gateway => "$gateway is not in subnet $cidr"}) if $gateway && !$subnet_matcher->($gateway) && !$pointopoint; - - - if ($ipam) { - PVE::Network::SDN::Subnets::add_subnet($zone, $subnetid, $subnet); - - #don't register gateway for pointopoint - return if $pointopoint; - - #delete gateway on removal - if (!defined($gateway) && $old_gateway) { - eval { - PVE::Network::SDN::Subnets::del_ip($zone, $subnetid, $old_subnet, $old_gateway); - }; - warn if $@; - } - if(!$old_gateway || $gateway && $gateway ne $old_gateway) { - my $hostname = "$vnetid-gw"; - my $description = "gateway"; - PVE::Network::SDN::Subnets::add_ip($zone, $subnetid, $subnet, $gateway, $hostname, $mac, $description, 1); - } - - #delete old gateway after update - if($gateway && $old_gateway && $gateway ne $old_gateway) { - eval { - PVE::Network::SDN::Subnets::del_ip($zone, $subnetid, $old_subnet, $old_gateway); - }; - warn if $@; - } - } -} - -sub on_delete_hook { - my ($class, $subnetid, $subnet_cfg, $vnet_cfg) = @_; - - return; -} - -1; |
