[Pkg-voip-commits] [dahdi-tools] 168/285: dahdi_span_types: allow defaults + overrides
tzafrir at debian.org
tzafrir at debian.org
Thu Jul 7 19:18:50 UTC 2016
This is an automated email from the git hooks/post-receive script.
tzafrir pushed a commit to branch master
in repository dahdi-tools.
commit 451a8b4d6f43e209faf1369004f1f17ed827adc3
Author: Oron Peled <oron.peled at xorcom.com>
Date: Mon Jan 20 20:10:55 2014 +0200
dahdi_span_types: allow defaults + overrides
* Allow wildcards for both device and span number (as before).
Example:
* *:T1
* But now we are carefull to follow strict order in the configuration
file. This means, if there are multiple matches -- last one wins.
* So we can use specialisation:
* *:T1 # Everything is T1
FOO [34]:T1 # Except spans 3,4 on the FOO device
* Added --dry-run and --verbose options.
* Updated the man-page:
- Fixed "registered" => "assigned".
- Use "line mode" for E1/J1/T1.
- Document current changes.
Signed-off-by: Tzafrir Cohen <tzafrir.cohen at xorcom.com>
Acked-By: Russ Meyerriecks <rmeyerriecks at digium.com>
---
dahdi_span_types | 128 +++++++++++++++++++++++++++++++------------------
doc/dahdi_span_types.8 | 89 ++++++++++++++++++++++++----------
2 files changed, 146 insertions(+), 71 deletions(-)
diff --git a/dahdi_span_types b/dahdi_span_types
index 7936076..9fa3ff1 100755
--- a/dahdi_span_types
+++ b/dahdi_span_types
@@ -27,6 +27,19 @@
# - "@location" - Location attribute from sysfs (embeded inside '<>')
# - "/devpath" - The sysfs absolute devpath
#
+# * Wildcard are allowed in the configuration file:
+# - In the device specifiers (keys)
+# - In the span numbers
+# - Example for "match-all": * *:T1
+#
+# * During "set":
+# - If there are multiple matches, for a span, all are applied
+# - They are always applied in their order in the configuration file
+# - This means the last match wins
+# - Example:
+# * *:T1 # All span on all devices are T1
+# usb:X1234567 [34]:E1 # Except spans 3,4 on specific device
+#
# * During "dumpconfig", for each device we take the first available key:
# - The preference is: "hwid" or else "@location" or else "/devpath"
# - This can be overriden via the SPAN_ASSIGNMENTS_KEY environment variable
@@ -34,6 +47,8 @@
#
# Command line options:
# - The '-h|--help' show a usage message.
+# - The '-v|--verbose' show debugging messages (on stderr)
+# - The '-n|--dry-run' During "set", only show what would be done
# - The '-k <key>|--key <key>' overrides the SPAN_ASSIGNMENTS_KEY environment
# variable.
#
@@ -59,12 +74,14 @@ usage() {
echo >&2 ""
echo >&2 " options:"
echo >&2 " -h|--help - Show this help"
+ echo >&2 " -v|--verbose' - Show debugging messages (on stderr)"
+ echo >&2 " -n|--dry-run' - During 'set', only show what would be done"
echo >&2 " -k|--key <k> - Override prefered key during dumpconfig action"
exit 1
}
# Parse command line options
-TEMP=`getopt -o hk: --long help,key: -n "$0" -- "$@"`
+TEMP=`getopt -o hnvk: --long help,dry-run,verbose,key: -n "$0" -- "$@"`
if [ $? != 0 ]; then
echo >&2 "Bad options"
usage
@@ -78,6 +95,14 @@ while true ; do
-h|--help)
usage
;;
+ -n|--dry-run)
+ shift
+ dry_run=true
+ ;;
+ -v|--verbose)
+ shift
+ verbose=true
+ ;;
-k|--key)
SPAN_ASSIGNMENTS_KEY="$2"
shift
@@ -138,11 +163,12 @@ show_spantypes() {
cat "$device/spantype" | while read st; do
case "$st" in
*:[ETJ]1)
- printf "%-10s %-20s %s\n" \
- "$st" "[$hardware_id]" "$location"
+ printf "%-10s %-20s %-30s %s\n" \
+ "$st" "[$hardware_id]" "$location" \
+ "$devpath"
;;
esac
- done | sort -n
+ done
done
}
@@ -185,70 +211,78 @@ filter_conf() {
sed -e 's/#.*//' -e '/^[ \t]*$/d' "$DAHDISPANTYPESCONF"
}
-conf_spans() {
- hardware_id="$1"
- location="$2"
- devpath="$3"
- filter_conf | (
- # Collect device spans
- # in a subshell, so $SPANS is not lost
- SPANS=''
- while read id spans; do
+handle_span() {
+ device="$1"
+ spantype="$2"
+ attr_file="$device/spantype"
+ devpath=`cd "$device" && pwd -P`
+ devname=`echo "$device" | sed "s,$devbase/,,"`
+ location='@'`attr_clean "$device/location"`
+ hardware_id=`attr_clean "$device/hardware_id"`
+ spanno=`echo "$spantype" | cut -d: -f1`
+ #echo >&2 "DEBUG: $device $spanno ($spantype)"
+ filter_conf | while read id span_spec; do
+ sn=`echo "$span_spec" | cut -d: -f1`
+ val=`echo "$span_spec" | cut -d: -f2`
+ case "$spanno" in
+ $sn)
+ ;;
+ *)
+ #echo >&2 "no-match($device $spanno): $sn"
+ continue
+ ;;
+ esac
+ found=no
# GLOBBING
case "$location" in
$id)
- #echo >&2 "match($id): $spans"
- SPANS="$SPANS $spans"
+ #echo >&2 "match($id): $span_spec"
+ found=yes
;;
esac
case "$hardware_id" in
$id)
- #echo >&2 "match([$id]): $spans"
- SPANS="$SPANS $spans"
+ #echo >&2 "match([$id]): $span_spec"
+ found=yes
;;
esac
case "$devpath" in
$id)
- #echo >&2 "match([$id]): $spans"
- SPANS="$SPANS $spans"
+ #echo >&2 "match([$id]): $span_spec"
+ found=yes
;;
esac
+ if [ "$found" = 'yes' ]; then
+ if [ "$dry_run" = 'true' -o "$verbose" = 'true' ]; then
+ echo >&2 "Set $devname span $spanno = $val"
+ fi
+ if [ "$dry_run" != 'true' ]; then
+ echo "$spanno:$val" > "$attr_file"
+ fi
+ fi
done
- echo "$SPANS"
- )
}
-device_set_spantype() {
- device="$1"
- attr_file="$device/spantype"
- devpath=`cd "$device" && pwd -P`
- location='@'`attr_clean "$device/location"`
- hardware_id=`attr_clean "$device/hardware_id"`
- spanspecs=`conf_spans "$hardware_id" "$location" "$devpath"`
- #echo >&2 "MATCHED($device): $spanspecs"
- cut -d: -f1 "$attr_file" | while read spanno; do
- for sp in $spanspecs
- do
- s=`echo "$sp" | cut -d: -f1`
- v=`echo "$sp" | cut -d: -f2`
- case "$spanno" in
- $s)
- #echo >&2 "conf($attr_file): $spanno:$v"
- echo "$spanno:$v" > "$attr_file"
- ;;
- esac
- done
- done
-}
-
-set_spantypes() {
+set_all_devices() {
if [ ! -f "$DAHDISPANTYPESCONF" ]; then
echo >&2 "$0: Missing configuration '$DAHDISPANTYPESCONF'"
exit 1
fi
for device in $DEVICES
do
- device_set_spantype "$device"
+ devname=`echo "$device" | sed "s,$devbase/,,"`
+ cat "$device/spantype" | while read spantype; do
+ case "$spantype" in
+ *:[ETJ]1)
+ handle_span "$device" "$spantype"
+ ;;
+ *)
+ if [ "$dry_run" = 'true' -o "$verbose" = 'true' ]; then
+ echo >&2 "Skipping non-E1/T1/J1 span ($devname -- $spantype)"
+ fi
+ ;;
+ esac
+ done
done
}
@@ -260,7 +294,7 @@ dumpconfig)
dump_config
;;
set)
- set_spantypes
+ set_all_devices
;;
*)
usage
diff --git a/doc/dahdi_span_types.8 b/doc/dahdi_span_types.8
index c7d221d..4f39bf5 100644
--- a/doc/dahdi_span_types.8
+++ b/doc/dahdi_span_types.8
@@ -1,27 +1,46 @@
-.TH "SPAN_TYPES" "8" "13 Oct 2013" "" ""
+.TH "DAHDI_SPAN_TYPES" "8" "23 Jan 2014" "" ""
.SH NAME
-dahdi_span_types \- set DAHDI spans properties before registration (E1/T1)
+dahdi_span_types \- set line modes of DAHDI spans before assignment
.SH SYNOPSIS
-.B dahdi_span_types <list|dumpconfig|set> [\fIdevpath \fB[\fIdevpath \fB...]]
+.B dahdi_span_types [\fIoptions\fB] <list|dumpconfig|set> \fB[\fIdevpath \fB...]
.SH DESCRIPTION
-The span type (E1/T1/J1) must be set to a span before registering it
-with DAHDI, as E1 spans use more channels. \fBdahdi_span_types\fR applies the
-span type configuration to an unregistered span.
+The span type (the line mode: E1/T1/J1) must be set to a span before
+DAHDI assigns it a span number, as E1 spans use more channels.
+\fBdahdi_span_types\fR applies the span type configuration to an
+un-assigned span.
Using it only makes sense when the kernel module parameter
-\fBdahdi.auto_assign_span\fR is unset, otherwise the DAHDI spans register
-automatically.
+\fBdahdi.auto_assign_span\fR is unset, otherwise DAHDI automatically
+assign span numbers during device registration.
-.SH OPTIONS
.B dahdi_span_types
takes a command and an optional list of devices. If no device is given,
the command is applied to all devices.
The device is marked as a path in the SysFS tree.
+.SH OPTIONS
+
+.B -h|--help
+.RS
+Output usage message and exit
+.RE
+
+.B -n|--dry-run
+.RS
+During \fB"set"\fR operation, only show what would be done, without actually
+changing anything.
+.RE
+
+.B -v|--verbose
+.RS
+During \fB"set"\fR operation, show the actions that are being performed.
+.RE
+
+.SH SUB-COMMANDS
.B set
.RS
Reads settings from \fBspan-types.conf\fR and applies them to the
@@ -31,8 +50,8 @@ specified).
.B list
.RS
-List types for all spans in the system which may be set with dahdi_span_types
-(E1/T1/J1 spans).
+List line modes for all spans in the system which may be set with
+dahdi_span_types (E1/T1/J1 spans).
.RE
.B dumpconfig
@@ -46,8 +65,9 @@ uses this command internally.
.RE
.SH CONFIGURATION
+.SS General structure
.B span-types.conf
-is a file with lines specifying registration of spans.
+is a file with lines specifying line modes of spans.
Empty lines or lines beginning with '#' are ignored.
@@ -56,7 +76,7 @@ Each line is in the format of:
.I ID spanspec ...
The \fIID\fR field specifies the DAHDI device and the \fIspanspecs\fR
-define how to register its spans. A line may have multiple
+define the line modes of its spans. A line may have multiple
\fIspanspecs\fR in a single line (though dumpconfig generates a
configuration with one per line).
@@ -66,8 +86,8 @@ software readable serial number or whatever) or the location in which
it is installed on the system. The former makes it simpler to change
connector / slot whereas the latter makes it simpler to replace a unit.
-The value in this field is matched (when the commands \fBadd\fR and
-\fBremove\fR) are used) to the following values:
+The value in this field is matched (when the command \fBset\fR is
+used) to the following values:
\fIhwid\fR
\fB@\fIlocation\fR
@@ -75,22 +95,28 @@ The value in this field is matched (when the commands \fBadd\fR and
See above for their descriptions. The value may include shell wildcards:
*, ? and [], which are used in the match. The values to be matched are
-first cleaned up: '!' is replaced with '/' and any character beyond
-"a-zA-Z0-9/:.-" is removed.
+first cleaned up: '!' is replaced with '/' and any character not in
+"a-zA-Z0-9/:.-" is replaced by "_".
+
+Note that while span\-types.conf allows an arbitrarily-complex
+combination of E1, J1 and T1 ports, it would normally have just a single
+wildcard line setting the line mode (the first line in the example below).
.SS Span Specification
Each line should have one or more span specifications: this is the value
-used to register a span with DAHDI in the SysFS interface. A
-specification has three colon-separated numbers:
+used to set span type with DAHDI in the SysFS interface. A
+specification has two colon-separated fields:
.I rel_span_no:span_type
-for instance, the following are four span specifications specify ports 1 and 2 as E1 and ports 3 and 4 as T1: [12]:E1 [34]:T1 .
+for instance, the following are four span specifications specify ports 1
+and 2 as E1 and ports 3 and 4 as T1: [12]:E1 [34]:T1 .
.B rel_span_no
.RS
The relative number of the span in the device. E.g.: port number.
+This field may contain shell wildcards (*, ? and [])
.RE
.B span_type
@@ -98,6 +124,21 @@ The relative number of the span in the device. E.g.: port number.
E1/T1/J1
.RE
+.SS Multiple matches
+During \fBset\fR operation, the \fBdahdi_span_types\fR applies all
+matching settings to a span. This is done in the order of lines in the
+configuration files.
+
+Thus, if there are multiple matches to a span -- the last match
+will \fIwin\fR (all will be applied to the kernel in order. The last
+one in the file will be applied last).
+
+Example:
+.EX
+* *:T1 # All spans on all devices will be T1
+usb:X1234567 [34]:E1 # Except spans 3,4 on the device which will be E1
+.EE
+
.SH ENVIRONMENT
@@ -109,14 +150,14 @@ overridden from the environment.
.B DAHDISPANTYPESCONF
.RS
-The path to span-types.conf resides. /etc/dahdi/span-types.conf if
+The path to span-types.conf resides. /etc/dahdi/span\-types.conf if
not overridden from the environment.
.RE
.SH FILES
-.B /etc/dahdi/span-types.conf
+.B /etc/dahdi/span\-types.conf
.RS
The default location for the configuration file.
.RE
@@ -129,8 +170,8 @@ files, among others:
.B spantype
.RS
read/write file. Reading from it returns current configuration for spans
-of the device. Span-specifications can be written to it to change types
-(but only for a span that is not registered).
+of the device. Span-specifications can be written to it to change line
+modes (but only for a span that is not assigned yet).
.RE
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/dahdi-tools.git
More information about the Pkg-voip-commits
mailing list