diff options
author | Shaun Ruffell <sruffell@digium.com> | 2012-03-21 18:56:21 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2012-03-21 18:56:21 +0000 |
commit | 7138ef6d7d7ed536d440da8df79f1a4258044291 (patch) | |
tree | d3087a95ee87cb4be4520288a830bfd2f227a7d7 /drivers | |
parent | 2c49c835a59fb20af8e29d8254ebf14d65587678 (diff) |
dahdi_dynamic: Since dynamic devices are 'parentless' we must name them.
This in conjunction with r10449 "A parent-less device should not crash dahdi",
this allows dahdi_dynamic spans to work post the dahdi_devices changes in
2.6.0.
The full address of the device is not used since kernels prior to 2.6.31 limit
the length of a devicename to 20 characters. The full address of the device
can be pulled out of the "hardware_id" and "type" fields of the span.
This patch is just to get things working again. dahdi_dynamic devices *may*
still have issues if the auto_assign_spans module parameter is 0.
Internal-Issue-ID: DAHLIN-280
Reported-by: Pavel Selivanov
Signed-off-by: Shaun Ruffell <sruffell@digium.com>
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10563 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/dahdi/dahdi_dynamic.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/dahdi/dahdi_dynamic.c b/drivers/dahdi/dahdi_dynamic.c index 1c80ff2..79c8bba 100644 --- a/drivers/dahdi/dahdi_dynamic.c +++ b/drivers/dahdi/dahdi_dynamic.c @@ -600,9 +600,10 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds) strlcpy(d->dname, dds->driver, sizeof(d->dname)); strlcpy(d->addr, dds->addr, sizeof(d->addr)); d->timing = dds->timing; - sprintf(d->span.name, "DYN/%s/%s", dds->driver, dds->addr); - sprintf(d->span.desc, "Dynamic '%s' span at '%s'", - dds->driver, dds->addr); + snprintf(d->span.name, sizeof(d->span.name), "DYN/%s/%s", + dds->driver, dds->addr); + snprintf(d->span.desc, sizeof(d->span.desc), + "Dynamic '%s' span at '%s'", dds->driver, dds->addr); d->span.deflaw = DAHDI_LAW_MULAW; d->span.flags |= DAHDI_FLAG_RBS; d->span.chans = d->chans; @@ -653,6 +654,9 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds) return res; } + d->ddev->devicetype = d->span.name; + d->ddev->hardware_id = d->span.name; + dev_set_name(&d->ddev->dev, "dynamic:%s:%d", dds->driver, dtd->id++); list_add_tail(&d->span.device_node, &d->ddev->spans); /* Whee! We're created. Now register the span */ if (dahdi_register_device(d->ddev, d->dev)) { |