diff --git a/xpp/dahdi_registration b/xpp/dahdi_registration index 8b73aea..cdd715d 100755 --- a/xpp/dahdi_registration +++ b/xpp/dahdi_registration @@ -19,11 +19,27 @@ use Dahdi::Xpp::Xpd; use Getopt::Std; sub usage { - die "Usage: $0 [-s sort_order] [on|off|1|0]\n"; + die "Usage: $0 [-v] [-R] [-s sort_order] [on|off|1|0]\n"; +} + +sub check_param { + my $param = shift || die; + open(F, $param) || return ''; + my $val = ; + close F; + chomp $val; + return $val; } my %opts; -getopts('s:', \%opts) || usage; +getopts('vRs:', \%opts) || usage; + +my $dahdi_autoreg = check_param('/sys/module/xpp/parameters/dahdi_autoreg') eq 'Y'; +my $auto_assign_spans = check_param('/sys/module/dahdi/parameters/auto_assign_spans') eq '1'; +my $pinned_spans_config = $ENV{'PINNED_SPANS_CONF_FILE'} || '/etc/dahdi/pinned-spans.conf'; +my $span_types_config = $ENV{'SPAN_TYPES_CONF_FILE'} || '/etc/dahdi/span-types.conf'; +my $have_pinned_spans_config = -f $pinned_spans_config || 0; +my $have_span_types_config = -f $span_types_config || 0; my $sorter; my $sort_order = $opts{'s'}; @@ -41,9 +57,11 @@ if(defined $sort_order) { @ARGV == 0 or @ARGV == 1 or usage; my $on = shift; -my $verbose = 0; +my $verbose = $opts{'v'}; my $should_output = 1; +#print "dahdi_autoreg=$dahdi_autoreg auto_assign_spans=$auto_assign_spans have_pinned_spans_config='$have_pinned_spans_config' have_span_types_config='$have_span_types_config'\n"; + if(defined($on)) { # Translate to booleans $on = uc($on); $on =~ /^(ON|OFF|1|0)$/ or usage; @@ -51,6 +69,8 @@ if(defined($on)) { # Translate to booleans $should_output = 0 unless $verbose; } +undef $on if $dahdi_autoreg and not $opts{'R'}; + sub state2str($) { return (shift)?"on":"off"; } @@ -80,6 +100,15 @@ foreach my $xbus (Dahdi::Xpp::xbuses($sorter)) { } myprintf "%3s ==> %3s\n", state2str($prev), state2str($on); } + if (defined($on) && $on && ! $have_pinned_spans_config && ! $auto_assign_spans) { + # Emulate /etc/dahdi/pinned-spans.conf: + # - We iterate over $xbus according to /etc/dahdi/xpp_order + # - We "auto" assign all spans of current $xbus + my $devpath = sprintf "/sys/bus/dahdi_devices/devices/astribanks:xbus-%02d", $xbus->num; + my @cmd = ('span_assignments', 'auto', $devpath); + system @cmd; + warn "Failed '@cmd' (status=$?)\n" if $?; + } } myprintf "# Sorted: $sort_order\n" if defined $sort_order; @@ -91,7 +120,7 @@ dahdi_registration - Handle registration of Xorcom XPD modules in dahdi. =head1 SYNOPSIS -dahdi_registration [-s sortorder] [on|off] +dahdi_registration [-v] [-s sortorder] [-R] [on|off] =head1 DESCRIPTION @@ -105,6 +134,12 @@ 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 lsdahdi(8). +dahdi_registration is intended to be used when the xpp module parameter +B is false (and implicitly: when the dahdi module parameter +B is true. + +If dahdi_autoreg is true, the program will normally do nothing. + =head2 Parameters off -- deregisters all XPD's from dahdi. @@ -115,6 +150,15 @@ on -- registers all XPD's to dahdi. =over +=item -v + +verbose output. + +=item -R + +Force operations (on/off) even if the module parameter B +for xpp is enabled (which makes this program unneeded). + =item -s I The sort order to use.