xpp: dahdi_registration: force re-assignment
authorOron Peled <oron.peled@xorcom.com>
Sun, 30 Mar 2014 18:38:52 +0000 (21:38 +0300)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Wed, 30 Apr 2014 19:46:41 +0000 (22:46 +0300)
* The system state causing the bug:
  - DAHDI has auto_assign_spans==1
  - No /etc/dahdi/assigned-spans.conf

* The bug scenario:
  - During initial device detection, they are assigned by
    DAHDI driver.
  - Later we run "dahdi_span_assignment remove"
  - Then, a "dahdi_registration on" would not assign any span.

* The fix:
  - Using the '-R' option, force "dahdi_registration on" to also
    do "dahdi_span_assignment auto" on relevant devices.
  - This is the way it's called by /usr/share/dahdi/dahdi_auto_assign_compat

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>

xpp/dahdi_registration

index 32bd746..7202e76 100755 (executable)
@@ -41,6 +41,11 @@ my $span_types_config = $ENV{'SPAN_TYPES_CONF_FILE'} || '/etc/dahdi/span-types.c
 my $have_assigned_spans_config = -f $assigned_spans_config || 0;
 my $have_span_types_config = -f $span_types_config || 0;
 
+# Spans will be auto-assigned by default if either:
+# - Driver $auto_assign_spans them or
+# - Udev script see that we $have_span_types_config and it "add" them
+my $default_auto_assign = $auto_assign_spans || $have_assigned_spans_config;
+
 my $sorter;
 my $sort_order = $opts{'s'};
 if(defined $sort_order) {
@@ -100,11 +105,14 @@ foreach my $xbus (Dahdi::Xpp::xbuses($sorter)) {
                }
                myprintf "%3s ==> %3s\n", state2str($prev), state2str($on);
        }
-       if (defined($on) && $on && ! $have_assigned_spans_config && ! $auto_assign_spans) {
+       next unless defined($on) && $on;
+       # Only assign if no default assignment, or forced by '-R' option
+       if ($opts{'R'} || ! $default_auto_assign) {
                # Emulate /etc/dahdi/assigned-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;
+               myprintf "auto-assign $devpath\n";
                my @cmd = ('dahdi_span_assignments', 'auto', $devpath);
                system @cmd;
                warn "Failed '@cmd' (status=$?)\n" if $?;