IPv6 Prefix Length support via IPv6::ipv6_addr_prefixlength
This commit is contained in:
		| @@ -72,15 +72,18 @@ $VERSION = '3.41'; | ||||
|     'ip_pfx_origin'     => 'ipAddressPrefixOrigin',         # IP-MIB | ||||
|     'c_pfx_origin'      => 'cIpAddressPfxOrigin',           # CISCO-IETF-IP-MIB  | ||||
|  | ||||
|     'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB  | ||||
|     'ip_addr6_pfx'      => 'ipAddressPrefix',               # IP-MIB | ||||
|     'c_addr6_pfx'       => 'cIpAddressPrefix',              # CISCO-IETF-IP-MIB  | ||||
|  | ||||
|     'ip_addr6_pfxlen'   => 'ipAddressPrefixLength',         # IP-MIB | ||||
|     'c_addr6_pfxlen'    => 'cIpAddressPfxLength',           # CISCO-IETF-IP-MIB | ||||
|     'i6_addr_pfxlen'    => 'ipv6AddrPfxLength',             # IPV6-MIB | ||||
|  | ||||
|     'ip_addr6_index'    => 'ipAddressIfIndex',              # IP-MIB | ||||
|     'c_addr6_index'     => 'cIpAddressIfIndex',             # CISCO-IETF-IP-MIB  | ||||
|  | ||||
|     'ip_addr6_type'     => 'ipAddressType',                 # IP-MIB | ||||
|     'c_addr6_type'      => 'cIpAddressType',                # CISCO-IETF-IP-MIB | ||||
|      | ||||
| ); | ||||
|  | ||||
| %MUNGE = ( | ||||
| @@ -329,6 +332,38 @@ sub ipv6_addr_prefix { | ||||
|     return $return; | ||||
| } | ||||
|  | ||||
| sub ipv6_addr_prefixlength { | ||||
|     my $info = shift; | ||||
|     my $return; | ||||
|     my $index = $info->ipv6_index or return; | ||||
|     my $ipv6_addr_prefixlength = &_test_methods( $info, { | ||||
|         ip_addr6_pfxlen  => IPMIB, | ||||
|         c_addr6_pfxlen   => CISCO, | ||||
|         i6_addr_pfxlen   => IPV6MIB, | ||||
|     }); | ||||
|     return unless defined $ipv6_addr_prefixlength; | ||||
|     # might be returned with ipv6_index value at the start instead | ||||
|     # of type+bits, so we need to map via ipv6_index | ||||
|     foreach my $row (keys %$ipv6_addr_prefixlength){ | ||||
|         my $new_row = undef; | ||||
|         # only if ipv6_index value at the start | ||||
|         if ($row =~ m/^(\d+)\.((?:\d+\.){15}\d+)/) { | ||||
|             my ($iid, $addr) = ($1, $2); | ||||
|             foreach my $i (keys %$index) { | ||||
|                 if ($index->{$i} eq $iid and $i =~ m/\.${addr}$/) { | ||||
|                     $new_row = $i; | ||||
|                     last; | ||||
|                 } | ||||
|             } | ||||
|             next unless $new_row; | ||||
|         } | ||||
|         # this should alow IPMIB and CISCO to pass through unmunged | ||||
|         $return->{$new_row || $row} = $ipv6_addr_prefixlength->{$row}; | ||||
|     } | ||||
|     printf("%s: data comes from %s.\n", &_my_sub_name, $info->_method_used() ) if $info->debug(); | ||||
|     return $return; | ||||
| } | ||||
|  | ||||
| sub ipv6_addr { | ||||
|     my $info = shift; | ||||
|     my $return; | ||||
| @@ -355,6 +390,7 @@ sub ipv6_addr { | ||||
| sub _method_used { | ||||
|     my $info = shift; | ||||
|     my $return = 'none of the MIBs'; | ||||
|     # FIXME ugh! a global. makes order of calls important for debug. | ||||
|     if (defined $info::METHOD) { | ||||
|         if ($info::METHOD eq IPMIB) { | ||||
|             $return = 'IP-MIB'; | ||||
| @@ -374,6 +410,7 @@ sub _test_methods { | ||||
|     foreach my $method (sort {$test->{$a} <=> $test->{$b}} keys %$test) { | ||||
|         $return = $info->$method || {}; | ||||
|         if (scalar keys %$return) { | ||||
|             # FIXME ugh! a global. makes order of calls important for debug. | ||||
|             $info::METHOD = $test->{$method}; | ||||
|             last; | ||||
|         } | ||||
| @@ -490,6 +527,10 @@ Maps an IPv6 prefix with its origin (manual, well-known, dhcp, etc.) | ||||
|  | ||||
| Maps IPv6 addresses with their prefixes | ||||
|  | ||||
| =item $info->ipv6_addr_prefixlength() | ||||
|  | ||||
| Maps IPv6 addresses with their prefix length | ||||
|  | ||||
| =item $info->ipv6_addr() | ||||
|  | ||||
| Maps a table instance to an IPv6 address | ||||
|   | ||||
		Reference in New Issue
	
	Block a user