+sub table_dupcheck_fields { ( 'ip_addr', 'mac_addr' ); }
+
+=item search HASHREF
+
+Class method which returns a qsearch hash expression to search for parameters
+specified in HASHREF.
+
+Parameters:
+
+=over 4
+
+=item unlinked - set to search for all unlinked services. Overrides all other options.
+
+=item agentnum
+
+=item custnum
+
+=item svcpart
+
+=item ip_addr
+
+=item pkgpart - arrayref
+
+=item routernum - arrayref
+
+=item sectornum - arrayref
+
+=item towernum - arrayref
+
+=item order_by
+
+=back
+
+=cut
+
+sub _search_svc {
+ my( $class, $params, $from, $where ) = @_;
+
+ #routernum, can be arrayref
+ for my $routernum ( $params->{'routernum'} ) {
+ # this no longer uses addr_block
+ if ( ref $routernum and grep { $_ } @$routernum ) {
+ my $in = join(',', map { /^(\d+)$/ ? $1 : () } @$routernum );
+ my @orwhere = ();
+ push @orwhere, "svc_broadband.routernum IN ($in)" if $in;
+ push @orwhere, "svc_broadband.routernum IS NULL"
+ if grep /^none$/, @$routernum;
+ push @$where, '( '.join(' OR ', @orwhere).' )';
+ }
+ elsif ( $routernum =~ /^(\d+)$/ ) {
+ push @$where, "svc_broadband.routernum = $1";
+ }
+ elsif ( $routernum eq 'none' ) {
+ push @$where, "svc_broadband.routernum IS NULL";
+ }
+ }
+
+ #this should probably move to svc_Tower_Mixin, or maybe we never should have
+ # done svc_acct # towers (or, as mark thought, never should have done
+ # svc_broadband)
+
+ #sector and tower, as above
+ my @where_sector = $class->tower_sector_sql($params);
+ if ( @where_sector ) {
+ push @$where, @where_sector;
+ push @$from, 'LEFT JOIN tower_sector USING ( sectornum )';
+ }
+
+ #ip_addr
+ if ( $params->{'ip_addr'} =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/ ) {
+ push @$where, "ip_addr = '$1'";
+ }
+
+}
+