__PACKAGE__->table(
"device_port"
);
__PACKAGE__->add_columns(
"ip"
,
{
data_type
=>
"inet"
,
is_nullable
=> 0 },
"port"
,
{
data_type
=>
"text"
,
is_nullable
=> 0 },
"creation"
,
{
data_type
=>
"timestamp"
,
default_value
=> \
"LOCALTIMESTAMP"
,
is_nullable
=> 1,
original
=> {
default_value
=> \
"LOCALTIMESTAMP"
},
},
"descr"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"up"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"up_admin"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"type"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"duplex"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"duplex_admin"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"speed"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"speed_admin"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"name"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"mac"
,
{
data_type
=>
"macaddr"
,
is_nullable
=> 1 },
"mtu"
,
{
data_type
=>
"integer"
,
is_nullable
=> 1 },
"stp"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"remote_ip"
,
{
data_type
=>
"inet"
,
is_nullable
=> 1 },
"remote_port"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"remote_type"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"remote_id"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"has_subinterfaces"
,
{
data_type
=>
"boolean"
,
is_nullable
=> 0,
default_value
=> \
"false"
},
"is_master"
,
{
data_type
=>
"boolean"
,
is_nullable
=> 0,
default_value
=> \
"false"
},
"slave_of"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"manual_topo"
,
{
data_type
=>
"boolean"
,
is_nullable
=> 0,
default_value
=> \
"false"
},
"is_uplink"
,
{
data_type
=>
"boolean"
,
is_nullable
=> 1 },
"vlan"
,
{
data_type
=>
"text"
,
is_nullable
=> 1 },
"pvid"
,
{
data_type
=>
"integer"
,
is_nullable
=> 1 },
"lastchange"
,
{
data_type
=>
"bigint"
,
is_nullable
=> 1 },
"custom_fields"
,
{
data_type
=>
"jsonb"
,
is_nullable
=> 0,
default_value
=> \
"{}"
},
"tags"
,
{
data_type
=>
"text[]"
,
is_nullable
=> 0,
default_value
=> \
"'{}'::text[]"
},
);
__PACKAGE__->set_primary_key(
"port"
,
"ip"
);
__PACKAGE__->belongs_to(
device
=>
'App::Netdisco::DB::Result::Device'
,
'ip'
);
__PACKAGE__->has_many(
port_vlans
=>
'App::Netdisco::DB::Result::DevicePortVlan'
,
{
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
} );
__PACKAGE__->has_many(
nodes
=>
'App::Netdisco::DB::Result::Node'
,
{
'foreign.switch'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
},
{
join_type
=>
'LEFT'
},
);
__PACKAGE__->has_many(
nodes_with_age
=>
'App::Netdisco::DB::Result::Virtual::NodeWithAge'
,
{
'foreign.switch'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
},
{
join_type
=>
'LEFT'
,
cascade_copy
=> 0,
cascade_update
=> 0,
cascade_delete
=> 0 },
);
__PACKAGE__->has_many(
active_nodes
=>
'App::Netdisco::DB::Result::Virtual::ActiveNode'
,
{
'foreign.switch'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
},
{
join_type
=>
'LEFT'
,
cascade_copy
=> 0,
cascade_update
=> 0,
cascade_delete
=> 0 },
);
__PACKAGE__->has_many(
active_nodes_with_age
=>
'App::Netdisco::DB::Result::Virtual::ActiveNodeWithAge'
,
{
'foreign.switch'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
},
{
join_type
=>
'LEFT'
,
cascade_copy
=> 0,
cascade_update
=> 0,
cascade_delete
=> 0 },
);
__PACKAGE__->has_many(
logs
=>
'App::Netdisco::DB::Result::DevicePortLog'
,
{
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
},
);
__PACKAGE__->might_have(
power
=>
'App::Netdisco::DB::Result::DevicePortPower'
, {
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
});
__PACKAGE__->might_have(
properties
=>
'App::Netdisco::DB::Result::DevicePortProperties'
, {
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
});
__PACKAGE__->might_have(
ssid
=>
'App::Netdisco::DB::Result::DevicePortSsid'
,
{
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
}
);
__PACKAGE__->might_have(
wireless
=>
'App::Netdisco::DB::Result::DevicePortWireless'
,
{
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
}
);
__PACKAGE__->belongs_to(
native_vlan
=>
'App::Netdisco::DB::Result::DeviceVlan'
,
sub
{
my
$args
=
shift
;
return
{
"$args->{foreign_alias}.ip"
=>
{
'-ident'
=>
"$args->{self_alias}.ip"
},
"$args->{self_alias}.vlan"
=>
{
'='
=> \
"cast($args->{foreign_alias}.vlan as text)"
}
};
}, {
join_type
=>
'LEFT'
}
);
__PACKAGE__->belongs_to(
agg_master
=>
'App::Netdisco::DB::Result::DevicePort'
, {
'foreign.ip'
=>
'self.ip'
,
'foreign.port'
=>
'self.slave_of'
,
}, {
join_type
=>
'LEFT'
,
}
);
__PACKAGE__->belongs_to(
neighbor_alias
=>
'App::Netdisco::DB::Result::DeviceIp'
,
sub
{
my
$args
=
shift
;
return
{
"$args->{foreign_alias}.alias"
=> {
'='
=>
$args
->{self_resultsource}->schema->resultset(
'DeviceIp'
)
->search({
alias
=> {
-ident
=>
"$args->{self_alias}.remote_ip"
}},
{
rows
=> 1,
columns
=>
'ip'
,
alias
=>
'devipsub'
})->as_query }
};
},
{
join_type
=>
'LEFT'
},
);
__PACKAGE__->belongs_to(
last_node
=>
'App::Netdisco::DB::Result::Virtual::LastNode'
, {
'foreign.switch'
=>
'self.ip'
,
'foreign.port'
=>
'self.port'
,
}, {
join_type
=>
'LEFT'
,
}
);
__PACKAGE__->many_to_many(
vlans
=>
'port_vlans'
,
'vlan_entry'
);
__PACKAGE__->belongs_to(
oui
=>
'App::Netdisco::DB::Result::Oui'
,
sub
{
my
$args
=
shift
;
return
{
"$args->{foreign_alias}.oui"
=>
{
'='
=> \
"substring(cast($args->{self_alias}.mac as varchar) for 8)"
}
};
},
{
join_type
=>
'LEFT'
}
);
__PACKAGE__->belongs_to(
manufacturer
=>
'App::Netdisco::DB::Result::Manufacturer'
,
sub
{
my
$args
=
shift
;
return
{
"$args->{foreign_alias}.range"
=> {
'@>'
=>
\
qq{('x' || lpad( translate( $args->{self_alias}
.mac ::text,
':'
,
''
), 16,
'0'
)) ::bit(64) ::bigint} },
};
},
{
join_type
=>
'LEFT'
}
);
sub
neighbor {
my
$row
=
shift
;
return
eval
{
$row
->neighbor_alias->device ||
undef
};
}
sub
native {
return
(
shift
)->vlan }
sub
error_disable_cause {
return
(
shift
)->get_column(
'error_disable_cause'
) }
sub
remote_is_discoverable {
return
(
shift
)->get_column(
'remote_is_discoverable'
) }
sub
remote_is_wap {
return
(
shift
)->get_column(
'remote_is_wap'
) }
sub
remote_is_phone {
return
(
shift
)->get_column(
'remote_is_phone'
) }
sub
ifindex {
return
(
shift
)->get_column(
'ifindex'
) }
sub
pae_authsess_user {
return
(
shift
)->get_column(
'pae_authsess_user'
) }
sub
pae_authsess_user_net_mac {
return
NetAddr::MAC->new(
mac
=> ((
shift
)->pae_authsess_user ||
''
)) }
sub
pae_authconfig_port_control {
return
(
shift
)->get_column(
'pae_authconfig_port_control'
) }
sub
pae_authconfig_state {
return
(
shift
)->get_column(
'pae_authconfig_state'
) }
sub
pae_authconfig_port_status {
return
(
shift
)->get_column(
'pae_authconfig_port_status'
) }
sub
pae_authsess_mab {
return
(
shift
)->get_column(
'pae_authsess_mab'
) }
sub
pae_last_eapol_frame_source {
return
(
shift
)->get_column(
'pae_last_eapol_frame_source'
) }
sub
remote_dns {
return
(
shift
)->get_column(
'remote_dns'
) }
sub
remote_inventory {
my
$port
=
shift
;
my
$os_ver
= (
$port
->get_column(
'remote_os_ver'
)
? (
'running '
.
$port
->get_column(
'remote_os_ver'
)) :
''
);
my
$serial
= (
$port
->get_column(
'remote_serial'
)
? (
'('
.
$port
->get_column(
'remote_serial'
) .
')'
) :
''
);
my
$retval
=
join
' '
, (
$port
->get_column(
'remote_vendor'
) ||
''
),
(
$port
->get_column(
'remote_model'
) ||
''
),
$serial
,
$os_ver
;
return
((
$retval
=~ m/[[:alnum:]]/) ?
$retval
:
''
);
}
sub
vlan_count {
return
(
shift
)->get_column(
'vlan_count'
) }
sub
lastchange_stamp {
return
(
shift
)->get_column(
'lastchange_stamp'
) }
sub
is_free {
return
(
shift
)->get_column(
'is_free'
) }
sub
base64url_port {
return
encode_base64url((
shift
)->port) }
sub
net_mac {
return
NetAddr::MAC->new(
mac
=> ((
shift
)->mac ||
''
)) }
sub
last_comment {
my
$row
= (
shift
)->logs->search(
undef
,
{
order_by
=> {
-desc
=>
'creation'
},
rows
=> 1 })->first;
return
(
$row
?
$row
->
log
:
''
);
}
1;