[dahdi-commits] tzafrir: branch tools/tzafrir/sysfs r8655 - in /tools/team/tzafrir/sysfs: ./ ...

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Mon May 17 17:33:44 CDT 2010


Author: tzafrir
Date: Mon May 17 17:33:40 2010
New Revision: 8655

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=8655
Log:
DAHDI-tools: dial_byname: Add span mapping:

* dahdi_genconf generate span strings for "span=" lines:
  - Hardware ID + Span ID (if there's Hardware ID)
  - Otherwise: Location + Span ID (if there's Location)
  - Otherwise: nomal span number
* dahdi_pools:
  - creates a /dev/dahdi/spanmap
  - In this directory, symlinks translate alternative span names
    to span numbers.
* dahdi_cfg:
  - Tries to use /dev/dahdi/spanmap/* to map span name to span number.
  - Alternatively, tries to parse simple numbers (backward compat)
  - Otherwise, fails.
  - The printconfig() function, also shows the spanmap names (if available).

Modified:
    tools/team/tzafrir/sysfs/dahdi_cfg.c
    tools/team/tzafrir/sysfs/xpp/dahdi_pools
    tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Config/Gen/System.pm
    tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Span.pm

Modified: tools/team/tzafrir/sysfs/dahdi_cfg.c
URL: http://svnview.digium.com/svn/dahdi/tools/team/tzafrir/sysfs/dahdi_cfg.c?view=diff&rev=8655&r1=8654&r2=8655
==============================================================================
--- tools/team/tzafrir/sysfs/dahdi_cfg.c (original)
+++ tools/team/tzafrir/sysfs/dahdi_cfg.c Mon May 17 17:33:40 2010
@@ -138,6 +138,7 @@
 static int	path_channels;
 static char	*chan_pathnames[DAHDI_MAX_CHANNELS];
 static int	chan_indexes[DAHDI_MAX_CHANNELS];
+static char	*spanmap[DAHDI_MAX_SPANS];
 
 static const char *sigtype_to_str(const int sig)
 {
@@ -312,6 +313,40 @@
 	return 0;
 }
 
+int span_string2num(const char *span_string)
+{
+	char		path[PATH_MAX];
+	struct stat	stbuf;
+	char		spanstr[10];
+	int		span;
+
+	snprintf(path, sizeof(path), "/dev/dahdi/spanmap/%s", span_string);
+	if (lstat(path, &stbuf) >= 0) {
+		int n;
+
+		if (! S_ISLNK(stbuf.st_mode)) {
+			error("span '%s' (%s) is not a symlink\n", span_string, path);
+			return -1;
+		}
+		n = readlink(path, spanstr, sizeof(spanstr));
+		if (n < 0) {
+			error("failed reading symlink '%s': %s\n", path, strerror(errno));
+			return -1;
+		}
+		spanstr[n] = '\0';
+		span_string = spanstr;
+	}
+	if (sscanf(span_string, "%i", &span) != 1) {
+		error("Span number should be a valid span number, not '%s'\n", span_string);
+		return -1;
+	}
+	if(span_string == spanstr) {
+		spanmap[span] = strdup(path);
+		printf("%s: %d -> %s\n", __func__, span, spanmap[span]);
+	}
+	return span;
+}
+
 int spanconfig(char *keyword, char *args)
 {
 	static char *realargs[10];
@@ -325,8 +360,8 @@
 		error("Incorrect number of arguments to 'span' (should be <spanno>,<timing>,<lbo>,<framing>,<coding>[, crc4 | yellow [, yellow]])\n");
 		return -1;
 	}
-	res = sscanf(realargs[0], "%i", &span);
-	if (res != 1) {
+	span = span_string2num(realargs[0]);
+	if (span < 0) {
 		error("Span number should be a valid span number, not '%s'\n", realargs[0]);
 		return -1;
 	}
@@ -1285,6 +1320,9 @@
 			lc[x].lineconfig & DAHDI_CONFIG_B8ZS ? "B8ZS" :
 			lc[x].lineconfig & DAHDI_CONFIG_HDB3 ? "HDB3" : "???"),
 		       lbostr[lc[x].lbo]);
+		if(spanmap[lc[x].span]) {
+			printf("\t-> %s\n", spanmap[lc[x].span]);
+		}
 	}
 	for (x=0;x<numdynamic;x++) {
 		printf("Dynamic span %d: driver %s, addr %s, channels %d, timing %d\n",

Modified: tools/team/tzafrir/sysfs/xpp/dahdi_pools
URL: http://svnview.digium.com/svn/dahdi/tools/team/tzafrir/sysfs/xpp/dahdi_pools?view=diff&rev=8655&r1=8654&r2=8655
==============================================================================
--- tools/team/tzafrir/sysfs/xpp/dahdi_pools (original)
+++ tools/team/tzafrir/sysfs/xpp/dahdi_pools Mon May 17 17:33:40 2010
@@ -10,9 +10,11 @@
 use strict;
 use File::Basename;
 BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/perl_modules"); }
+use Dahdi::Span;
 use Dahdi::Pool;
 
 my $poolbase = "/dev/dahdi/pool";
+my $spanmap = "/dev/dahdi/spanmap";
 
 sub make_path($) {
 	my $dir = shift || die;
@@ -24,6 +26,9 @@
 	print STDERR "Removing '$poolbase'\n";
 	system("rm -rf -- '$poolbase'");
 	die "$0: Failed removing '$poolbase' (status $?)" if $?;
+	print STDERR "Removing '$spanmap'\n";
+	system("rm -rf -- '$spanmap'");
+	die "$0: Failed removing '$spanmap' (status $?)" if $?;
 }
 
 sub list_pools() {
@@ -59,6 +64,39 @@
 	}
 }
 
+sub list_spanmaps() {
+	my @entries = glob "$spanmap/*";
+	print "\nSpan Map:\n";
+	foreach my $link (sort @entries) {
+		my $name = $link;
+		$name =~ s|$spanmap/||;
+		my $linkdest = readlink "$link";
+		if($linkdest) {
+			print "$name -> $linkdest\n";
+		}
+	}
+}
+
+sub create_spanmap($) {
+	my $span = shift || die;
+	my $hardware_id = $span->hardware_id;
+	my $location = $span->location;
+	my $span_id = $span->span_id;
+	my $num = $span->num;
+	my $link;
+	make_path "$spanmap";
+	if ($hardware_id) {
+		$link = sprintf "%s/%s(%s)", $spanmap, $hardware_id, $span_id;
+	}
+	if ($location) {
+		$link = sprintf "%s/%s(%s)", $spanmap, $location, $span_id;
+	}
+	if (defined $link) {
+		#print STDERR "symlink(\"$num\", \"$link\")\n";
+		symlink($num, $link) || die "$0: Failed symlink($num, $link): $!\n";
+	}
+}
+
 sub usage() {
 	die "Usage: $0 {list|create|delete}\n";
 }
@@ -67,14 +105,19 @@
 
 if($mode eq 'create') {
 	my @pools = Dahdi::Pool->get_pools;
+	my @spans = Dahdi::spans;
 	remove_tree();
 	foreach my $pool (@pools) {
 		process_pool($pool);
+	}
+	foreach my $span (@spans) {
+		create_spanmap($span);
 	}
 } elsif($mode eq 'delete') {
 	remove_tree();
 } elsif($mode eq 'list') {
 	list_pools;
+	list_spanmaps;
 } else {
 	usage;
 }

Modified: tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Config/Gen/System.pm
URL: http://svnview.digium.com/svn/dahdi/tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Config/Gen/System.pm?view=diff&rev=8655&r1=8654&r2=8655
==============================================================================
--- tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Config/Gen/System.pm (original)
+++ tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Config/Gen/System.pm Mon May 17 17:33:40 2010
@@ -125,8 +125,8 @@
 		$framing = 'cas';
 	}
 	$timing = ($termtype eq 'NT') ? 0 : $bri_te_last_timing++;
-	printf "span=%d,%d,%d,%s,%s%s%s%s%s\n",
-			$num,
+	printf "span=%s,%d,%d,%s,%s%s%s%s%s\n",
+			$span->unique_string,
 			$timing,
 			$lbo,
 			$framing,

Modified: tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Span.pm
URL: http://svnview.digium.com/svn/dahdi/tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Span.pm?view=diff&rev=8655&r1=8654&r2=8655
==============================================================================
--- tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Span.pm (original)
+++ tools/team/tzafrir/sysfs/xpp/perl_modules/Dahdi/Span.pm Mon May 17 17:33:40 2010
@@ -335,6 +335,12 @@
 	$self->{ALARMS} = $self->_get_dev_attr('alarms');
 	$self->{HARDWARE_ID} = $self->_get_dev_attr('hardware_id');
 	$self->{SPAN_ID} = $self->_get_dev_attr('span_id');
+	my $hwname = $self->{HARDWARE_ID} || $self->{LOCATION};
+	if (defined $hwname) {
+		$self->{UNIQUE_STRING} = sprintf "%s(%s)", $hwname, $self->{SPAN_ID};
+	} else {
+		$self->{UNIQUE_STRING} = $num;
+	}
 	if ($self->spantype =~ /^(TE|NT|BRI|BRI_(NT|TE))$/) {
 		# FIXME: BRI modules of wct24xxp?
 		$self->{IS_DIGITAL} = 1;




More information about the dahdi-commits mailing list