add vlans to Juniper based on ifChassisLogicalUnit
This commit is contained in:
		@@ -45,6 +45,7 @@ $VERSION = '3.87';
 | 
			
		||||
    %SNMP::Info::Layer3::MIBS,
 | 
			
		||||
    'JUNIPER-CHASSIS-DEFINES-MIB' => 'jnxChassisDefines',
 | 
			
		||||
    'JUNIPER-MIB'                 => 'jnxBoxAnatomy',
 | 
			
		||||
    'JUNIPER-IF-MIB'              => 'ifChassisLogicalUnit',
 | 
			
		||||
    'JUNIPER-VIRTUALCHASSIS-MIB'  => 'jnxVirtualChassisMemberTable',
 | 
			
		||||
    'JUNIPER-VLAN-MIB'            => 'jnxVlanMIBObjects',
 | 
			
		||||
    'JUNIPER-L2ALD-MIB'           => 'jnxL2aldVlanFdbId',
 | 
			
		||||
@@ -83,6 +84,9 @@ $VERSION = '3.87';
 | 
			
		||||
    'jnx_els_v_index'  => 'jnxL2aldVlanTag',
 | 
			
		||||
    'jnx_els_v_type'   => 'jnxL2aldVlanType',
 | 
			
		||||
    'jnx_els_v_fdb_id' => 'jnxL2aldVlanFdbId',
 | 
			
		||||
 | 
			
		||||
    # JUNIPER-IF-MIB::ifChassisTable
 | 
			
		||||
    'i_logical_unit' => 'ifChassisLogicalUnit',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
%MUNGE = (
 | 
			
		||||
@@ -235,7 +239,8 @@ sub i_vlan {
 | 
			
		||||
    my $juniper = shift;
 | 
			
		||||
    my $partial = shift;
 | 
			
		||||
 | 
			
		||||
    my $index = $juniper->bp_index();
 | 
			
		||||
    my $index = $juniper->bp_index() || {};
 | 
			
		||||
    my $types = $juniper->i_type() || {};
 | 
			
		||||
 | 
			
		||||
    # If given a partial it will be an ifIndex, we need to use dot1dBasePort
 | 
			
		||||
    if ($partial) {
 | 
			
		||||
@@ -243,13 +248,13 @@ sub i_vlan {
 | 
			
		||||
        $partial = $r_index{$partial};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $v_index  = $juniper->v_index();
 | 
			
		||||
    my $i_pvid   = $juniper->qb_i_vlan($partial) || {};
 | 
			
		||||
    my $i_vlan = {};
 | 
			
		||||
    my $v_index = $juniper->v_index() || {};
 | 
			
		||||
    my $i_pvid  = $juniper->qb_i_vlan($partial) || {};
 | 
			
		||||
    my $i_vlan  = $juniper->SUPER::i_vlan() || {};
 | 
			
		||||
 | 
			
		||||
    foreach my $bport ( keys %$i_pvid ) {
 | 
			
		||||
        my $q_vlan  = $i_pvid->{$bport};
 | 
			
		||||
	    my $vlan    = $q_vlan;
 | 
			
		||||
        my $vlan    = $q_vlan;
 | 
			
		||||
        # Use defined as check since VLAN can be zero
 | 
			
		||||
        $vlan = $v_index->{$q_vlan} if defined $v_index->{$q_vlan};
 | 
			
		||||
        my $ifindex = $index->{$bport};
 | 
			
		||||
@@ -260,6 +265,17 @@ sub i_vlan {
 | 
			
		||||
        }
 | 
			
		||||
        $i_vlan->{$ifindex} = $vlan;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # add in i_logical_unit
 | 
			
		||||
    my $i_unit = $juniper->ifChassisLogicalUnit();
 | 
			
		||||
    foreach my $ifindex (keys %$i_unit) {
 | 
			
		||||
        my $type = $types->{$ifindex} or next;
 | 
			
		||||
        next unless $type eq 'l2vlan';
 | 
			
		||||
        # XXX not sure why this is off by one?!
 | 
			
		||||
        my $vlan = $i_unit->{$ifindex} - 1 or next;
 | 
			
		||||
        $i_vlan->{$ifindex} = $vlan;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $i_vlan;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -345,13 +361,14 @@ sub i_vlan_membership_untagged {
 | 
			
		||||
 | 
			
		||||
    # Use presence of JUNIPER-VLAN-MIB::jnxExVlanTag to indicate if we should
 | 
			
		||||
    # treat as RFC 4363 standard PortList
 | 
			
		||||
    my $old_index = $juniper->jnx_v_index();
 | 
			
		||||
    my $old_index = $juniper->jnx_v_index() || {};
 | 
			
		||||
 | 
			
		||||
    if ( scalar keys %$old_index ) {
 | 
			
		||||
        return $juniper->SUPER::i_vlan_membership_untagged($partial);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $res;
 | 
			
		||||
    my $types = $juniper->i_type() || {};
 | 
			
		||||
    my $res = {};
 | 
			
		||||
 | 
			
		||||
    # This isn't a PortList so use _raw to prevent munge
 | 
			
		||||
    my $v_ports = $juniper->qb_cv_untagged_raw($partial)
 | 
			
		||||
@@ -369,6 +386,17 @@ sub i_vlan_membership_untagged {
 | 
			
		||||
            push @{ $res->{ $bp_index->{$idx} } }, $vlan;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # add in i_logical_unit
 | 
			
		||||
    my $i_unit = $juniper->ifChassisLogicalUnit();
 | 
			
		||||
    foreach my $ifindex (keys %$i_unit) {
 | 
			
		||||
        my $type = $types->{$ifindex} or next;
 | 
			
		||||
        next unless $type eq 'l2vlan';
 | 
			
		||||
        # XXX not sure why this is off by one?!
 | 
			
		||||
        my $vlan = $i_unit->{$ifindex} - 1 or next;
 | 
			
		||||
        push @{ $res->{ $ifindex } }, $vlan;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user