This source file includes following definitions.
- sngisdn_stack_cfg
- sngisdn_stack_cfg_phy_gen
- sngisdn_stack_cfg_phy_psap
- sngisdn_stack_cfg_q921_gen
- sngisdn_stack_cfg_q921_msap
- sngisdn_stack_cfg_q921_dlsap
- sngisdn_stack_cfg_q931_gen
- sngisdn_stack_cfg_q931_tsap
- sngisdn_stack_cfg_q931_dlsap
- sngisdn_stack_cfg_q931_lce
- sngisdn_stack_cfg_cc_gen
- sngisdn_stack_cfg_cc_sap
- stack_pst_init
- stack_hdr_init
- sng_isdn_stack_switchtype
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include "ftmod_sangoma_isdn.h"
36
37 extern ftdm_sngisdn_data_t g_sngisdn_data;
38
39 uint8_t sng_isdn_stack_switchtype(sngisdn_switchtype_t switchtype);
40
41 ftdm_status_t sngisdn_cfg_phy(ftdm_span_t *span);
42 ftdm_status_t sngisdn_cfg_q921(ftdm_span_t *span);
43 ftdm_status_t sngisdn_cfg_q931(ftdm_span_t *span);
44 ftdm_status_t sngisdn_cfg_cc(ftdm_span_t *span);
45
46 ftdm_status_t sngisdn_stack_cfg_phy_gen(void);
47 ftdm_status_t sngisdn_stack_cfg_q921_gen(void);
48 ftdm_status_t sngisdn_stack_cfg_q931_gen(void);
49 ftdm_status_t sngisdn_stack_cfg_cc_gen(void);
50
51
52 ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span);
53 ftdm_status_t sngisdn_stack_cfg_q921_msap(ftdm_span_t *span);
54 ftdm_status_t sngisdn_stack_cfg_q921_dlsap(ftdm_span_t *span, uint8_t management);
55 ftdm_status_t sngisdn_stack_cfg_q931_tsap(ftdm_span_t *span);
56 ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span);
57 ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span);
58
59 ftdm_status_t sngisdn_stack_cfg_cc_sap(ftdm_span_t *span);
60
61 ftdm_status_t sngisdn_stack_cfg(ftdm_span_t *span)
62 {
63 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
64
65 if (!g_sngisdn_data.gen_config_done) {
66 g_sngisdn_data.gen_config_done = 1;
67 ftdm_log(FTDM_LOG_DEBUG, "Starting general stack configuration\n");
68 if(sngisdn_stack_cfg_phy_gen()!= FTDM_SUCCESS) {
69 ftdm_log(FTDM_LOG_CRIT, "Failed general physical configuration\n");
70 return FTDM_FAIL;
71 }
72 ftdm_log(FTDM_LOG_DEBUG, "General stack physical done\n");
73
74 if(sngisdn_stack_cfg_q921_gen()!= FTDM_SUCCESS) {
75 ftdm_log(FTDM_LOG_CRIT, "Failed general q921 configuration\n");
76 return FTDM_FAIL;
77 }
78 ftdm_log(FTDM_LOG_DEBUG, "General stack q921 done\n");
79
80 if(sngisdn_stack_cfg_q931_gen()!= FTDM_SUCCESS) {
81 ftdm_log(FTDM_LOG_CRIT, "Failed general q921 configuration\n");
82 return FTDM_FAIL;
83 }
84 ftdm_log(FTDM_LOG_DEBUG, "General stack q931 done\n");
85
86 if(sngisdn_stack_cfg_cc_gen()!= FTDM_SUCCESS) {
87 ftdm_log(FTDM_LOG_CRIT, "Failed general CC configuration\n");
88 return FTDM_FAIL;
89 }
90 ftdm_log(FTDM_LOG_DEBUG, "General stack CC done\n");
91 ftdm_log(FTDM_LOG_INFO, "General stack configuration done\n");
92 }
93
94
95 if (sngisdn_stack_cfg_phy_psap(span) != FTDM_SUCCESS) {
96 ftdm_log(FTDM_LOG_ERROR, "%s:phy_psap configuration failed\n", span->name);
97 return FTDM_FAIL;
98 }
99 ftdm_log(FTDM_LOG_DEBUG, "%s:phy_psap configuration done\n", span->name);
100
101 if (sngisdn_stack_cfg_q921_msap(span) != FTDM_SUCCESS) {
102 ftdm_log(FTDM_LOG_ERROR, "%s:q921_msap configuration failed\n", span->name);
103 return FTDM_FAIL;
104 }
105 ftdm_log(FTDM_LOG_DEBUG, "%s:q921_msap configuration done\n", span->name);
106
107 if (sngisdn_stack_cfg_q921_dlsap(span, 0) != FTDM_SUCCESS) {
108 ftdm_log(FTDM_LOG_ERROR, "%s:q921_dlsap configuration failed\n", span->name);
109 return FTDM_FAIL;
110 }
111 ftdm_log(FTDM_LOG_DEBUG, "%s:q921_dlsap configuration done\n", span->name);
112
113 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
114 if (sngisdn_stack_cfg_q921_dlsap(span, 1) != FTDM_SUCCESS) {
115 ftdm_log(FTDM_LOG_ERROR, "%s:q921_dlsap management configuration failed\n", span->name);
116 return FTDM_FAIL;
117 }
118 ftdm_log(FTDM_LOG_DEBUG, "%s:q921_dlsap management configuration done\n", span->name);
119 }
120
121
122 if (sngisdn_stack_cfg_q931_dlsap(span) != FTDM_SUCCESS) {
123 ftdm_log(FTDM_LOG_ERROR, "%s:q931_dlsap configuration failed\n", span->name);
124 return FTDM_FAIL;
125 }
126 ftdm_log(FTDM_LOG_DEBUG, "%s:q931_dlsap configuration done\n", span->name);
127
128 if (sngisdn_stack_cfg_q931_lce(span) != FTDM_SUCCESS) {
129 ftdm_log(FTDM_LOG_ERROR, "%s:q931_lce configuration failed\n", span->name);
130 return FTDM_FAIL;
131 }
132 ftdm_log(FTDM_LOG_DEBUG, "%s:q931_lce configuration done\n", span->name);
133
134 if (!g_sngisdn_data.ccs[signal_data->cc_id].config_done) {
135 g_sngisdn_data.ccs[signal_data->cc_id].config_done = 1;
136
137 if (sngisdn_stack_cfg_q931_tsap(span) != FTDM_SUCCESS) {
138 ftdm_log(FTDM_LOG_ERROR, "%s:q931_tsap configuration failed\n", span->name);
139 return FTDM_FAIL;
140 }
141 ftdm_log(FTDM_LOG_DEBUG, "%s:q931_tsap configuration done\n", span->name);
142
143 if (sngisdn_stack_cfg_cc_sap(span) != FTDM_SUCCESS) {
144 ftdm_log(FTDM_LOG_ERROR, "%s:cc_sap configuration failed\n", span->name);
145 return FTDM_FAIL;
146 }
147 ftdm_log(FTDM_LOG_DEBUG, "%s:cc_sap configuration done\n", span->name);
148 }
149
150 ftdm_log(FTDM_LOG_INFO, "%s:stack configuration done\n", span->name);
151 return FTDM_SUCCESS;
152 }
153
154
155
156 ftdm_status_t sngisdn_stack_cfg_phy_gen(void)
157 {
158
159 L1Mngmt cfg;
160 Pst pst;
161
162
163 stack_pst_init(&pst);
164
165
166 pst.dstEnt = ENTL1;
167
168
169 memset(&cfg, 0, sizeof(cfg));
170
171
172 stack_hdr_init(&cfg.hdr);
173
174
175 cfg.hdr.msgType = TCFG;
176 cfg.hdr.entId.ent = ENTL1;
177 cfg.hdr.entId.inst = S_INST;
178 cfg.hdr.elmId.elmnt = STGEN;
179
180 stack_pst_init(&cfg.t.cfg.s.l1Gen.sm );
181 cfg.t.cfg.s.l1Gen.sm.srcEnt = ENTL1;
182 cfg.t.cfg.s.l1Gen.sm.dstEnt = ENTSM;
183
184 cfg.t.cfg.s.l1Gen.nmbLnks = MAX_L1_LINKS;
185 cfg.t.cfg.s.l1Gen.poolTrUpper = POOL_UP_TR;
186 cfg.t.cfg.s.l1Gen.poolTrLower = POOL_LW_TR;
187
188 if (sng_isdn_phy_config(&pst, &cfg)) {
189 return FTDM_FAIL;
190 }
191 return FTDM_SUCCESS;
192 }
193
194 ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span)
195 {
196 L1Mngmt cfg;
197 Pst pst;
198
199 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
200
201
202 stack_pst_init(&pst);
203
204
205 pst.dstEnt = ENTL1;
206
207
208 memset(&cfg, 0, sizeof(cfg));
209
210
211 stack_hdr_init(&cfg.hdr);
212
213
214 cfg.hdr.msgType = TCFG;
215 cfg.hdr.entId.ent = ENTL1;
216 cfg.hdr.entId.inst = S_INST;
217 cfg.hdr.elmId.elmnt = STPSAP;
218
219 cfg.hdr.elmId.elmntInst1 = signal_data->dchan_id;
220
221 if (!signal_data->dchan) {
222 ftdm_log(FTDM_LOG_ERROR, "%s:No d-channels specified\n", span->name);
223 return FTDM_FAIL;
224 }
225
226 cfg.t.cfg.s.l1PSAP.sockfd = (int32_t)signal_data->dchan->sockfd;
227
228 switch(span->trunk_type) {
229 case FTDM_TRUNK_E1:
230 cfg.t.cfg.s.l1PSAP.type = SNG_L1_TYPE_PRI;
231 break;
232 case FTDM_TRUNK_T1:
233 case FTDM_TRUNK_J1:
234 cfg.t.cfg.s.l1PSAP.type = SNG_L1_TYPE_PRI;
235 break;
236 case FTDM_TRUNK_BRI:
237 case FTDM_TRUNK_BRI_PTMP:
238 cfg.t.cfg.s.l1PSAP.type = SNG_L1_TYPE_BRI;
239 break;
240 default:
241 ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported trunk type %d\n", span->name, span->trunk_type);
242 return FTDM_FAIL;
243 }
244
245 cfg.t.cfg.s.l1PSAP.spId = signal_data->dchan_id;
246
247 if (sng_isdn_phy_config(&pst, &cfg)) {
248 return FTDM_FAIL;
249 }
250 return FTDM_SUCCESS;
251 }
252
253
254 ftdm_status_t sngisdn_stack_cfg_q921_gen(void)
255 {
256 BdMngmt cfg;
257 Pst pst;
258
259
260 stack_pst_init(&pst);
261
262 pst.dstEnt = ENTLD;
263
264
265 memset(&cfg, 0, sizeof(cfg));
266
267 stack_hdr_init(&cfg.hdr);
268
269 cfg.hdr.msgType = TCFG;
270 cfg.hdr.entId.ent = ENTLD;
271 cfg.hdr.entId.inst = S_INST;
272 cfg.hdr.elmId.elmnt = STGEN;
273
274
275 stack_pst_init(&cfg.t.cfg.s.bdGen.sm);
276
277 cfg.t.cfg.s.bdGen.sm.dstEnt = ENTSM;
278
279 cfg.t.cfg.s.bdGen.nmbPLnks = MAX_L1_LINKS+1;
280 cfg.t.cfg.s.bdGen.nmbLDLnks = MAX_L1_LINKS+1;
281 cfg.t.cfg.s.bdGen.nmbDLCs = MAX_L1_LINKS+1;
282 cfg.t.cfg.s.bdGen.nmbDLCs = MAX_TEIS_PER_LINK*(MAX_L1_LINKS+1);
283 cfg.t.cfg.s.bdGen.nmbASPLnks = MAX_L1_LINKS+1;
284
285 #ifdef LAPD_3_4
286 cfg.t.cfg.s.bdGen.timeRes = 100;
287 #endif
288 cfg.t.cfg.s.bdGen.poolTrUpper = 2;
289 cfg.t.cfg.s.bdGen.poolTrLower = 1;
290
291 if (sng_isdn_q921_config(&pst, &cfg)) {
292 return FTDM_FAIL;
293 }
294 return FTDM_SUCCESS;
295 }
296
297 ftdm_status_t sngisdn_stack_cfg_q921_msap(ftdm_span_t *span)
298 {
299 BdMngmt cfg;
300 Pst pst;
301
302 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
303
304
305 stack_pst_init(&pst);
306
307 pst.dstEnt = ENTLD;
308
309
310 memset(&cfg, 0, sizeof(cfg));
311
312 stack_hdr_init(&cfg.hdr);
313
314 cfg.hdr.msgType = TCFG;
315 cfg.hdr.entId.ent = ENTLD;
316 cfg.hdr.entId.inst = S_INST;
317 cfg.hdr.elmId.elmnt = STMSAP;
318
319 cfg.t.cfg.s.bdMSAP.lnkNmb = signal_data->dchan_id;
320
321 cfg.t.cfg.s.bdMSAP.maxOutsFrms = 24;
322 cfg.t.cfg.s.bdMSAP.tQUpperTrs = 32;
323 cfg.t.cfg.s.bdMSAP.tQLowerTrs = 24;
324 cfg.t.cfg.s.bdMSAP.selector = 0;
325
326 cfg.t.cfg.s.bdMSAP.mem.region = S_REG;
327 cfg.t.cfg.s.bdMSAP.mem.pool = S_POOL;
328 cfg.t.cfg.s.bdMSAP.prior = PRIOR0;
329 cfg.t.cfg.s.bdMSAP.route = RTESPEC;
330 cfg.t.cfg.s.bdMSAP.dstProcId = SFndProcId();
331 cfg.t.cfg.s.bdMSAP.dstEnt = ENTL1;
332 cfg.t.cfg.s.bdMSAP.dstInst = S_INST;
333 cfg.t.cfg.s.bdMSAP.t201Tmr = 1;
334 cfg.t.cfg.s.bdMSAP.t202Tmr = 2;
335 cfg.t.cfg.s.bdMSAP.bndRetryCnt = 2;
336 cfg.t.cfg.s.bdMSAP.tIntTmr = 200;
337 cfg.t.cfg.s.bdMSAP.n202 = 3;
338 cfg.t.cfg.s.bdMSAP.lowTei = 64;
339
340 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP &&
341 signal_data->signalling == SNGISDN_SIGNALING_NET) {
342 cfg.t.cfg.s.bdMSAP.kpL1Up = FALSE;
343 } else {
344 cfg.t.cfg.s.bdMSAP.kpL1Up = TRUE;
345 }
346
347 switch(signal_data->switchtype) {
348 case SNGISDN_SWITCH_NI2:
349 case SNGISDN_SWITCH_5ESS:
350 case SNGISDN_SWITCH_4ESS:
351 case SNGISDN_SWITCH_DMS100:
352 cfg.t.cfg.s.bdMSAP.type = SW_NI2;
353 break;
354 case SNGISDN_SWITCH_INSNET:
355 cfg.t.cfg.s.bdMSAP.type = SW_CCITT;
356 break;
357 case SNGISDN_SWITCH_EUROISDN:
358 case SNGISDN_SWITCH_QSIG:
359 cfg.t.cfg.s.bdMSAP.type = SW_ETSI;
360 break;
361 }
362
363 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
364 cfg.t.cfg.s.bdMSAP.teiChkTmr = 20;
365 } else {
366 cfg.t.cfg.s.bdMSAP.teiChkTmr = 0;
367 }
368
369 if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
370 cfg.t.cfg.s.bdMSAP.logInt = 1;
371 cfg.t.cfg.s.bdMSAP.setUpArb = PASSIVE;
372 } else {
373 cfg.t.cfg.s.bdMSAP.logInt = 0;
374 cfg.t.cfg.s.bdMSAP.setUpArb = ACTIVE;
375 }
376
377
378 if (signal_data->setup_arb == SNGISDN_OPT_TRUE) {
379 cfg.t.cfg.s.bdMSAP.setUpArb = ACTIVE;
380 } else if (signal_data->setup_arb == SNGISDN_OPT_FALSE) {
381 cfg.t.cfg.s.bdMSAP.setUpArb = PASSIVE;
382 }
383
384 if (sng_isdn_q921_config(&pst, &cfg)) {
385 return FTDM_FAIL;
386 }
387 return FTDM_SUCCESS;
388 }
389
390 ftdm_status_t sngisdn_stack_cfg_q921_dlsap(ftdm_span_t *span, uint8_t management)
391 {
392 BdMngmt cfg;
393 Pst pst;
394
395 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
396
397 stack_pst_init(&pst);
398
399 pst.dstEnt = ENTLD;
400
401
402 memset(&cfg, 0, sizeof(cfg));
403
404 stack_hdr_init(&cfg.hdr);
405
406
407 cfg.hdr.msgType = TCFG;
408 cfg.hdr.entId.ent = ENTLD;
409 cfg.hdr.entId.inst = S_INST;
410 cfg.hdr.elmId.elmnt = STDLSAP;
411
412 cfg.t.cfg.s.bdDLSAP.lnkNmb = signal_data->dchan_id;
413
414 cfg.t.cfg.s.bdDLSAP.n201 = 1028;
415 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
416 span->trunk_type == FTDM_TRUNK_BRI) {
417
418 cfg.t.cfg.s.bdDLSAP.k = 1;
419 } else {
420 cfg.t.cfg.s.bdDLSAP.k = 7;
421 }
422
423 cfg.t.cfg.s.bdDLSAP.n200 = 3;
424 cfg.t.cfg.s.bdDLSAP.congTmr = 300;
425 cfg.t.cfg.s.bdDLSAP.t200Tmr = 1;
426 cfg.t.cfg.s.bdDLSAP.t203Tmr = 10;
427 cfg.t.cfg.s.bdDLSAP.mod = 128;
428 cfg.t.cfg.s.bdDLSAP.selector = 0;
429 cfg.t.cfg.s.bdDLSAP.mem.region = S_REG;
430 cfg.t.cfg.s.bdDLSAP.mem.pool = S_POOL;
431 cfg.t.cfg.s.bdDLSAP.prior = PRIOR0;
432 cfg.t.cfg.s.bdDLSAP.route = RTESPEC;
433
434 if (management) {
435 cfg.t.cfg.s.bdDLSAP.sapi = MNGMT_SAPI;
436 cfg.t.cfg.s.bdDLSAP.teiAss = NON_AUTOMATIC;
437 cfg.t.cfg.s.bdDLSAP.noOfDlc = 1;
438 cfg.t.cfg.s.bdDLSAP.tei[0] = 0x7f;
439 } else {
440 cfg.t.cfg.s.bdDLSAP.sapi = Q930_SAPI;
441 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
442 if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
443 cfg.t.cfg.s.bdDLSAP.teiAss = AUTOMATIC;
444 cfg.t.cfg.s.bdDLSAP.noOfDlc = 8;
445
446 cfg.t.cfg.s.bdDLSAP.tei[0] = 64;
447 cfg.t.cfg.s.bdDLSAP.tei[1] = 65;
448 cfg.t.cfg.s.bdDLSAP.tei[2] = 66;
449 cfg.t.cfg.s.bdDLSAP.tei[3] = 67;
450 cfg.t.cfg.s.bdDLSAP.tei[4] = 68;
451 cfg.t.cfg.s.bdDLSAP.tei[5] = 69;
452 cfg.t.cfg.s.bdDLSAP.tei[6] = 70;
453 cfg.t.cfg.s.bdDLSAP.tei[7] = 71;
454 } else {
455 cfg.t.cfg.s.bdDLSAP.teiAss = AUTOMATIC;
456 cfg.t.cfg.s.bdDLSAP.noOfDlc = 1;
457 }
458 } else {
459
460 cfg.t.cfg.s.bdDLSAP.teiAss = NON_AUTOMATIC;
461 cfg.t.cfg.s.bdDLSAP.noOfDlc = 1;
462 cfg.t.cfg.s.bdDLSAP.tei[0] = signal_data->tei;
463 }
464 }
465
466 if (sng_isdn_q921_config(&pst, &cfg)) {
467 return FTDM_FAIL;
468 }
469 return FTDM_SUCCESS;
470 }
471
472 ftdm_status_t sngisdn_stack_cfg_q931_gen(void)
473 {
474 InMngmt cfg;
475 Pst pst;
476
477
478 stack_pst_init(&pst);
479
480
481 pst.dstEnt = ENTIN;
482
483
484 memset(&cfg, 0, sizeof(cfg));
485
486
487 stack_hdr_init(&cfg.hdr);
488
489
490 cfg.hdr.msgType = TCFG;
491 cfg.hdr.entId.ent = ENTIN;
492 cfg.hdr.entId.inst = S_INST;
493 cfg.hdr.elmId.elmnt = STGEN;
494
495
496 stack_pst_init(&cfg.t.cfg.s.inGen.sm);
497
498 cfg.t.cfg.s.inGen.nmbSaps = MAX_VARIANTS+1;
499
500 cfg.t.cfg.s.inGen.nmbLnks = MAX_L1_LINKS+1;
501 cfg.t.cfg.s.inGen.nmbSigLnks = MAX_L1_LINKS+1;
502
503
504 cfg.t.cfg.s.inGen.nmbCes = (MAX_L1_LINKS+1)*MAX_NUM_CES_PER_LINK;
505
506 cfg.t.cfg.s.inGen.nmbCalRef = MAX_NUM_CALLS;
507
508 cfg.t.cfg.s.inGen.nmbBearer = NUM_E1_CHANNELS_PER_SPAN*(MAX_L1_LINKS+1);
509
510 cfg.t.cfg.s.inGen.nmbRouts = 0;
511
512 cfg.t.cfg.s.inGen.nmbProfiles = 0;
513
514 cfg.t.cfg.s.inGen.poolTrUpper = INGEN_POOL_UP_TR;
515
516 cfg.t.cfg.s.inGen.timeRes = 100;
517
518 cfg.t.cfg.s.inGen.sm.dstEnt = ENTSM;
519
520 if (sng_isdn_q931_config(&pst, &cfg)) {
521 return FTDM_FAIL;
522 }
523 return FTDM_SUCCESS;
524 }
525
526
527 ftdm_status_t sngisdn_stack_cfg_q931_tsap(ftdm_span_t *span)
528 {
529 InMngmt cfg;
530 Pst pst;
531 unsigned i;
532 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
533
534 stack_pst_init(&pst);
535
536
537 pst.dstEnt = ENTIN;
538
539
540 memset(&cfg, 0, sizeof(cfg));
541
542
543 stack_hdr_init(&cfg.hdr);
544
545
546 cfg.hdr.msgType = TCFG;
547 cfg.hdr.entId.ent = ENTIN;
548 cfg.hdr.entId.inst = S_INST;
549 cfg.hdr.elmId.elmnt = STTSAP;
550
551 cfg.t.cfg.s.inTSAP.sapId = signal_data->cc_id;
552
553 cfg.t.cfg.s.inTSAP.prior = PRIOR0;
554 cfg.t.cfg.s.inTSAP.route = RTESPEC;
555
556 cfg.t.cfg.s.inTSAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype);
557 cfg.t.cfg.s.inTSAP.useSubAdr = 0;
558 cfg.t.cfg.s.inTSAP.adrPref = 0;
559 cfg.t.cfg.s.inTSAP.nmbPrefDig = 0;
560
561 for (i = 0; i < IN_MAXPREFDIG; i++)
562 cfg.t.cfg.s.inTSAP.prefix[i] = 0;
563
564 cfg.t.cfg.s.inTSAP.keyPad = 0;
565 cfg.t.cfg.s.inTSAP.wcRout = 0;
566
567 for (i = 0; i < ADRLEN; i++)
568 cfg.t.cfg.s.inTSAP.wcMask[i] = 0;
569
570 cfg.t.cfg.s.inTSAP.sidIns = FALSE;
571 cfg.t.cfg.s.inTSAP.sid.length = 0;
572 cfg.t.cfg.s.inTSAP.sidTon = 0;
573 cfg.t.cfg.s.inTSAP.sidNPlan = 0;
574 cfg.t.cfg.s.inTSAP.callId.len = 0;
575 cfg.t.cfg.s.inTSAP.minAdrDig = 0;
576 cfg.t.cfg.s.inTSAP.comptChck = FALSE;
577 cfg.t.cfg.s.inTSAP.nmbApplProf = 0;
578 cfg.t.cfg.s.inTSAP.profNmb[0] = 0;
579 cfg.t.cfg.s.inTSAP.mem.region = S_REG;
580 cfg.t.cfg.s.inTSAP.mem.pool = S_POOL;
581 cfg.t.cfg.s.inTSAP.selector = 0;
582
583
584 if (sng_isdn_q931_config(&pst, &cfg)) {
585 return FTDM_FAIL;
586 }
587 return FTDM_SUCCESS;
588 }
589
590 ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
591 {
592 InMngmt cfg;
593 Pst pst;
594
595 unsigned i;
596 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
597
598 stack_pst_init(&pst);
599
600
601 pst.dstEnt = ENTIN;
602
603
604 memset(&cfg, 0, sizeof(cfg));
605
606
607 stack_hdr_init(&cfg.hdr);
608
609
610 cfg.hdr.msgType = TCFG;
611 cfg.hdr.entId.ent = ENTIN;
612 cfg.hdr.entId.inst = S_INST;
613 cfg.hdr.elmId.elmnt = STDLSAP;
614
615 cfg.hdr.response.selector=0;
616
617 cfg.t.cfg.s.inDLSAP.sapId = signal_data->dchan_id;
618 cfg.t.cfg.s.inDLSAP.spId = signal_data->dchan_id;
619
620 cfg.t.cfg.s.inDLSAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype);
621
622 cfg.t.cfg.s.inDLSAP.n201 = 1024;
623 cfg.t.cfg.s.inDLSAP.nmbRst = 2;
624 cfg.t.cfg.s.inDLSAP.tCbCfg = TRUE;
625
626 cfg.t.cfg.s.inDLSAP.tCbId = signal_data->cc_id;
627
628 if (signal_data->facility == SNGISDN_OPT_TRUE) {
629 cfg.t.cfg.s.inDLSAP.facilityHandling = IN_FACILITY_STANDRD;
630 } else {
631 cfg.t.cfg.s.inDLSAP.facilityHandling = 0;
632 }
633
634
635 cfg.t.cfg.s.inDLSAP.nfasInt = FALSE;
636
637 if (!cfg.t.cfg.s.inDLSAP.nfasInt) {
638 cfg.t.cfg.s.inDLSAP.intId = 0;
639 cfg.t.cfg.s.inDLSAP.sigInt = 0;
640 cfg.t.cfg.s.inDLSAP.bupInt = 0;
641 cfg.t.cfg.s.inDLSAP.nmbNfasInt = 0;
642 cfg.t.cfg.s.inDLSAP.buIntPr = FALSE;
643
644 for (i = 0; i < IN_MAX_NMB_INTRFS; i++)
645 cfg.t.cfg.s.inDLSAP.ctldInt[i] = IN_INT_NOT_CFGD;
646
647 } else {
648
649 cfg.t.cfg.s.inDLSAP.intId = 0;
650 cfg.t.cfg.s.inDLSAP.sigInt = 0;
651 cfg.t.cfg.s.inDLSAP.bupInt = 1;
652 cfg.t.cfg.s.inDLSAP.nmbNfasInt = 2;
653 cfg.t.cfg.s.inDLSAP.buIntPr = 1;
654
655 for (i = 0; i < IN_MAX_NMB_INTRFS; i++)
656 cfg.t.cfg.s.inDLSAP.ctldInt[i] = IN_INT_NOT_CFGD;
657
658
659 cfg.t.cfg.s.inDLSAP.ctldInt[0] = 0;
660 cfg.t.cfg.s.inDLSAP.ctldInt[1] = 1;
661 }
662
663 cfg.t.cfg.s.inDLSAP.numRstInd = 255;
664 cfg.t.cfg.s.inDLSAP.relOpt = TRUE;
665 #ifdef ISDN_SRV
666 cfg.t.cfg.s.inDLSAP.bcas = FALSE;
667 cfg.t.cfg.s.inDLSAP.maxBSrvCnt = 2;
668 cfg.t.cfg.s.inDLSAP.maxDSrvCnt = 2;
669 #endif
670
671 if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
672 cfg.t.cfg.s.inDLSAP.ackOpt = TRUE;
673 cfg.t.cfg.s.inDLSAP.intType = NETWORK;
674 cfg.t.cfg.s.inDLSAP.clrGlr = FALSE;
675 cfg.t.cfg.s.inDLSAP.statEnqOpt = TRUE;
676
677 if (signal_data->switchtype == SNGISDN_SWITCH_EUROISDN ||
678 signal_data->switchtype == SNGISDN_SWITCH_INSNET) {
679 cfg.t.cfg.s.inDLSAP.rstOpt = FALSE;
680 } else {
681 cfg.t.cfg.s.inDLSAP.rstOpt = TRUE;
682 }
683 } else {
684 cfg.t.cfg.s.inDLSAP.ackOpt = FALSE;
685 cfg.t.cfg.s.inDLSAP.intType = USER;
686 cfg.t.cfg.s.inDLSAP.clrGlr = TRUE;
687 cfg.t.cfg.s.inDLSAP.statEnqOpt = FALSE;
688 cfg.t.cfg.s.inDLSAP.rstOpt = FALSE;
689 }
690
691
692 if (signal_data->restart_opt != SNGISDN_OPT_DEFAULT) {
693 if (signal_data->restart_opt == SNGISDN_OPT_TRUE) {
694 cfg.t.cfg.s.inDLSAP.rstOpt = TRUE;
695 } else {
696 cfg.t.cfg.s.inDLSAP.rstOpt = FALSE;
697 }
698 }
699
700 for (i = 0; i < IN_MAXBCHNL; i++)
701 {
702 cfg.t.cfg.s.inDLSAP.bProf[i].profNmb = 0;
703 cfg.t.cfg.s.inDLSAP.bProf[i].valid = FALSE;
704 cfg.t.cfg.s.inDLSAP.bProf[i].state = IN_PROV_AVAIL;
705 }
706
707 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP &&
708 signal_data->signalling == SNGISDN_SIGNALING_NET) {
709 cfg.t.cfg.s.inDLSAP.nmbCes = MAX_NUM_CES_PER_LINK;
710 } else {
711 cfg.t.cfg.s.inDLSAP.nmbCes=1;
712 }
713
714 cfg.t.cfg.s.inDLSAP.useSubAdr = 0;
715 cfg.t.cfg.s.inDLSAP.adrPref = 0;
716 cfg.t.cfg.s.inDLSAP.nmbPrefDig = 0;
717 for (i = 0; i < IN_MAXPREFDIG; i++)
718 cfg.t.cfg.s.inDLSAP.prefix[i] = 0;
719 cfg.t.cfg.s.inDLSAP.keyPad = 0;
720 cfg.t.cfg.s.inDLSAP.wcRout = 0;
721 for (i = 0; i < ADRLEN; i++)
722 cfg.t.cfg.s.inDLSAP.wcMask[i] = 0;
723
724 cfg.t.cfg.s.inDLSAP.sidIns = FALSE;
725 cfg.t.cfg.s.inDLSAP.sid.length = 0;
726 cfg.t.cfg.s.inDLSAP.sidTon = 0;
727 cfg.t.cfg.s.inDLSAP.sidNPlan = 0;
728 cfg.t.cfg.s.inDLSAP.sidPresInd = FALSE;
729 cfg.t.cfg.s.inDLSAP.minAdrDig = 0;
730 cfg.t.cfg.s.inDLSAP.srvOpt = FALSE;
731 cfg.t.cfg.s.inDLSAP.callId.len = 0;
732 cfg.t.cfg.s.inDLSAP.redirSubsc = FALSE;
733 cfg.t.cfg.s.inDLSAP.redirAdr.eh.pres = NOTPRSNT;
734 cfg.t.cfg.s.inDLSAP.forwSubsc = FALSE;
735 cfg.t.cfg.s.inDLSAP.cndSubsc = TRUE;
736
737
738 cfg.t.cfg.s.inDLSAP.tmr.t301.enb = TRUE;
739 cfg.t.cfg.s.inDLSAP.tmr.t301.val = 180;
740 cfg.t.cfg.s.inDLSAP.tmr.t302.enb = TRUE;
741 cfg.t.cfg.s.inDLSAP.tmr.t302.val = 15;
742 cfg.t.cfg.s.inDLSAP.tmr.t303.enb = TRUE;
743 cfg.t.cfg.s.inDLSAP.tmr.t303.val = 4;
744 cfg.t.cfg.s.inDLSAP.tmr.t304.enb = TRUE;
745 cfg.t.cfg.s.inDLSAP.tmr.t304.val = 30;
746 cfg.t.cfg.s.inDLSAP.tmr.t305.enb = TRUE;
747 cfg.t.cfg.s.inDLSAP.tmr.t305.val = 30;
748 cfg.t.cfg.s.inDLSAP.tmr.t306.enb = FALSE;
749 cfg.t.cfg.s.inDLSAP.tmr.t306.val = 35;
750 cfg.t.cfg.s.inDLSAP.tmr.t307.enb = FALSE;
751 cfg.t.cfg.s.inDLSAP.tmr.t307.val = 35;
752 cfg.t.cfg.s.inDLSAP.tmr.t308.enb = TRUE;
753 cfg.t.cfg.s.inDLSAP.tmr.t308.val = 4;
754
755 if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
756 cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
757 cfg.t.cfg.s.inDLSAP.tmr.t310.val = 10;
758 cfg.t.cfg.s.inDLSAP.tmr.t312.enb = TRUE;
759 cfg.t.cfg.s.inDLSAP.tmr.t312.val = cfg.t.cfg.s.inDLSAP.tmr.t303.val+2;
760 } else {
761 cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
762 cfg.t.cfg.s.inDLSAP.tmr.t310.val = 120;
763 cfg.t.cfg.s.inDLSAP.tmr.t312.enb = FALSE;
764 }
765
766 cfg.t.cfg.s.inDLSAP.tmr.t313.enb = TRUE;
767 cfg.t.cfg.s.inDLSAP.tmr.t313.val = 4;
768 cfg.t.cfg.s.inDLSAP.tmr.t316.enb = TRUE;
769 cfg.t.cfg.s.inDLSAP.tmr.t316.val = 120;
770 cfg.t.cfg.s.inDLSAP.tmr.t316c.enb = FALSE;
771 cfg.t.cfg.s.inDLSAP.tmr.t316c.val = 35;
772 cfg.t.cfg.s.inDLSAP.tmr.t318.enb = TRUE;
773 cfg.t.cfg.s.inDLSAP.tmr.t318.val = 4;
774 cfg.t.cfg.s.inDLSAP.tmr.t319.enb = TRUE;
775 cfg.t.cfg.s.inDLSAP.tmr.t319.val = 4;
776 cfg.t.cfg.s.inDLSAP.tmr.t322.enb = TRUE;
777 cfg.t.cfg.s.inDLSAP.tmr.t322.val = 4;
778 cfg.t.cfg.s.inDLSAP.tmr.t332.enb = FALSE;
779 cfg.t.cfg.s.inDLSAP.tmr.t332.val = 35;
780 cfg.t.cfg.s.inDLSAP.tmr.tRst.enb = TRUE;
781 cfg.t.cfg.s.inDLSAP.tmr.tRst.val = 8;
782 cfg.t.cfg.s.inDLSAP.tmr.tAns.enb = FALSE;
783 cfg.t.cfg.s.inDLSAP.tmr.t396.enb = FALSE;
784 cfg.t.cfg.s.inDLSAP.tmr.t397.enb = TRUE;
785 cfg.t.cfg.s.inDLSAP.tmr.tProg.enb= TRUE;
786 cfg.t.cfg.s.inDLSAP.tmr.tProg.val= 35;
787 #ifdef NI2
788 #ifdef NI2_TREST
789 cfg.t.cfg.s.inDLSAP.tmr.tRest.enb= FALSE;
790 cfg.t.cfg.s.inDLSAP.tmr.tRest.val= 35;
791 #endif
792 #endif
793
794 cfg.t.cfg.s.inDLSAP.dstEnt = ENTLD;
795 cfg.t.cfg.s.inDLSAP.dstInst = S_INST;
796 cfg.t.cfg.s.inDLSAP.dstProcId = SFndProcId();
797 cfg.t.cfg.s.inDLSAP.prior = PRIOR0;
798 cfg.t.cfg.s.inDLSAP.route = RTESPEC;
799 cfg.t.cfg.s.inDLSAP.selector = 0;
800 cfg.t.cfg.s.inDLSAP.mem.region = S_REG;
801 cfg.t.cfg.s.inDLSAP.mem.pool = S_POOL;
802
803 switch (span->trunk_type) {
804 case FTDM_TRUNK_E1:
805 cfg.t.cfg.s.inDLSAP.dChannelNum = 16;
806 cfg.t.cfg.s.inDLSAP.nmbBearChan = NUM_E1_CHANNELS_PER_SPAN;
807 cfg.t.cfg.s.inDLSAP.firstBChanNum = 0;
808 cfg.t.cfg.s.inDLSAP.callRefLen = 2;
809 cfg.t.cfg.s.inDLSAP.teiAlloc = IN_STATIC;
810 cfg.t.cfg.s.inDLSAP.intCfg = IN_INTCFG_PTPT;
811 break;
812 case FTDM_TRUNK_T1:
813 case FTDM_TRUNK_J1:
814
815 cfg.t.cfg.s.inDLSAP.dChannelNum = 24;
816 cfg.t.cfg.s.inDLSAP.nmbBearChan = NUM_T1_CHANNELS_PER_SPAN;
817 cfg.t.cfg.s.inDLSAP.firstBChanNum = 1;
818 cfg.t.cfg.s.inDLSAP.callRefLen = 2;
819 cfg.t.cfg.s.inDLSAP.teiAlloc = IN_STATIC;
820 cfg.t.cfg.s.inDLSAP.intCfg = IN_INTCFG_PTPT;
821 break;
822 case FTDM_TRUNK_BRI:
823 cfg.t.cfg.s.inDLSAP.dChannelNum = 0;
824 cfg.t.cfg.s.inDLSAP.nmbBearChan = NUM_BRI_CHANNELS_PER_SPAN;
825 cfg.t.cfg.s.inDLSAP.firstBChanNum = 1;
826 cfg.t.cfg.s.inDLSAP.callRefLen = 1;
827 cfg.t.cfg.s.inDLSAP.teiAlloc = IN_STATIC;
828 cfg.t.cfg.s.inDLSAP.intCfg = IN_INTCFG_PTPT;
829 break;
830 case FTDM_TRUNK_BRI_PTMP:
831 cfg.t.cfg.s.inDLSAP.dChannelNum = 0;
832 cfg.t.cfg.s.inDLSAP.nmbBearChan = NUM_BRI_CHANNELS_PER_SPAN;
833 cfg.t.cfg.s.inDLSAP.firstBChanNum = 1;
834 cfg.t.cfg.s.inDLSAP.callRefLen = 1;
835 cfg.t.cfg.s.inDLSAP.teiAlloc = IN_DYNAMIC;
836 cfg.t.cfg.s.inDLSAP.intCfg = IN_INTCFG_MULTI;
837 break;
838 default:
839 ftdm_log(FTDM_LOG_ERROR, "%s: Unsupported trunk_type\n", span->name);
840 return FTDM_FAIL;
841 }
842
843 if (sng_isdn_q931_config(&pst, &cfg)) {
844 return FTDM_FAIL;
845 }
846 return FTDM_SUCCESS;
847 }
848
849 ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span)
850 {
851 InMngmt cfg;
852 Pst pst;
853 uint8_t i;
854 uint8_t numCes=1;
855
856 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
857 if (span->trunk_type == FTDM_TRUNK_BRI_PTMP && signal_data->signalling == SNGISDN_SIGNALING_NET) {
858 numCes = 8;
859 }
860
861 stack_pst_init(&pst);
862
863
864 pst.dstEnt = ENTIN;
865
866
867 memset(&cfg, 0, sizeof(cfg));
868
869
870 stack_hdr_init(&cfg.hdr);
871
872
873 cfg.hdr.msgType = TCFG;
874 cfg.hdr.entId.ent = ENTIN;
875 cfg.hdr.entId.inst = S_INST;
876 cfg.hdr.elmId.elmnt = STDLC;
877
878 cfg.hdr.response.selector=0;
879
880 cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
881
882 cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
883 cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
884 cfg.t.cfg.s.inLCe.tCon.val = 35;
885 cfg.t.cfg.s.inLCe.tDisc.enb = TRUE;
886 cfg.t.cfg.s.inLCe.tDisc.val = 35;
887 cfg.t.cfg.s.inLCe.t314.enb = FALSE;
888 cfg.t.cfg.s.inLCe.t314.val = 35;
889
890 cfg.t.cfg.s.inLCe.t332i.enb = FALSE;
891
892 #ifdef NFAS
893 cfg.t.cfg.s.inLCe.t332i.val = 35;
894 #else
895 cfg.t.cfg.s.inLCe.t332i.val = 0;
896 #endif
897
898 #if (ISDN_NI1 || ISDN_NT || ISDN_ATT)
899 cfg.t.cfg.s.inLCe.tSpid.enb = TRUE;
900 cfg.t.cfg.s.inLCe.tSpid.val = 5;
901
902
903 cfg.t.cfg.s.inLCe.spid.pres = NOTPRSNT;
904 cfg.t.cfg.s.inLCe.spid.len = 0;
905 #endif
906 cfg.t.cfg.s.inLCe.tRstAck.enb = TRUE;
907 cfg.t.cfg.s.inLCe.tRstAck.val = 10;
908
909 cfg.t.cfg.s.inLCe.usid = 0;
910 cfg.t.cfg.s.inLCe.tid = 0;
911
912 for(i=0;i<numCes;i++) {
913 cfg.t.cfg.s.inLCe.ces = i;
914 if (sng_isdn_q931_config(&pst, &cfg)) {
915 return FTDM_FAIL;
916 }
917 }
918
919 return FTDM_SUCCESS;
920 }
921
922
923 ftdm_status_t sngisdn_stack_cfg_cc_gen(void)
924 {
925 CcMngmt cfg;
926 Pst pst;
927
928
929 stack_pst_init(&pst);
930
931
932 pst.dstEnt = ENTCC;
933
934
935 memset(&cfg, 0, sizeof(cfg));
936
937
938 stack_hdr_init(&cfg.hdr);
939
940
941 cfg.hdr.msgType = TCFG;
942 cfg.hdr.entId.ent = ENTCC;
943 cfg.hdr.entId.inst = S_INST;
944 cfg.hdr.elmId.elmnt = STGEN;
945
946
947 stack_pst_init(&cfg.t.cfg.s.ccGenCfg.smPst);
948 cfg.t.cfg.s.ccGenCfg.smPst.dstEnt = ENTSM;
949
950 cfg.t.cfg.s.ccGenCfg.poolTrUpper = 2;
951 cfg.t.cfg.s.ccGenCfg.poolTrLower = 1;
952
953 cfg.t.cfg.s.ccGenCfg.nmbSaps = MAX_VARIANTS+1;
954
955 if (sng_isdn_cc_config(&pst, &cfg)) {
956 return FTDM_FAIL;
957 }
958 return FTDM_SUCCESS;
959 }
960
961
962 ftdm_status_t sngisdn_stack_cfg_cc_sap(ftdm_span_t *span)
963 {
964 CcMngmt cfg;
965 Pst pst;
966
967 sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)span->signal_data;
968
969
970 stack_pst_init(&pst);
971
972
973 pst.dstEnt = ENTCC;
974
975
976 memset(&cfg, 0, sizeof(cfg));
977
978
979 stack_hdr_init(&cfg.hdr);
980
981
982 cfg.hdr.msgType = TCFG;
983 cfg.hdr.entId.ent = ENTCC;
984 cfg.hdr.entId.inst = S_INST;
985 cfg.hdr.elmId.elmnt = STTSAP;
986
987 cfg.t.cfg.s.ccISAP.pst.srcProcId = SFndProcId();
988 cfg.t.cfg.s.ccISAP.pst.srcEnt = ENTCC;
989 cfg.t.cfg.s.ccISAP.pst.srcInst = S_INST;
990 cfg.t.cfg.s.ccISAP.pst.dstEnt = ENTIN;
991 cfg.t.cfg.s.ccISAP.pst.dstInst = S_INST;
992 cfg.t.cfg.s.ccISAP.pst.dstProcId = SFndProcId();
993
994 cfg.t.cfg.s.ccISAP.pst.prior = PRIOR0;
995 cfg.t.cfg.s.ccISAP.pst.route = RTESPEC;
996 cfg.t.cfg.s.ccISAP.pst.region = S_REG;
997 cfg.t.cfg.s.ccISAP.pst.pool = S_POOL;
998 cfg.t.cfg.s.ccISAP.pst.selector = 0;
999
1000 cfg.t.cfg.s.ccISAP.suId = signal_data->cc_id;
1001 cfg.t.cfg.s.ccISAP.spId = signal_data->cc_id;
1002
1003 cfg.t.cfg.s.ccISAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype);
1004 cfg.t.cfg.s.ccISAP.sapType = SNG_SAP_TYPE_ISDN;
1005
1006 if (sng_isdn_cc_config(&pst, &cfg)) {
1007 return FTDM_FAIL;
1008 }
1009 return FTDM_SUCCESS;
1010 }
1011
1012
1013 void stack_pst_init(Pst *pst)
1014 {
1015 memset(pst, 0, sizeof(Pst));
1016
1017 pst->dstProcId = SFndProcId();
1018 pst->dstInst = S_INST;
1019
1020 pst->srcProcId = SFndProcId();
1021 pst->srcEnt = ENTSM;
1022 pst->srcInst = S_INST;
1023
1024 pst->prior = PRIOR0;
1025 pst->route = RTESPEC;
1026 pst->region = S_REG;
1027 pst->pool = S_POOL;
1028 pst->selector = 0;
1029 return;
1030 }
1031
1032
1033
1034 void stack_hdr_init(Header *hdr)
1035 {
1036 hdr->msgType = 0;
1037 hdr->msgLen = 0;
1038 hdr->entId.ent = 0;
1039 hdr->entId.inst = 0;
1040 hdr->elmId.elmnt = 0;
1041 hdr->elmId.elmntInst1 = 0;
1042 hdr->elmId.elmntInst2 = 0;
1043 hdr->elmId.elmntInst3 = 0;
1044 hdr->seqNmb = 0;
1045 hdr->version = 0;
1046 hdr->response.prior = PRIOR0;
1047 hdr->response.route = RTESPEC;
1048 hdr->response.mem.region = S_REG;
1049 hdr->response.mem.pool = S_POOL;
1050 hdr->transId = 0;
1051 hdr->response.selector = 0;
1052 return;
1053 }
1054
1055 uint8_t sng_isdn_stack_switchtype(sngisdn_switchtype_t switchtype)
1056 {
1057 switch (switchtype) {
1058 case SNGISDN_SWITCH_NI2:
1059 return SW_NI2;
1060 case SNGISDN_SWITCH_5ESS:
1061 return SW_ATT5EP;
1062 case SNGISDN_SWITCH_4ESS:
1063 return SW_ATT4E;
1064 case SNGISDN_SWITCH_DMS100:
1065 return SW_NTDMS100P;
1066 case SNGISDN_SWITCH_EUROISDN:
1067 return SW_ETSI;
1068 case SNGISDN_SWITCH_QSIG:
1069 return SW_QSIG;
1070 case SNGISDN_SWITCH_INSNET:
1071 return SW_INSNET;
1072 case SNGISDN_SWITCH_INVALID:
1073 ftdm_log(FTDM_LOG_ERROR, "%s:Invalid switchtype:%d\n", switchtype);
1074 break;
1075 }
1076 return 0;
1077 }
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090