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.