1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#! /usr/bin/perl -w
#
# Written by Oron Peled <oron@actcom.co.il>
# 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_SERIAL')) {
myprintf "%-10s\t%s\t%s\n", $xbus->name, $xbus->serial, $xbus->connector;
next unless $xbus->status eq 'CONNECTED';
foreach my $xpd ($xbus->xpds()) {
my $prev = $xpd->zt_registration($on);
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;
}
if(!defined($prev)) { # Failure
printf "Failed %s\n", $!;
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 serial number and
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 serial number and
(lacking that) 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
In this example the XBUS-02 has an empty serial number and thus
becomes the first Astribank. The other two are sorted according to their
serial numbers.
=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
|