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 驅動進行配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章