#1111 Support for OUI28/MA-M and OUI36/MA-S
* new oui importer using IEEE csv for MA-L+M+S * schema update for new vendor table * change vendor to manufacturer because Device has a vendor field * remove oui from manuf table, and update node oui after manuf update * faster way to bulk update node oui * switch from using oui table to manufacturer table for vendor lookup * some other oui cleanup * faster/scalable way to join a macaddr to manuf table * remove device.oui support * update node oui in bulk at end of macsuck run * correct literal sql instead of bind * more efficient to get oui base for each mac * comment better the base lookup in macsuck
This commit is contained in:
@@ -384,14 +384,6 @@ sub renumber {
|
||||
|
||||
=head1 ADDITIONAL COLUMNS
|
||||
|
||||
=head2 oui
|
||||
|
||||
Returns the first half of the device MAC address.
|
||||
|
||||
=cut
|
||||
|
||||
sub oui { return substr( ((shift)->mac || ''), 0, 8 ) }
|
||||
|
||||
=head2 port_count
|
||||
|
||||
Returns the number of ports on this device. Enable this
|
||||
|
||||
@@ -302,6 +302,8 @@ __PACKAGE__->many_to_many( vlans => 'port_vlans', 'vlan_entry' );
|
||||
|
||||
=head2 oui
|
||||
|
||||
DEPRECATED: USE MANUFACTURER INSTEAD
|
||||
|
||||
Returns the C<oui> table entry matching this Port. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
@@ -320,6 +322,26 @@ __PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui',
|
||||
{ join_type => 'LEFT' }
|
||||
);
|
||||
|
||||
=head2 manufacturer
|
||||
|
||||
Returns the C<manufacturer> table entry matching this Port. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
The JOIN is of type LEFT, in case the Manufacturer table has not been populated.
|
||||
|
||||
=cut
|
||||
|
||||
__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' }
|
||||
);
|
||||
|
||||
=head1 ADDITIONAL METHODS
|
||||
|
||||
=head2 neighbor
|
||||
|
||||
29
lib/App/Netdisco/DB/Result/Manufacturer.pm
Normal file
29
lib/App/Netdisco/DB/Result/Manufacturer.pm
Normal file
@@ -0,0 +1,29 @@
|
||||
use utf8;
|
||||
package App::Netdisco::DB::Result::Manufacturer;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base 'App::Netdisco::DB::Result';
|
||||
__PACKAGE__->table("manufacturer");
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
"company",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
"abbrev",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
"base",
|
||||
{ data_type => "text", is_nullable => 0 },
|
||||
"bits",
|
||||
{ data_type => "integer", is_nullable => 1 },
|
||||
"first",
|
||||
{ data_type => "macaddr", is_nullable => 1 },
|
||||
"last",
|
||||
{ data_type => "macaddr", is_nullable => 1 },
|
||||
"range",
|
||||
{ data_type => "int8range", is_nullable => 1 },
|
||||
);
|
||||
|
||||
__PACKAGE__->set_primary_key("base");
|
||||
|
||||
1;
|
||||
@@ -19,7 +19,7 @@ __PACKAGE__->add_columns(
|
||||
"active",
|
||||
{ data_type => "boolean", is_nullable => 1 },
|
||||
"oui",
|
||||
{ data_type => "varchar", is_nullable => 1, is_serializable => 0, size => 8 },
|
||||
{ data_type => "varchar", is_nullable => 1, is_serializable => 0, size => 9 },
|
||||
"time_first",
|
||||
{
|
||||
data_type => "timestamp",
|
||||
@@ -149,6 +149,8 @@ __PACKAGE__->has_many( wireless => 'App::Netdisco::DB::Result::NodeWireless',
|
||||
|
||||
=head2 oui
|
||||
|
||||
DEPRECATED: USE MANUFACTURER INSTEAD
|
||||
|
||||
Returns the C<oui> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
@@ -159,6 +161,21 @@ The JOIN is of type LEFT, in case the OUI table has not been populated.
|
||||
__PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui', 'oui',
|
||||
{ join_type => 'LEFT' } );
|
||||
|
||||
=head2 manufacturer
|
||||
|
||||
Returns the C<manufacturer> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
The JOIN is of type LEFT, in case the Manufacturer table has not been populated.
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to( manufacturer => 'App::Netdisco::DB::Result::Manufacturer', {
|
||||
'foreign.base' => 'self.oui',
|
||||
},
|
||||
{ join_type => 'LEFT' }
|
||||
);
|
||||
|
||||
=head1 ADDITIONAL COLUMNS
|
||||
|
||||
=head2 time_first_stamp
|
||||
|
||||
@@ -41,6 +41,8 @@ __PACKAGE__->set_primary_key("mac", "ip");
|
||||
|
||||
=head2 oui
|
||||
|
||||
DEPRECATED: USE MANUFACTURER INSTEAD
|
||||
|
||||
Returns the C<oui> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
@@ -59,6 +61,26 @@ __PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui',
|
||||
{ join_type => 'LEFT' }
|
||||
);
|
||||
|
||||
=head2 manufacturer
|
||||
|
||||
Returns the C<manufacturer> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
The JOIN is of type LEFT, in case the Manufacturer table has not been populated.
|
||||
|
||||
=cut
|
||||
|
||||
__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' }
|
||||
);
|
||||
|
||||
=head2 node_ips
|
||||
|
||||
Returns the set of all C<node_ip> entries which are associated together with
|
||||
|
||||
@@ -47,6 +47,8 @@ __PACKAGE__->set_primary_key("mac");
|
||||
|
||||
=head2 oui
|
||||
|
||||
DEPRECATED: USE MANUFACTURER INSTEAD
|
||||
|
||||
Returns the C<oui> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
@@ -65,6 +67,26 @@ __PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui',
|
||||
{ join_type => 'LEFT' }
|
||||
);
|
||||
|
||||
=head2 manufacturer
|
||||
|
||||
Returns the C<manufacturer> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
The JOIN is of type LEFT, in case the Manufacturer table has not been populated.
|
||||
|
||||
=cut
|
||||
|
||||
__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' }
|
||||
);
|
||||
|
||||
=head2 nodes
|
||||
|
||||
Returns the set of C<node> entries associated with this IP. That is, all the
|
||||
|
||||
@@ -48,6 +48,8 @@ __PACKAGE__->set_primary_key("mac", "ssid");
|
||||
|
||||
=head2 oui
|
||||
|
||||
DEPRECATED: USE MANUFACTURER INSTEAD
|
||||
|
||||
Returns the C<oui> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
@@ -66,6 +68,26 @@ __PACKAGE__->belongs_to( oui => 'App::Netdisco::DB::Result::Oui',
|
||||
{ join_type => 'LEFT' }
|
||||
);
|
||||
|
||||
=head2 manufacturer
|
||||
|
||||
Returns the C<manufacturer> table entry matching this Node. You can then join on this
|
||||
relation and retrieve the Company name from the related table.
|
||||
|
||||
The JOIN is of type LEFT, in case the Manufacturer table has not been populated.
|
||||
|
||||
=cut
|
||||
|
||||
__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' }
|
||||
);
|
||||
|
||||
=head2 node
|
||||
|
||||
Returns the C<node> table entry matching this wireless entry.
|
||||
|
||||
@@ -25,7 +25,7 @@ __PACKAGE__->add_columns(
|
||||
"active",
|
||||
{ data_type => "boolean", is_nullable => 1 },
|
||||
"oui",
|
||||
{ data_type => "varchar", is_nullable => 1, size => 8 },
|
||||
{ data_type => "varchar", is_nullable => 1, size => 9 },
|
||||
"time_first",
|
||||
{
|
||||
data_type => "timestamp",
|
||||
|
||||
Reference in New Issue
Block a user