dahdi_cfg 的作用

使用Asterisk 的chan_dahdi 时必须用到的一个命令是dahdi_cfg ,我很好奇dahdi_cfg 这个命令里面究竟做了些什么,有句话说:源码面前了无秘密!本篇从源码角度分析理解 dahdi_cfg 的作用。

dahdi_cfg 的源码在 dahdi-tools-2.11.1\dahdi_cfg.c 里。
先看两个宏定义:
在这里插入图片描述
可以猜测出 dahi_cfg 是读取/etc/dahdi/system.conf 文件内容,并通过 /dev/dahdi/ctl 将配置写入到dahdi 驱动中。

我们来跟踪一下:
在这里插入图片描述在这里插入图片描述
这里面打开 /etc/dahdi/system.conf 文件,并逐行读取数据,取 = 号左边的字符串与 handlers 数组的keyword进行匹配,执行对应的func.

handers 数组定义如下,可以看到支持的关键字有下面这些。
在这里插入图片描述
在这里插入图片描述
再来看之前 /etc/dahdi/system.conf 的内容,来看每一行的作用。

loadzone=cn
defaultzone=cn
fxsks=1
echocanceller=OSLEC,1

loadzone=cn

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中 tone_zone_find 根据国家字母,在 builtin_zones 数组中 查找匹配的 tone_zone数据,builtin_zones 定义在 dahdi-tools-2.11.1\zonedata.c 中,截取如下:
在这里插入图片描述
tone_zone_register_zone 的核心部分截取如下:
其调用了
ioctl(fd, DAHDI_FREEZONE, &x)
ioctl(fd, DAHDI_LOADZONE, &h)
在这里插入图片描述
同样的跟踪方法,可以看出
defaultzone=cn
ioctl(fd, DAHDI_DEFAULTZONE, &deftonezone)

fxsks=1
ioctl(fd, DAHDI_CHANCONFIG, &cc[x])

echocanceller=OSLEC,1
ioctl(fd, DAHDI_ATTACH_ECHOCAN, &ae[x])

总的来说其实就是通过 /dev/dahdi/ctl 的 ioctl 接口来对dahdi 驱动进行配置。

发布了63 篇原创文章 · 获赞 20 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/agave7/article/details/91042668
cfg