registration-order: Added dahdi_auto_assign_compat v2.9.1 v2.9.1-rc2
authorOron Peled <oron.peled@xorcom.com>
Sun, 9 Mar 2014 12:20:17 +0000 (14:20 +0200)
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>
Tue, 25 Mar 2014 12:51:29 +0000 (14:51 +0200)
Maintains the original registration order as was before span
assignments. Should allow seemless trannsition to
dahdi.auto_assign_spans=0

* The idea:
  - We stop handling in udev the case of missing
    /etc/dahdi/assigned-spans.conf
  - Instead we rely on "registration_time" dahdi_device attribute from
    DAHDI-linux
  - Then, we can sort the devices and assign their spans in
    /etc/init.d/dahdi
* Mechanics:
  - From /etc/init.d/dahdi, we run a new 'dahdi_auto_assign_compat'
    script (after "waitfor_xpds" etc.)
  - In this script we "auto" assign spans of non-Astribank devices
  - In the end of the script we run "dahdi_registration" which
    does the same for Astribank devices.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com>

Makefile
dahdi.init
hotplug/dahdi_auto_assign_compat [new file with mode: 0755]
hotplug/handle_device.d/20-span-assignments

index 5566cbc..e3aa4b6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -108,6 +108,7 @@ endif
 ASSIGNED_DATA_SCRIPTS:=\
        dahdi_handle_device     \
        dahdi_span_config       \
+       dahdi_auto_assign_compat        \
        span_config.d/10-dahdi-cfg      \
        span_config.d/20-fxotune        \
        span_config.d/50-asterisk       \
index 064fa4f..2b77fd3 100755 (executable)
@@ -148,11 +148,6 @@ xpp_startup() {
        if ! /usr/share/dahdi/waitfor_xpds; then return 0; fi
 
        hotplug_exit_after_load
-
-       # overriding locales for the above two, as perl can be noisy
-       # when locales are missing.
-       # No register all the devices if they didn't auto-register:
-       LC_ALL=C dahdi_registration on
 }
 
 
@@ -263,6 +258,9 @@ case "$1" in
 
        xpp_startup
 
+       # Assign all spans that weren't handled via udev + /etc/dahdi/assigned-spans.conf
+       /usr/share/dahdi/dahdi_auto_assign_compat
+
        if [ $system = debian ]; then
            echo -n "Running dahdi_cfg: "
            $DAHDI_CFG_CMD 2> /dev/null && echo -n "done"
diff --git a/hotplug/dahdi_auto_assign_compat b/hotplug/dahdi_auto_assign_compat
new file mode 100755 (executable)
index 0000000..96f90dd
--- /dev/null
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+devdir='/sys/bus/dahdi_devices/devices'
+
+# DAHDI is loaded?
+if [ ! -d "$devdir" ]; then
+       exit 0
+fi
+
+devices_by_registration_time() {
+       grep -H '' $devdir/*/registration_time 2>/dev/null | \
+               sed 's,/registration_time:,\t,' | \
+               sort -k 2,2
+}
+
+# First assign non-Astribank devices
+devices_by_registration_time | \
+       grep -v '/astribanks:' | \
+       while read devpath time; do
+               echo >&2 "D: auto '$devpath'"
+               dahdi_span_assignments auto "$devpath"
+       done
+
+# Now handle Astribanks
+LC_ALL=C dahdi_registration -Rv on
index bfb724b..5493232 100755 (executable)
@@ -7,9 +7,9 @@ add)
        exit 0
 esac
 
+# For now, handle only spans in assigned-spans.conf
+# We leave other cases to /etc/init.d/dahdi, so
+# legacy ordering can be preserved.
 if [ -r "$DAHDICONFDIR/assigned-spans.conf" ]; then
        dahdi_span_assignments add "/sys$DEVPATH"
-else
-       # No configuration. No order guaranteed
-       dahdi_span_assignments auto "/sys$DEVPATH"
 fi