DAHDI Extensions Setup Issue?

I’ve been reading many posts for a few nights now trying to figure this out, but cannot get the last piece working. My issue is that “channels” are not appearing in the freepbx “add dahdi extension” screen (the drop down list is empty) so I can’t map the available pots lines to extensions of my choosing.

Essentially I have channel bank setup that breaks out a few pots lines and want to set them up as individual extensions to play nice with my digital extensions all inside my location. The POTS stuff is all used for FXS lines and no POTS trunks are needed as it all shares a set of sip outbound/inbound routes from my voip provider.

The odd thing is the POTS line works in the sense that i can dial a digital extension and it rings. Audio in both directions is great. I can even dial out to the PSTN just fine (as can my digital lines). The only issue is i can’t figure out how to get the POTS lines reflected as “extensions” in the freepbx sense so i can setup other features for them as desired. Currently the one i’m testing shows up in the logs as “DAHDI/1-1”.

My config looks like this…

Ubuntu 11 - 64 bit
dahdi-linux-complete-2.5.0.2+2.5.0.2 (compiled from source)
Asterisk 1.8.8.0 (compiled from source)
FreePBX 2.9.0.7

Some of the relevant config is…

ZAP2DAHDICOMPAT=true

system.conf has…

loadzone = us
defaultzone = us

Span 1: TE110P

span=1,0,0,esf,b8zs
fxoks=1-24

dahdi-channels.conf has…

echotraining=0
rxgain=0.0
txgain=0.0
; Span 1: TE110P
group=0
context=from-internal
signalling = fxo_ks
channel => 1-24

CLI> dahdi show status
Description Alarms IRQ bpviol CRC Fra Codi Options LBO
Digium Wildcard TE110P T1/E1 Card 0 OK 48 0 0 ESF B8ZS 0 db (CSU)/0-133 feet (DSX-1)

CLI> dahdi show channels
Chan Extension Context Language MOH Interpret Blocked State
pseudo default default In Service
1 from-internal en default In Service
2 from-internal en default In Service
3 from-internal en default In Service
4 from-internal en default In Service
5 from-internal en default In Service
6 from-internal en default In Service
7 from-internal en default In Service
8 from-internal en default In Service
9 from-internal en default In Service
10 from-internal en default In Service
11 from-internal en default In Service
12 from-internal en default In Service
13 from-internal en default In Service
14 from-internal en default In Service
15 from-internal en default In Service
16 from-internal en default In Service
17 from-internal en default In Service
18 from-internal en default In Service
19 from-internal en default In Service
20 from-internal en default In Service
21 from-internal en default In Service
22 from-internal en default In Service
23 from-internal en default In Service
24 from-internal en default In Service

Here’s an example from the CLI when i pickup the pots line and dial a digital extension 101 which rings. I pickup the extension and hangup on both ends. Audio works perfect both ways. Not sure what to do with the WARNING indicated below as i see them periodically in the log.

-- Starting simple switch on 'DAHDI/1-1'
-- Executing [101@from-internal:1] ExecIf("DAHDI/1-1", "0?Set(__RINGTIMER=0)") in new stack
-- Executing [101@from-internal:2] Macro("DAHDI/1-1", "exten-vm,101,101,0,0,0") in new stack
-- Executing [s@macro-exten-vm:1] Macro("DAHDI/1-1", "user-callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("DAHDI/1-1", "AMPUSER=") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("DAHDI/1-1", "0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("DAHDI/1-1", "1?Set(REALCALLERIDNUM=)") in new stack
-- Executing [s@macro-user-callerid:4] Set("DAHDI/1-1", "AMPUSER=") in new stack
-- Executing [s@macro-user-callerid:5] Set("DAHDI/1-1", "AMPUSERCIDNAME=") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("DAHDI/1-1", "1?report") in new stack
-- Goto (macro-user-callerid,s,12)
-- Executing [s@macro-user-callerid:12] GotoIf("DAHDI/1-1", "0?continue") in new stack
-- Executing [s@macro-user-callerid:13] Set("DAHDI/1-1", "__TTL=64") in new stack
-- Executing [s@macro-user-callerid:14] GotoIf("DAHDI/1-1", "1?continue") in new stack
-- Goto (macro-user-callerid,s,25)
-- Executing [s@macro-user-callerid:25] Set("DAHDI/1-1", "CALLERID(number)=") in new stack
-- Executing [s@macro-user-callerid:26] Set("DAHDI/1-1", "CALLERID(name)=") in new stack
-- Executing [s@macro-user-callerid:27] Set("DAHDI/1-1", "CHANNEL(language)=en") in new stack
-- Executing [s@macro-exten-vm:2] Set("DAHDI/1-1", "RingGroupMethod=none") in new stack
-- Executing [s@macro-exten-vm:3] Set("DAHDI/1-1", "__EXTTOCALL=101") in new stack
-- Executing [s@macro-exten-vm:4] Set("DAHDI/1-1", "__PICKUPMARK=101") in new stack
-- Executing [s@macro-exten-vm:5] Set("DAHDI/1-1", "RT=15") in new stack
-- Executing [s@macro-exten-vm:6] Macro("DAHDI/1-1", "record-enable,101,IN") in new stack
-- Executing [s@macro-record-enable:1] GotoIf("DAHDI/1-1", "1?check") in new stack
-- Goto (macro-record-enable,s,4)
-- Executing [s@macro-record-enable:4] ExecIf("DAHDI/1-1", "0?MacroExit()") in new stack
-- Executing [s@macro-record-enable:5] GotoIf("DAHDI/1-1", "0?Group:OUT") in new stack
-- Goto (macro-record-enable,s,14)
-- Executing [s@macro-record-enable:14] GotoIf("DAHDI/1-1", "1?IN") in new stack
-- Goto (macro-record-enable,s,18)
-- Executing [s@macro-record-enable:18] ExecIf("DAHDI/1-1", "0?MacroExit()") in new stack
-- Executing [s@macro-record-enable:19] Set("DAHDI/1-1", "CALLFILENAME=20120103-191537-1325639735.6") in new stack

[Jan 3 19:15:37] WARNING[24731]: func_strings.c:1292 function_eval: EVAL requires an argument: EVAL()
– Executing [s@macro-record-enable:20] MixMonitor(“DAHDI/1-1”, “20120103-191537-1325639735.6.wav,”) in new stack
== Begin MixMonitor Recording DAHDI/1-1
– Executing [s@macro-record-enable:21] MacroExit(“DAHDI/1-1”, “”) in new stack
– Executing [s@macro-exten-vm:7] GotoIf(“DAHDI/1-1”, “1?macrodial”) in new stack
– Goto (macro-exten-vm,s,13)
– Executing [s@macro-exten-vm:13] GosubIf(“DAHDI/1-1”, “0?clrheader,1”) in new stack
– Executing [s@macro-exten-vm:14] Macro(“DAHDI/1-1”, “dial-one,15,tr,101”) in new stack
– Executing [s@macro-dial-one:1] Set(“DAHDI/1-1”, “DEXTEN=101”) in new stack
– Executing [s@macro-dial-one:2] Set(“DAHDI/1-1”, “DIALSTATUS_CW=”) in new stack
– Executing [s@macro-dial-one:3] GosubIf(“DAHDI/1-1”, “0?screen,1”) in new stack
– Executing [s@macro-dial-one:4] GosubIf(“DAHDI/1-1”, “0?cf,1”) in new stack
– Executing [s@macro-dial-one:5] GotoIf(“DAHDI/1-1”, “1?skip1”) in new stack
– Goto (macro-dial-one,s,8)
– Executing [s@macro-dial-one:8] GotoIf(“DAHDI/1-1”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:9] GotoIf(“DAHDI/1-1”, “0?continue”) in new stack
– Executing [s@macro-dial-one:10] Set(“DAHDI/1-1”, “EXTHASCW=ENABLED”) in new stack
– Executing [s@macro-dial-one:11] GotoIf(“DAHDI/1-1”, “0?next1:cwinusebusy”) in new stack
– Goto (macro-dial-one,s,23)
– Executing [s@macro-dial-one:23] GotoIf(“DAHDI/1-1”, “1?next3:continue”) in new stack
– Goto (macro-dial-one,s,24)
– Executing [s@macro-dial-one:24] ExecIf(“DAHDI/1-1”, “0?Set(DIALSTATUS_CW=BUSY)”) in new stack
– Executing [s@macro-dial-one:25] GotoIf(“DAHDI/1-1”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:26] GosubIf(“DAHDI/1-1”, “1?dstring,1:dlocal,1”) in new stack
– Executing [dstring@macro-dial-one:1] Set(“DAHDI/1-1”, “DSTRING=”) in new stack
– Executing [dstring@macro-dial-one:2] Set(“DAHDI/1-1”, “DEVICES=101”) in new stack
– Executing [dstring@macro-dial-one:3] ExecIf(“DAHDI/1-1”, “0?Return()”) in new stack
– Executing [dstring@macro-dial-one:4] ExecIf(“DAHDI/1-1”, “0?Set(DEVICES=01)”) in new stack
– Executing [dstring@macro-dial-one:5] Set(“DAHDI/1-1”, “LOOPCNT=1”) in new stack
– Executing [dstring@macro-dial-one:6] Set(“DAHDI/1-1”, “ITER=1”) in new stack
– Executing [dstring@macro-dial-one:7] Set(“DAHDI/1-1”, “THISDIAL=SIP/101”) in new stack
– Executing [dstring@macro-dial-one:8] GosubIf(“DAHDI/1-1”, “1?zap2dahdi,1”) in new stack
– Executing [zap2dahdi@macro-dial-one:1] ExecIf(“DAHDI/1-1”, “0?Return()”) in new stack
– Executing [zap2dahdi@macro-dial-one:2] Set(“DAHDI/1-1”, “NEWDIAL=”) in new stack
– Executing [zap2dahdi@macro-dial-one:3] Set(“DAHDI/1-1”, “LOOPCNT2=1”) in new stack
– Executing [zap2dahdi@macro-dial-one:4] Set(“DAHDI/1-1”, “ITER2=1”) in new stack
– Executing [zap2dahdi@macro-dial-one:5] Set(“DAHDI/1-1”, “THISPART2=SIP/101”) in new stack
– Executing [zap2dahdi@macro-dial-one:6] ExecIf(“DAHDI/1-1”, “0?Set(THISPART2=DAHDI/101)”) in new stack
– Executing [zap2dahdi@macro-dial-one:7] Set(“DAHDI/1-1”, “NEWDIAL=SIP/101&”) in new stack
– Executing [zap2dahdi@macro-dial-one:8] Set(“DAHDI/1-1”, “ITER2=2”) in new stack
– Executing [zap2dahdi@macro-dial-one:9] GotoIf(“DAHDI/1-1”, “0?begin2”) in new stack
– Executing [zap2dahdi@macro-dial-one:10] Set(“DAHDI/1-1”, “THISDIAL=SIP/101”) in new stack
– Executing [zap2dahdi@macro-dial-one:11] Return(“DAHDI/1-1”, “”) in new stack
– Executing [dstring@macro-dial-one:9] Set(“DAHDI/1-1”, “DSTRING=SIP/101&”) in new stack
– Executing [dstring@macro-dial-one:10] Set(“DAHDI/1-1”, “ITER=2”) in new stack
– Executing [dstring@macro-dial-one:11] GotoIf(“DAHDI/1-1”, “0?begin”) in new stack
– Executing [dstring@macro-dial-one:12] Set(“DAHDI/1-1”, “DSTRING=SIP/101”) in new stack
– Executing [dstring@macro-dial-one:13] Return(“DAHDI/1-1”, “”) in new stack
– Executing [s@macro-dial-one:27] GotoIf(“DAHDI/1-1”, “0?nodial”) in new stack
– Executing [s@macro-dial-one:28] GotoIf(“DAHDI/1-1”, “1?skiptrace”) in new stack
– Goto (macro-dial-one,s,30)
– Executing [s@macro-dial-one:30] Set(“DAHDI/1-1”, “D_OPTIONS=tr”) in new stack
– Executing [s@macro-dial-one:31] ExecIf(“DAHDI/1-1”, “0?SIPAddHeader(Alert-Info: )”) in new stack
– Executing [s@macro-dial-one:32] ExecIf(“DAHDI/1-1”, “0?SIPAddHeader()”) in new stack
– Executing [s@macro-dial-one:33] ExecIf(“DAHDI/1-1”, “0?Set(CHANNEL(musicclass)=)”) in new stack
– Executing [s@macro-dial-one:34] GosubIf(“DAHDI/1-1”, “0?qwait,1”) in new stack
– Executing [s@macro-dial-one:35] Set(“DAHDI/1-1”, “__CWIGNORE=”) in new stack
– Executing [s@macro-dial-one:36] Set(“DAHDI/1-1”, “__KEEPCID=TRUE”) in new stack
– Executing [s@macro-dial-one:37] GotoIf(“DAHDI/1-1”, “0?usegoto,1”) in new stack
– Executing [s@macro-dial-one:38] GotoIf(“DAHDI/1-1”, “0?godial”) in new stack
– Executing [s@macro-dial-one:39] Set(“DAHDI/1-1”, “CONNECTEDLINE(name,i)=School Room”) in new stack
– Executing [s@macro-dial-one:40] Set(“DAHDI/1-1”, “CONNECTEDLINE(num)=101”) in new stack
– Executing [s@macro-dial-one:41] Set(“DAHDI/1-1”, “D_OPTIONS=trI”) in new stack
– Executing [s@macro-dial-one:42] Dial(“DAHDI/1-1”, “SIP/101,15,trI”) in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
– Called SIP/101
– Connected line update to DAHDI/1-1 prevented.
– SIP/101-00000001 is ringing
– Connected line update to DAHDI/1-1 prevented.
– SIP/101-00000001 answered DAHDI/1-1
– Executing [h@macro-dial-one:1] Macro(“DAHDI/1-1”, “hangupcall,”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“DAHDI/1-1”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,3)
– Executing [s@macro-hangupcall:3] Hangup(“DAHDI/1-1”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 3) exited non-zero on ‘DAHDI/1-1’ in macro ‘hangupcall’
== Spawn extension (macro-dial-one, h, 1) exited non-zero on ‘DAHDI/1-1’
== Spawn extension (macro-dial-one, s, 42) exited non-zero on ‘DAHDI/1-1’ in macro ‘dial-one’
== Spawn extension (macro-exten-vm, s, 14) exited non-zero on ‘DAHDI/1-1’ in macro ‘exten-vm’
== Spawn extension (from-internal, 101, 2) exited non-zero on ‘DAHDI/1-1’
– Hanging up on ‘DAHDI/1-1’
– Hungup ‘DAHDI/1-1’

I’ll add that observing the CLI upon a reload within FreePBX reveals these warnings with the last one repeated for all 24 channels…

WARNING[32524]: chan_dahdi.c:17772 process_dahdi: Ignoring any changes to ‘signalling’ (on reload) at line 18.
WARNING[32524]: chan_dahdi.c:12529 mkintf: Attempt to configure channel 1 with signaling Unknown signalling -1 ignored because it is already configured to be FXO Kewlstart.

thanks for any insights or help.

Maybe i should ask the question, has anyone used freePBX 2.9 to successfully add dahdi extensions or is there a preferred method?

It looks like there is some issue with meetme installation with asterisk. There could be many resons like missing dahdi timing source and couple of others, but first you need to check if meetme module is loaded and working or not. Go to asteris CLI and try these commands:

localhost*CLI> core show application MeetMe

If meetme is available it should print a detailed description. Also issue “module show like app_meetme.so” command and if meetme module is available then you should see output like below:

localhost*CLI> module show like app_meetme.so
Module Description Use Count
app_meetme.so MeetMe conference bridge 0
1 modules loaded

thanks for the reply… yes meetme appears loaded…

CLI> core show application MeetMe

-= Info about application ‘MeetMe’ =-

[Synopsis]
MeetMe conference bridge.

CLI> module show like app_meetme.so
Module Description Use Count
app_meetme.so MeetMe conference bridge 0
1 modules loaded