- } elsif (!$d->{ovs_type}) {
- $d->{type} = 'unknown';
- } elsif ($d->{ovs_type} eq 'OVSIntPort') {
- $d->{type} = $d->{ovs_type};
- my $tag = &$extract_ovs_option($d, 'tag');
- $d->{ovs_tag} = $tag if defined($tag);
+ } elsif (defined($d->{ovs_type})) {
+ if ($d->{ovs_type} eq 'OVSIntPort') {
+ $d->{type} = $d->{ovs_type};
+ my $tag = &$extract_ovs_option($d, 'tag');
+ $d->{ovs_tag} = $tag if defined($tag);
+ }
+ }
+ }
+
+ # map address and netmask to cidr
+ if (my $addr = $d->{address}) {
+ if (_address_is_cidr($addr)) {
+ $d->{cidr} = $addr;
+ my ($baseaddr, $mask) = _cidr_split($addr);
+ $d->{address} = $baseaddr;
+ $d->{netmask} = $mask;
+ } elsif (my $cidr = _get_cidr($d->{address}, $d->{netmask})) {
+ $d->{cidr} = $cidr;
+ (undef, $d->{netmask}) = _cidr_split($cidr);
+ } else {
+ # no mask, else we'd got a cidr above
+ $d->{cidr} = $addr ."/32";
+ }
+ }
+
+ # map address6 and netmask6 to cidr6
+ if (my $addr6 = $d->{address6}) {
+ if (_address_is_cidr($addr6)) {
+ $d->{cidr6} = $addr6;
+ my ($baseaddr, $mask) = _cidr_split($addr6);
+ $d->{address6} = $baseaddr;
+ $d->{netmask6} = $mask;
+ } elsif (my $cidr6 = _get_cidr($d->{address6}, $d->{netmask6})) {
+ $d->{cidr6} = $cidr6;
+ } else {
+ # no mask, else we'd got a cidr above
+ $d->{cidr6} = $addr6 ."/128";