#! /usr/bin/perl -w # # Written by Oron Peled # Copyright (C) 2007, Xorcom # This program is free software; you can redistribute and/or # modify it under the same terms as Perl itself. # # $Id$ # use strict; use File::Basename; BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); } use Zaptel; use Zaptel::Span; use Zaptel::Xpp; use Zaptel::Xpp::Xbus; sub usage { die "Usage: $0 [on|off|1|0]\n"; } @ARGV == 0 or @ARGV == 1 or usage; my $on = shift; my $verbose = 0; my $should_output = 1; if(defined($on)) { # Translate to booleans $on = uc($on); $on =~ /^(ON|OFF|1|0)$/ or usage; $on = ($on eq 'ON') ? 1 : 0; $should_output = 0 unless $verbose; } sub state2str($) { return (shift)?"on":"off"; } sub myprintf { printf @_ if $should_output; } my @spans = Zaptel::spans; foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) { myprintf "%-10s\t%s\t%s\n", $xbus->name, $xbus->label, $xbus->connector; next unless $xbus->status eq 'CONNECTED'; foreach my $xpd ($xbus->xpds()) { my $prev = $xpd->zt_registration($on); if(!defined($prev)) { # Failure printf "%s: Failed %s\n", $xpd->fqn, $!; next; } myprintf "\t%-10s: ", $xpd->fqn; if(!defined($on)) { # Query only my ($span) = grep { $_->name eq $xpd->fqn } @spans; my $spanstr = ($span) ? ("Span " . $span->num) : ""; myprintf "%s %s\n", state2str($prev), $spanstr ; next; } myprintf "%3s ==> %3s\n", state2str($prev), state2str($on); } } __END__ =head1 NAME zt_registration - Handle registration of Xorcom XPD modules in zaptel. =head1 SYNOPSIS zt_registration [on|off] =head1 DESCRIPTION Without parameters, show all connected XPDs sorted by physical connector order. Each one is show to be unregistered (off), or registered to a specific zaptel span (the span number is shown). All registerations/deregisterations are sorted by physical connector string. Span registration should generally always succeed. Span unregistration may fail if channels from the span are in use by e.g. asterisk. In such a case you'll also see those channels as '(In use)' in the output of lszaptel(8). =head2 Parameters off -- deregisters all XPD's from zaptel. on -- registers all XPD's to zaptel. =head2 Sample Output An example of the output of zt_registration for some registered Astribanks: $ zt_registration XBUS-02 [] usb-0000:00:1d.7-4 XBUS-00/XPD-00: on Span 1 XBUS-00/XPD-10: on Span 2 XBUS-00 [usb:00000126] usb-0000:00:1d.7-2 XBUS-02/XPD-00: on Span 3 XBUS-02/XPD-10: on Span 4 XBUS-02/XPD-20: on Span 5 XBUS-02/XPD-30: on Span 6 XBUS-01 [usb:00000128] usb-0000:00:1d.7-1 XBUS-01/XPD-00: on Span 7 XBUS-01/XPD-10: on Span 8 XBUS-01/XPD-20: on Span 9 XBUS-01/XPD-30: on Span 10 =head1 FILES =over =item /proc/xpp/XBUS-nn/XPD-mm/zt_registration Reading from this file shows if if the if the specific XPD is registered. Writing to it 0 or 1 registers / unregisters the device. This should allow you to register / unregister a specific XPD rather than all of them. =back