my
$prefix
= __PACKAGE__;
my
@mixin_methods
;
BEGIN {
@mixin_methods
= (
qw/
get_lldp_local_system_data
get_lldp_rem_table
/
);
}
exports
=> [
@mixin_methods
],
groups
=> {
default
=> [
@mixin_methods
], },
};
LLDP_LOCAL_SYSTEM_DATA
=>
'1.0.8802.1.1.2.1.3'
,
LLDP_LOCAL_CASSIS_ID_SUBTYPE
=>
'1.0.8802.1.1.2.1.3.1.0'
,
LLDP_LOCAL_CASSIS_ID
=>
'1.0.8802.1.1.2.1.3.2.0'
,
LLDP_LOCAL_SYS_NAME
=>
'1.0.8802.1.1.2.1.3.3.0'
,
LLDP_LOCAL_SYS_DESC
=>
'1.0.8802.1.1.2.1.3.4.0'
,
LLDP_LOCAL_SYS_CAPA_SUP
=>
'1.0.8802.1.1.2.1.3.5.0'
,
LLDP_LOCAL_SYS_CAPA_ENA
=>
'1.0.8802.1.1.2.1.3.6.0'
,
LLDP_REM_TABLE
=>
'1.0.8802.1.1.2.1.4.1'
,
LLDP_REM_LOCAL_PORT_NUM
=>
'1.0.8802.1.1.2.1.4.1.1.2'
,
LLDP_REM_CASSIS_ID_SUBTYPE
=>
'1.0.8802.1.1.2.1.4.1.1.4'
,
LLDP_REM_CASSIS_ID
=>
'1.0.8802.1.1.2.1.4.1.1.5'
,
LLDP_REM_PORT_ID_SUBTYPE
=>
'1.0.8802.1.1.2.1.4.1.1.6'
,
LLDP_REM_PORT_ID
=>
'1.0.8802.1.1.2.1.4.1.1.7'
,
LLDP_REM_PORT_DESC
=>
'1.0.8802.1.1.2.1.4.1.1.8'
,
LLDP_REM_SYS_NAME
=>
'1.0.8802.1.1.2.1.4.1.1.9'
,
LLDP_REM_SYS_DESC
=>
'1.0.8802.1.1.2.1.4.1.1.10'
,
LLDP_REM_SYS_CAPA_SUP
=>
'1.0.8802.1.1.2.1.4.1.1.11'
,
LLDP_REM_SYS_CAPA_ENA
=>
'1.0.8802.1.1.2.1.4.1.1.12'
,
};
our
$VERSION
=
'0.01_01'
;
sub
get_lldp_local_system_data {
my
$session
=
shift
;
Carp::croak
"'$prefix' not initialized,"
unless
$session
->{
$prefix
}{__initialized};
my
$result
= {};
$result
->{lldpLocChassisIdSubtype} =
$session
->{
$prefix
}{lldpLocChassisIdSubtype};
$result
->{lldpLocChassisId} =
$session
->{
$prefix
}{lldpLocChassisId};
$result
->{lldpLocChassisId} = normalize_mac(
$result
->{lldpLocChassisId} )
if
$result
->{lldpLocChassisIdSubtype} == 4;
$result
->{lldpLocSysName} =
$session
->{
$prefix
}{lldpLocSysName};
$result
->{lldpLocSysDesc} =
$session
->{
$prefix
}{lldpLocSysDesc};
$result
->{lldpLocSysCapSupported} =
$session
->{
$prefix
}{lldpLocSysCapSupported};
$result
->{lldpLocSysCapEnabled} =
$session
->{
$prefix
}{lldpLocSysCapEnabled};
return
$result
;
}
sub
get_lldp_rem_table {
my
$session
=
shift
;
Carp::croak
"'$prefix' not initialized,"
unless
$session
->{
$prefix
}{__initialized};
my
$lldpRemTable
= {};
my
@lldpRemTableIndexes
=
keys
%{
$session
->{
$prefix
}{lldpRemPortId} };
foreach
my
$idx
(
@lldpRemTableIndexes
) {
my
$row
= {};
$row
->{lldpRemChassisIdSubtype} =
$session
->{
$prefix
}{lldpRemChassisIdSubtype}{
$idx
};
$row
->{lldpRemChassisId} =
$session
->{
$prefix
}{lldpRemChassisId}{
$idx
};
$row
->{lldpRemChassisId} = normalize_mac(
$row
->{lldpRemChassisId} )
if
$row
->{lldpRemChassisIdSubtype} == 4;
$row
->{lldpRemPortIdSubtype} =
$session
->{
$prefix
}{lldpRemPortIdSubtype}{
$idx
};
$row
->{lldpRemPortId} =
$session
->{
$prefix
}{lldpRemPortId}{
$idx
};
$row
->{lldpRemPortDesc} =
$session
->{
$prefix
}{lldpRemPortDesc}{
$idx
};
$row
->{lldpRemSysName} =
$session
->{
$prefix
}{lldpRemSysName}{
$idx
};
$row
->{lldpRemSysDesc} =
$session
->{
$prefix
}{lldpRemSysDesc}{
$idx
};
$row
->{lldpRemSysCapSupported} =
$session
->{
$prefix
}{lldpRemSysCapSupported}{
$idx
};
$row
->{lldpRemSysCapEnabled} =
$session
->{
$prefix
}{lldpRemSysCapEnabled}{
$idx
};
$lldpRemTable
->{
$idx
} =
$row
;
}
return
$lldpRemTable
;
}
sub
_init {
my
(
$session
,
$reload
) =
@_
;
die
"$prefix already initalized and reload not forced.\n"
if
$session
->{
$prefix
}{__initialized} && not
$reload
;
_fetch_lldp_local_system_data(
$session
);
return
if
$session
->error;
_fetch_lldp_rem_tbl(
$session
);
return
if
$session
->error;
return
1;
}
sub
_fetch_lldp_local_system_data {
my
$session
=
shift
;
my
$result
;
$result
=
$session
->get_request(
-varbindlist
=> [
LLDP_LOCAL_CASSIS_ID_SUBTYPE,
LLDP_LOCAL_CASSIS_ID,
LLDP_LOCAL_SYS_NAME,
LLDP_LOCAL_SYS_DESC,
LLDP_LOCAL_SYS_CAPA_SUP,
LLDP_LOCAL_SYS_CAPA_ENA,
],
$session
->nonblocking
? (
-callback
=> \
&_lldp_local_system_data_cb
)
: (),
);
return
unless
defined
$result
;
return
1
if
$session
->nonblocking;
_lldp_local_system_data_cb(
$session
);
}
sub
_lldp_local_system_data_cb {
my
$session
=
shift
;
my
$vbl
=
$session
->var_bind_list;
return
unless
defined
$vbl
;
$session
->{
$prefix
}{lldpLocChassisIdSubtype} =
$vbl
->{ LLDP_LOCAL_CASSIS_ID_SUBTYPE() };
$session
->{
$prefix
}{lldpLocChassisId} =
$vbl
->{ LLDP_LOCAL_CASSIS_ID() };
$session
->{
$prefix
}{lldpLocSysName} =
$vbl
->{ LLDP_LOCAL_SYS_NAME() };
$session
->{
$prefix
}{lldpLocSysDesc} =
$vbl
->{ LLDP_LOCAL_SYS_DESC() };
$session
->{
$prefix
}{lldpLocSysCapSupported} =
$vbl
->{ LLDP_LOCAL_SYS_CAPA_SUP() };
$session
->{
$prefix
}{lldpLocSysCapEnabled} =
$vbl
->{ LLDP_LOCAL_SYS_CAPA_ENA() };
$session
->{
$prefix
}{__initialized}++;
}
sub
_fetch_lldp_rem_tbl {
my
$session
=
shift
;
my
$result
;
$result
=
$session
->get_table(
-baseoid
=> LLDP_REM_TABLE,
$session
->nonblocking
? (
-callback
=> \
&_lldp_rem_tbl_cb
)
: (),
$session
->version ? (
-maxrepetitions
=> 0 ) : (),
);
return
unless
defined
$result
;
return
1
if
$session
->nonblocking;
_lldp_rem_tbl_cb(
$session
);
}
sub
_lldp_rem_tbl_cb {
my
$session
=
shift
;
my
$vbl
=
$session
->var_bind_list;
return
unless
defined
$vbl
;
$session
->{
$prefix
}{lldpRemChassisIdSubtype} =
idx2val(
$vbl
, LLDP_REM_CASSIS_ID_SUBTYPE, 1, 1, );
$session
->{
$prefix
}{lldpRemChassisId} =
idx2val(
$vbl
, LLDP_REM_CASSIS_ID, 1, 1, );
$session
->{
$prefix
}{lldpRemPortIdSubtype} =
idx2val(
$vbl
, LLDP_REM_PORT_ID_SUBTYPE, 1, 1, );
$session
->{
$prefix
}{lldpRemPortId} =
idx2val(
$vbl
, LLDP_REM_PORT_ID, 1, 1, );
$session
->{
$prefix
}{lldpRemPortDesc} =
idx2val(
$vbl
, LLDP_REM_PORT_DESC, 1, 1, );
$session
->{
$prefix
}{lldpRemSysName} =
idx2val(
$vbl
, LLDP_REM_SYS_NAME, 1, 1, );
$session
->{
$prefix
}{lldpRemSysDesc} =
idx2val(
$vbl
, LLDP_REM_SYS_DESC, 1, 1, );
$session
->{
$prefix
}{lldpRemSysCapSupported} =
idx2val(
$vbl
, LLDP_REM_SYS_CAPA_SUP, 1, 1, );
$session
->{
$prefix
}{lldpRemSysCapEnabled} =
idx2val(
$vbl
, LLDP_REM_SYS_CAPA_ENA, 1, 1, );
$session
->{
$prefix
}{__initialized}++;
}
unless
(
caller
() ) {
print
"$prefix compiles and initializes successful.\n"
;
}
1;