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