Lines Matching refs:pc
113 { struct l3_process *pc = st->l3.proc; /* start of processes */ in l3ni1_search_dummy_proc() local
117 while (pc) in l3ni1_search_dummy_proc()
118 { if ((pc->callref == -1) && (pc->prot.ni1.invoke_id == id)) in l3ni1_search_dummy_proc()
119 return (pc); in l3ni1_search_dummy_proc()
120 pc = pc->next; in l3ni1_search_dummy_proc()
133 struct l3_process *pc = NULL; in l3ni1_dummy_return_result() local
135 if ((pc = l3ni1_search_dummy_proc(st, id))) in l3ni1_dummy_return_result()
136 { L3DelTimer(&pc->timer); /* remove timer */ in l3ni1_dummy_return_result()
138 cs = pc->st->l1.hardware; in l3ni1_dummy_return_result()
142 ic.parm.ni1_io.hl_id = pc->prot.ni1.invoke_id; in l3ni1_dummy_return_result()
143 ic.parm.ni1_io.ll_id = pc->prot.ni1.ll_id; in l3ni1_dummy_return_result()
144 ic.parm.ni1_io.proc = pc->prot.ni1.proc; in l3ni1_dummy_return_result()
148 free_invoke_id(pc->st, pc->prot.ni1.invoke_id); in l3ni1_dummy_return_result()
149 pc->prot.ni1.invoke_id = 0; /* reset id */ in l3ni1_dummy_return_result()
152 ni1_release_l3_process(pc); in l3ni1_dummy_return_result()
166 struct l3_process *pc = NULL; in l3ni1_dummy_error_return() local
168 if ((pc = l3ni1_search_dummy_proc(st, id))) in l3ni1_dummy_error_return()
169 { L3DelTimer(&pc->timer); /* remove timer */ in l3ni1_dummy_error_return()
171 cs = pc->st->l1.hardware; in l3ni1_dummy_error_return()
175 ic.parm.ni1_io.hl_id = pc->prot.ni1.invoke_id; in l3ni1_dummy_error_return()
176 ic.parm.ni1_io.ll_id = pc->prot.ni1.ll_id; in l3ni1_dummy_error_return()
177 ic.parm.ni1_io.proc = pc->prot.ni1.proc; in l3ni1_dummy_error_return()
181 free_invoke_id(pc->st, pc->prot.ni1.invoke_id); in l3ni1_dummy_error_return()
182 pc->prot.ni1.invoke_id = 0; /* reset id */ in l3ni1_dummy_error_return()
185 ni1_release_l3_process(pc); in l3ni1_dummy_error_return()
220 l3ni1_parse_facility(struct PStack *st, struct l3_process *pc, in l3ni1_parse_facility() argument
228 if (pc) in l3ni1_parse_facility()
229 st = pc->st; /* valid Stack */ in l3ni1_parse_facility()
351 if (!pc) in l3ni1_parse_facility()
360 if (!pc) in l3ni1_parse_facility()
365 if ((pc->prot.ni1.invoke_id) && (pc->prot.ni1.invoke_id == id)) in l3ni1_parse_facility()
367 free_invoke_id(st, pc->prot.ni1.invoke_id); in l3ni1_parse_facility()
368 pc->prot.ni1.remote_result = 0; /* success */ in l3ni1_parse_facility()
369 pc->prot.ni1.invoke_id = 0; in l3ni1_parse_facility()
370 pc->redir_result = pc->prot.ni1.remote_result; in l3ni1_parse_facility()
371 st->l3.l3l4(st, CC_REDIR | INDICATION, pc); } /* Diversion successful */ in l3ni1_parse_facility()
405 if (!pc) in l3ni1_parse_facility()
410 if ((pc->prot.ni1.invoke_id) && (pc->prot.ni1.invoke_id == id)) in l3ni1_parse_facility()
412 free_invoke_id(st, pc->prot.ni1.invoke_id); in l3ni1_parse_facility()
413 pc->prot.ni1.remote_result = err_ret; /* result */ in l3ni1_parse_facility()
414 pc->prot.ni1.invoke_id = 0; in l3ni1_parse_facility()
415 pc->redir_result = pc->prot.ni1.remote_result; in l3ni1_parse_facility()
416 st->l3.l3l4(st, CC_REDIR | INDICATION, pc); in l3ni1_parse_facility()
428 l3ni1_message(struct l3_process *pc, u_char mt) in l3ni1_message() argument
436 MsgHead(p, pc->callref, mt); in l3ni1_message()
437 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_message()
441 l3ni1_message_plus_chid(struct l3_process *pc, u_char mt) in l3ni1_message_plus_chid() argument
449 chid = (u_char)(pc->para.bchannel & 0x03) | 0x88; in l3ni1_message_plus_chid()
450 MsgHead(p, pc->callref, mt); in l3ni1_message_plus_chid()
458 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_message_plus_chid()
462 l3ni1_message_cause(struct l3_process *pc, u_char mt, u_char cause) in l3ni1_message_cause() argument
469 MsgHead(p, pc->callref, mt); in l3ni1_message_cause()
479 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_message_cause()
483 l3ni1_status_send(struct l3_process *pc, u_char pr, void *arg) in l3ni1_status_send() argument
490 MsgHead(p, pc->callref, MT_STATUS); in l3ni1_status_send()
495 *p++ = pc->para.cause | 0x80; in l3ni1_status_send()
499 *p++ = pc->state & 0x3f; in l3ni1_status_send()
505 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_status_send()
509 l3ni1_msg_without_setup(struct l3_process *pc, u_char pr, void *arg) in l3ni1_msg_without_setup() argument
520 switch (pc->para.cause) { in l3ni1_msg_without_setup()
526 MsgHead(p, pc->callref, MT_RELEASE_COMPLETE); in l3ni1_msg_without_setup()
530 *p++ = pc->para.cause | 0x80; in l3ni1_msg_without_setup()
534 pc->para.cause); in l3ni1_msg_without_setup()
541 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_msg_without_setup()
542 ni1_release_l3_process(pc); in l3ni1_msg_without_setup()
646 ie_in_set(struct l3_process *pc, u_char ie, int *checklist) { in ie_in_set() argument
663 check_infoelements(struct l3_process *pc, struct sk_buff *skb, int *checklist) in check_infoelements() argument
689 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
690 l3_debug(pc->st, "check IE shift%scodeset %d->%d", in check_infoelements()
696 if ((newpos = ie_in_set(pc, *p, cl))) { in check_infoelements()
704 if (ie_in_set(pc, *p, comp_required)) in check_infoelements()
721 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
722 l3_debug(pc->st, "check IE shift back codeset %d->%d", in check_infoelements()
729 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
730 l3_debug(pc->st, "check IE MT(%x) %d/%d/%d/%d", in check_infoelements()
746 l3ni1_check_messagetype_validity(struct l3_process *pc, int mt, void *arg) in l3ni1_check_messagetype_validity() argument
772 if (pc->debug & L3_DEB_CHECK) in l3ni1_check_messagetype_validity()
773 l3_debug(pc->st, "l3ni1_check_messagetype_validity mt(%x) OK", mt); in l3ni1_check_messagetype_validity()
778 if (pc->debug & (L3_DEB_CHECK | L3_DEB_WARN)) in l3ni1_check_messagetype_validity()
779 l3_debug(pc->st, "l3ni1_check_messagetype_validity mt(%x) fail", mt); in l3ni1_check_messagetype_validity()
780 pc->para.cause = 97; in l3ni1_check_messagetype_validity()
781 l3ni1_status_send(pc, 0, NULL); in l3ni1_check_messagetype_validity()
788 l3ni1_std_ie_err(struct l3_process *pc, int ret) { in l3ni1_std_ie_err() argument
790 if (pc->debug & L3_DEB_CHECK) in l3ni1_std_ie_err()
791 l3_debug(pc->st, "check_infoelements ret %d", ret); in l3ni1_std_ie_err()
796 pc->para.cause = 96; in l3ni1_std_ie_err()
797 l3ni1_status_send(pc, 0, NULL); in l3ni1_std_ie_err()
800 pc->para.cause = 99; in l3ni1_std_ie_err()
801 l3ni1_status_send(pc, 0, NULL); in l3ni1_std_ie_err()
804 pc->para.cause = 100; in l3ni1_std_ie_err()
805 l3ni1_status_send(pc, 0, NULL); in l3ni1_std_ie_err()
814 l3ni1_get_channel_id(struct l3_process *pc, struct sk_buff *skb) { in l3ni1_get_channel_id() argument
821 if (pc->debug & L3_DEB_WARN) in l3ni1_get_channel_id()
822 l3_debug(pc->st, "wrong chid len %d", *p); in l3ni1_get_channel_id()
827 if (pc->debug & L3_DEB_WARN) in l3ni1_get_channel_id()
828 l3_debug(pc->st, "wrong chid %x", *p); in l3ni1_get_channel_id()
837 l3ni1_get_cause(struct l3_process *pc, struct sk_buff *skb) { in l3ni1_get_cause() argument
842 pc->para.cause = 31; in l3ni1_get_cause()
843 pc->para.loc = 0; in l3ni1_get_cause()
850 pc->para.loc = *p++; in l3ni1_get_cause()
855 if (l && !(pc->para.loc & 0x80)) { in l3ni1_get_cause()
860 pc->para.cause = *p++; in l3ni1_get_cause()
862 if (!(pc->para.cause & 0x80)) in l3ni1_get_cause()
867 pc->para.diag[i++] = *p++; in l3ni1_get_cause()
876 l3ni1_msg_with_uus(struct l3_process *pc, u_char cmd) in l3ni1_msg_with_uus() argument
883 MsgHead(p, pc->callref, cmd); in l3ni1_msg_with_uus()
885 if (pc->prot.ni1.uus1_data[0]) in l3ni1_msg_with_uus()
887 *p++ = strlen(pc->prot.ni1.uus1_data) + 1; in l3ni1_msg_with_uus()
889 strcpy(p, pc->prot.ni1.uus1_data); in l3ni1_msg_with_uus()
890 p += strlen(pc->prot.ni1.uus1_data); in l3ni1_msg_with_uus()
891 pc->prot.ni1.uus1_data[0] = '\0'; in l3ni1_msg_with_uus()
898 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_msg_with_uus()
902 l3ni1_release_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_release_req() argument
904 StopAllL3Timer(pc); in l3ni1_release_req()
905 newl3state(pc, 19); in l3ni1_release_req()
906 if (!pc->prot.ni1.uus1_data[0]) in l3ni1_release_req()
907 l3ni1_message(pc, MT_RELEASE); in l3ni1_release_req()
909 l3ni1_msg_with_uus(pc, MT_RELEASE); in l3ni1_release_req()
910 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3ni1_release_req()
914 l3ni1_release_cmpl(struct l3_process *pc, u_char pr, void *arg) in l3ni1_release_cmpl() argument
919 if ((ret = l3ni1_get_cause(pc, skb)) > 0) { in l3ni1_release_cmpl()
920 if (pc->debug & L3_DEB_WARN) in l3ni1_release_cmpl()
921 l3_debug(pc->st, "RELCMPL get_cause ret(%d)", ret); in l3ni1_release_cmpl()
923 pc->para.cause = NO_CAUSE; in l3ni1_release_cmpl()
924 StopAllL3Timer(pc); in l3ni1_release_cmpl()
925 newl3state(pc, 0); in l3ni1_release_cmpl()
926 pc->st->l3.l3l4(pc->st, CC_RELEASE | CONFIRM, pc); in l3ni1_release_cmpl()
927 ni1_release_l3_process(pc); in l3ni1_release_cmpl()
1170 l3ni1_setup_req(struct l3_process *pc, u_char pr, in l3ni1_setup_req() argument
1182 MsgHead(p, pc->callref, MT_SETUP); in l3ni1_setup_req()
1184 teln = pc->para.setup.phone; in l3ni1_setup_req()
1190 switch (pc->para.setup.si1) { in l3ni1_setup_req()
1227 …if ((pc->para.setup.si2 >= 160) && (pc->para.setup.si2 <= 175)) { // sync. Bitratenadaption, V.110… in l3ni1_setup_req()
1234 *p++ = EncodeSyncParams(pc->para.setup.si2 - 160, 0x80); in l3ni1_setup_req()
1235 …} else if ((pc->para.setup.si2 >= 176) && (pc->para.setup.si2 <= 191)) { // sync. Bitratenadaption… in l3ni1_setup_req()
1242 *p++ = EncodeSyncParams(pc->para.setup.si2 - 176, 0); in l3ni1_setup_req()
1244 } else if (pc->para.setup.si2 >= 192) { // async. Bitratenadaption, V.110/X.30 in l3ni1_setup_req()
1251 p = EncodeASyncParams(p, pc->para.setup.si2 - 192); in l3ni1_setup_req()
1253 switch (pc->para.setup.si1) { in l3ni1_setup_req()
1278 L3DelTimer(&pc->timer); in l3ni1_setup_req()
1279 L3AddTimer(&pc->timer, T303, CC_T303); in l3ni1_setup_req()
1280 newl3state(pc, 1); in l3ni1_setup_req()
1281 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_setup_req()
1285 l3ni1_call_proc(struct l3_process *pc, u_char pr, void *arg) in l3ni1_call_proc() argument
1290 if ((id = l3ni1_get_channel_id(pc, skb)) >= 0) { in l3ni1_call_proc()
1291 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3ni1_call_proc()
1292 if (pc->debug & L3_DEB_WARN) in l3ni1_call_proc()
1293 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3ni1_call_proc()
1294 pc->para.cause = 100; in l3ni1_call_proc()
1295 l3ni1_status_send(pc, pr, NULL); in l3ni1_call_proc()
1298 pc->para.bchannel = id; in l3ni1_call_proc()
1299 } else if (1 == pc->state) { in l3ni1_call_proc()
1300 if (pc->debug & L3_DEB_WARN) in l3ni1_call_proc()
1301 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3ni1_call_proc()
1303 pc->para.cause = 96; in l3ni1_call_proc()
1305 pc->para.cause = 100; in l3ni1_call_proc()
1306 l3ni1_status_send(pc, pr, NULL); in l3ni1_call_proc()
1310 ret = check_infoelements(pc, skb, ie_CALL_PROCEEDING); in l3ni1_call_proc()
1312 l3ni1_std_ie_err(pc, ret); in l3ni1_call_proc()
1315 L3DelTimer(&pc->timer); in l3ni1_call_proc()
1316 newl3state(pc, 3); in l3ni1_call_proc()
1317 L3AddTimer(&pc->timer, T310, CC_T310); in l3ni1_call_proc()
1319 l3ni1_std_ie_err(pc, ret); in l3ni1_call_proc()
1320 pc->st->l3.l3l4(pc->st, CC_PROCEEDING | INDICATION, pc); in l3ni1_call_proc()
1324 l3ni1_setup_ack(struct l3_process *pc, u_char pr, void *arg) in l3ni1_setup_ack() argument
1329 if ((id = l3ni1_get_channel_id(pc, skb)) >= 0) { in l3ni1_setup_ack()
1330 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3ni1_setup_ack()
1331 if (pc->debug & L3_DEB_WARN) in l3ni1_setup_ack()
1332 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3ni1_setup_ack()
1333 pc->para.cause = 100; in l3ni1_setup_ack()
1334 l3ni1_status_send(pc, pr, NULL); in l3ni1_setup_ack()
1337 pc->para.bchannel = id; in l3ni1_setup_ack()
1339 if (pc->debug & L3_DEB_WARN) in l3ni1_setup_ack()
1340 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3ni1_setup_ack()
1342 pc->para.cause = 96; in l3ni1_setup_ack()
1344 pc->para.cause = 100; in l3ni1_setup_ack()
1345 l3ni1_status_send(pc, pr, NULL); in l3ni1_setup_ack()
1349 ret = check_infoelements(pc, skb, ie_SETUP_ACKNOWLEDGE); in l3ni1_setup_ack()
1351 l3ni1_std_ie_err(pc, ret); in l3ni1_setup_ack()
1354 L3DelTimer(&pc->timer); in l3ni1_setup_ack()
1355 newl3state(pc, 2); in l3ni1_setup_ack()
1356 L3AddTimer(&pc->timer, T304, CC_T304); in l3ni1_setup_ack()
1358 l3ni1_std_ie_err(pc, ret); in l3ni1_setup_ack()
1359 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3ni1_setup_ack()
1363 l3ni1_disconnect(struct l3_process *pc, u_char pr, void *arg) in l3ni1_disconnect() argument
1370 StopAllL3Timer(pc); in l3ni1_disconnect()
1371 if ((ret = l3ni1_get_cause(pc, skb))) { in l3ni1_disconnect()
1372 if (pc->debug & L3_DEB_WARN) in l3ni1_disconnect()
1373 l3_debug(pc->st, "DISC get_cause ret(%d)", ret); in l3ni1_disconnect()
1380 l3ni1_parse_facility(pc->st, pc, pc->callref, p); in l3ni1_disconnect()
1381 ret = check_infoelements(pc, skb, ie_DISCONNECT); in l3ni1_disconnect()
1386 ret = pc->state; in l3ni1_disconnect()
1387 newl3state(pc, 12); in l3ni1_disconnect()
1389 newl3state(pc, 19); in l3ni1_disconnect()
1391 pc->st->l3.l3l4(pc->st, CC_DISCONNECT | INDICATION, pc); in l3ni1_disconnect()
1393 l3ni1_release_req(pc, pr, NULL); in l3ni1_disconnect()
1395 l3ni1_message_cause(pc, MT_RELEASE, cause); in l3ni1_disconnect()
1396 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3ni1_disconnect()
1401 l3ni1_connect(struct l3_process *pc, u_char pr, void *arg) in l3ni1_connect() argument
1406 ret = check_infoelements(pc, skb, ie_CONNECT); in l3ni1_connect()
1408 l3ni1_std_ie_err(pc, ret); in l3ni1_connect()
1411 L3DelTimer(&pc->timer); /* T310 */ in l3ni1_connect()
1412 newl3state(pc, 10); in l3ni1_connect()
1413 pc->para.chargeinfo = 0; in l3ni1_connect()
1416 l3ni1_std_ie_err(pc, ret); in l3ni1_connect()
1417 pc->st->l3.l3l4(pc->st, CC_SETUP | CONFIRM, pc); in l3ni1_connect()
1421 l3ni1_alerting(struct l3_process *pc, u_char pr, void *arg) in l3ni1_alerting() argument
1426 ret = check_infoelements(pc, skb, ie_ALERTING); in l3ni1_alerting()
1428 l3ni1_std_ie_err(pc, ret); in l3ni1_alerting()
1431 L3DelTimer(&pc->timer); /* T304 */ in l3ni1_alerting()
1432 newl3state(pc, 4); in l3ni1_alerting()
1434 l3ni1_std_ie_err(pc, ret); in l3ni1_alerting()
1435 pc->st->l3.l3l4(pc->st, CC_ALERTING | INDICATION, pc); in l3ni1_alerting()
1439 l3ni1_setup(struct l3_process *pc, u_char pr, void *arg) in l3ni1_setup() argument
1457 pc->para.setup.si2 = 0; in l3ni1_setup()
1461 pc->para.setup.si1 = 1; in l3ni1_setup()
1464 pc->para.setup.si1 = 7; in l3ni1_setup()
1467 pc->para.setup.si2 = DecodeSI2(skb); in l3ni1_setup()
1471 pc->para.setup.si1 = 2; in l3ni1_setup()
1477 pc->para.setup.si1 = 3; in l3ni1_setup()
1480 pc->para.setup.si1 = 4; in l3ni1_setup()
1488 pc->para.setup.si1 = 8; in l3ni1_setup()
1495 pc->para.moderate = p[3] & 0x7f; in l3ni1_setup()
1502 if (pc->debug & L3_DEB_SI) in l3ni1_setup()
1503 l3_debug(pc->st, "SI=%d, AI=%d", in l3ni1_setup()
1504 pc->para.setup.si1, pc->para.setup.si2); in l3ni1_setup()
1506 if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1507 l3_debug(pc->st, "setup with wrong bearer(l=%d:%x,%x)", in l3ni1_setup()
1509 pc->para.cause = 100; in l3ni1_setup()
1510 l3ni1_msg_without_setup(pc, pr, NULL); in l3ni1_setup()
1514 if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1515 l3_debug(pc->st, "setup without bearer capabilities"); in l3ni1_setup()
1517 pc->para.cause = 96; in l3ni1_setup()
1518 l3ni1_msg_without_setup(pc, pr, NULL); in l3ni1_setup()
1524 if ((id = l3ni1_get_channel_id(pc, skb)) >= 0) { in l3ni1_setup()
1525 if ((pc->para.bchannel = id)) { in l3ni1_setup()
1526 if ((3 == id) && (0x10 == pc->para.moderate)) { in l3ni1_setup()
1527 if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1528 l3_debug(pc->st, "setup with wrong chid %x", in l3ni1_setup()
1530 pc->para.cause = 100; in l3ni1_setup()
1531 l3ni1_msg_without_setup(pc, pr, NULL); in l3ni1_setup()
1536 { if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1537 l3_debug(pc->st, "setup without bchannel, call waiting"); in l3ni1_setup()
1541 if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1542 l3_debug(pc->st, "setup with wrong chid ret %d", id); in l3ni1_setup()
1544 pc->para.cause = 96; in l3ni1_setup()
1546 pc->para.cause = 100; in l3ni1_setup()
1547 l3ni1_msg_without_setup(pc, pr, NULL); in l3ni1_setup()
1551 err = check_infoelements(pc, skb, ie_SETUP); in l3ni1_setup()
1553 pc->para.cause = 96; in l3ni1_setup()
1554 l3ni1_msg_without_setup(pc, pr, NULL); in l3ni1_setup()
1559 iecpy(pc->para.setup.eazmsn, p, 1); in l3ni1_setup()
1561 pc->para.setup.eazmsn[0] = 0; in l3ni1_setup()
1569 strcat(pc->para.setup.eazmsn, tmp); in l3ni1_setup()
1570 } else if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1571 l3_debug(pc->st, "wrong called subaddress"); in l3ni1_setup()
1575 pc->para.setup.plan = p[2]; in l3ni1_setup()
1577 iecpy(pc->para.setup.phone, p, 1); in l3ni1_setup()
1578 pc->para.setup.screen = 0; in l3ni1_setup()
1580 iecpy(pc->para.setup.phone, p, 2); in l3ni1_setup()
1581 pc->para.setup.screen = p[3]; in l3ni1_setup()
1584 pc->para.setup.phone[0] = 0; in l3ni1_setup()
1585 pc->para.setup.plan = 0; in l3ni1_setup()
1586 pc->para.setup.screen = 0; in l3ni1_setup()
1594 strcat(pc->para.setup.phone, tmp); in l3ni1_setup()
1595 } else if (pc->debug & L3_DEB_WARN) in l3ni1_setup()
1596 l3_debug(pc->st, "wrong calling subaddress"); in l3ni1_setup()
1598 newl3state(pc, 6); in l3ni1_setup()
1600 l3ni1_std_ie_err(pc, err); in l3ni1_setup()
1601 pc->st->l3.l3l4(pc->st, CC_SETUP | INDICATION, pc); in l3ni1_setup()
1605 l3ni1_reset(struct l3_process *pc, u_char pr, void *arg) in l3ni1_reset() argument
1607 ni1_release_l3_process(pc); in l3ni1_reset()
1611 l3ni1_disconnect_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_disconnect_req() argument
1619 if (pc->para.cause != NO_CAUSE) in l3ni1_disconnect_req()
1620 cause = pc->para.cause; in l3ni1_disconnect_req()
1622 StopAllL3Timer(pc); in l3ni1_disconnect_req()
1624 MsgHead(p, pc->callref, MT_DISCONNECT); in l3ni1_disconnect_req()
1631 if (pc->prot.ni1.uus1_data[0]) in l3ni1_disconnect_req()
1633 *p++ = strlen(pc->prot.ni1.uus1_data) + 1; in l3ni1_disconnect_req()
1635 strcpy(p, pc->prot.ni1.uus1_data); in l3ni1_disconnect_req()
1636 p += strlen(pc->prot.ni1.uus1_data); in l3ni1_disconnect_req()
1637 pc->prot.ni1.uus1_data[0] = '\0'; in l3ni1_disconnect_req()
1644 newl3state(pc, 11); in l3ni1_disconnect_req()
1645 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_disconnect_req()
1646 L3AddTimer(&pc->timer, T305, CC_T305); in l3ni1_disconnect_req()
1650 l3ni1_setup_rsp(struct l3_process *pc, u_char pr, in l3ni1_setup_rsp() argument
1653 if (!pc->para.bchannel) in l3ni1_setup_rsp()
1654 { if (pc->debug & L3_DEB_WARN) in l3ni1_setup_rsp()
1655 l3_debug(pc->st, "D-chan connect for waiting call"); in l3ni1_setup_rsp()
1656 l3ni1_disconnect_req(pc, pr, arg); in l3ni1_setup_rsp()
1659 newl3state(pc, 8); in l3ni1_setup_rsp()
1660 if (pc->debug & L3_DEB_WARN) in l3ni1_setup_rsp()
1661 l3_debug(pc->st, "D-chan connect for waiting call"); in l3ni1_setup_rsp()
1662 l3ni1_message_plus_chid(pc, MT_CONNECT); /* GE 05/09/00 */ in l3ni1_setup_rsp()
1663 L3DelTimer(&pc->timer); in l3ni1_setup_rsp()
1664 L3AddTimer(&pc->timer, T313, CC_T313); in l3ni1_setup_rsp()
1668 l3ni1_connect_ack(struct l3_process *pc, u_char pr, void *arg) in l3ni1_connect_ack() argument
1673 ret = check_infoelements(pc, skb, ie_CONNECT_ACKNOWLEDGE); in l3ni1_connect_ack()
1675 l3ni1_std_ie_err(pc, ret); in l3ni1_connect_ack()
1678 newl3state(pc, 10); in l3ni1_connect_ack()
1679 L3DelTimer(&pc->timer); in l3ni1_connect_ack()
1681 l3ni1_std_ie_err(pc, ret); in l3ni1_connect_ack()
1682 pc->st->l3.l3l4(pc->st, CC_SETUP_COMPL | INDICATION, pc); in l3ni1_connect_ack()
1686 l3ni1_reject_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_reject_req() argument
1694 if (pc->para.cause != NO_CAUSE) in l3ni1_reject_req()
1695 cause = pc->para.cause; in l3ni1_reject_req()
1697 MsgHead(p, pc->callref, MT_RELEASE_COMPLETE); in l3ni1_reject_req()
1708 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_reject_req()
1709 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_reject_req()
1710 newl3state(pc, 0); in l3ni1_reject_req()
1711 ni1_release_l3_process(pc); in l3ni1_reject_req()
1715 l3ni1_release(struct l3_process *pc, u_char pr, void *arg) in l3ni1_release() argument
1721 StopAllL3Timer(pc); in l3ni1_release()
1722 if ((ret = l3ni1_get_cause(pc, skb)) > 0) { in l3ni1_release()
1723 if (pc->debug & L3_DEB_WARN) in l3ni1_release()
1724 l3_debug(pc->st, "REL get_cause ret(%d)", ret); in l3ni1_release()
1726 pc->para.cause = NO_CAUSE; in l3ni1_release()
1728 l3ni1_parse_facility(pc->st, pc, pc->callref, p); in l3ni1_release()
1730 if ((ret < 0) && (pc->state != 11)) in l3ni1_release()
1734 ret = check_infoelements(pc, skb, ie_RELEASE); in l3ni1_release()
1740 l3ni1_message_cause(pc, MT_RELEASE_COMPLETE, cause); in l3ni1_release()
1742 l3ni1_message(pc, MT_RELEASE_COMPLETE); in l3ni1_release()
1743 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_release()
1744 newl3state(pc, 0); in l3ni1_release()
1745 ni1_release_l3_process(pc); in l3ni1_release()
1749 l3ni1_alert_req(struct l3_process *pc, u_char pr, in l3ni1_alert_req() argument
1752 newl3state(pc, 7); in l3ni1_alert_req()
1753 if (!pc->prot.ni1.uus1_data[0]) in l3ni1_alert_req()
1754 l3ni1_message(pc, MT_ALERTING); in l3ni1_alert_req()
1756 l3ni1_msg_with_uus(pc, MT_ALERTING); in l3ni1_alert_req()
1760 l3ni1_proceed_req(struct l3_process *pc, u_char pr, in l3ni1_proceed_req() argument
1763 newl3state(pc, 9); in l3ni1_proceed_req()
1764 l3ni1_message(pc, MT_CALL_PROCEEDING); in l3ni1_proceed_req()
1765 pc->st->l3.l3l4(pc->st, CC_PROCEED_SEND | INDICATION, pc); in l3ni1_proceed_req()
1769 l3ni1_setup_ack_req(struct l3_process *pc, u_char pr, in l3ni1_setup_ack_req() argument
1772 newl3state(pc, 25); in l3ni1_setup_ack_req()
1773 L3DelTimer(&pc->timer); in l3ni1_setup_ack_req()
1774 L3AddTimer(&pc->timer, T302, CC_T302); in l3ni1_setup_ack_req()
1775 l3ni1_message(pc, MT_SETUP_ACKNOWLEDGE); in l3ni1_setup_ack_req()
1782 l3ni1_deliver_display(struct l3_process *pc, int pr, u_char *infp) in l3ni1_deliver_display() argument
1790 if (!pc->chan) return; in l3ni1_deliver_display()
1797 cs = pc->st->l1.hardware; in l3ni1_deliver_display()
1799 ic.arg = pc->chan->chan; in l3ni1_deliver_display()
1805 l3ni1_progress(struct l3_process *pc, u_char pr, void *arg) in l3ni1_progress() argument
1814 pc->para.cause = 100; in l3ni1_progress()
1833 pc->para.cause = 100; in l3ni1_progress()
1839 pc->para.cause = 100; in l3ni1_progress()
1844 pc->para.cause = 96; in l3ni1_progress()
1848 if (pc->debug & L3_DEB_WARN) in l3ni1_progress()
1849 l3_debug(pc->st, "progress error %d", err); in l3ni1_progress()
1850 l3ni1_status_send(pc, pr, NULL); in l3ni1_progress()
1854 err = check_infoelements(pc, skb, ie_PROGRESS); in l3ni1_progress()
1856 l3ni1_std_ie_err(pc, err); in l3ni1_progress()
1858 pc->st->l3.l3l4(pc->st, CC_PROGRESS | INDICATION, pc); in l3ni1_progress()
1862 l3ni1_notify(struct l3_process *pc, u_char pr, void *arg) in l3ni1_notify() argument
1871 pc->para.cause = 100; in l3ni1_notify()
1879 pc->para.cause = 100; in l3ni1_notify()
1885 pc->para.cause = 96; in l3ni1_notify()
1889 if (pc->debug & L3_DEB_WARN) in l3ni1_notify()
1890 l3_debug(pc->st, "notify error %d", err); in l3ni1_notify()
1891 l3ni1_status_send(pc, pr, NULL); in l3ni1_notify()
1895 err = check_infoelements(pc, skb, ie_NOTIFY); in l3ni1_notify()
1897 l3ni1_std_ie_err(pc, err); in l3ni1_notify()
1899 pc->st->l3.l3l4(pc->st, CC_NOTIFY | INDICATION, pc); in l3ni1_notify()
1903 l3ni1_status_enq(struct l3_process *pc, u_char pr, void *arg) in l3ni1_status_enq() argument
1908 ret = check_infoelements(pc, skb, ie_STATUS_ENQUIRY); in l3ni1_status_enq()
1909 l3ni1_std_ie_err(pc, ret); in l3ni1_status_enq()
1910 pc->para.cause = 30; /* response to STATUS_ENQUIRY */ in l3ni1_status_enq()
1911 l3ni1_status_send(pc, pr, NULL); in l3ni1_status_enq()
1915 l3ni1_information(struct l3_process *pc, u_char pr, void *arg) in l3ni1_information() argument
1922 ret = check_infoelements(pc, skb, ie_INFORMATION); in l3ni1_information()
1924 l3ni1_std_ie_err(pc, ret); in l3ni1_information()
1925 if (pc->state == 25) { /* overlap receiving */ in l3ni1_information()
1926 L3DelTimer(&pc->timer); in l3ni1_information()
1930 strcat(pc->para.setup.eazmsn, tmp); in l3ni1_information()
1931 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3ni1_information()
1933 L3AddTimer(&pc->timer, T302, CC_T302); in l3ni1_information()
1940 static void l3ni1_redir_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_redir_req() argument
1951 strcpy(pc->prot.ni1.uus1_data, pc->chan->setup.eazmsn); /* copy uus element if available */ in l3ni1_redir_req()
1952 if (!pc->chan->setup.phone[0]) in l3ni1_redir_req()
1953 { pc->para.cause = -1; in l3ni1_redir_req()
1954 l3ni1_disconnect_req(pc, pr, arg); /* disconnect immediately */ in l3ni1_redir_req()
1958 if (pc->prot.ni1.invoke_id) in l3ni1_redir_req()
1959 free_invoke_id(pc->st, pc->prot.ni1.invoke_id); in l3ni1_redir_req()
1961 if (!(pc->prot.ni1.invoke_id = new_invoke_id(pc->st))) in l3ni1_redir_req()
1964 MsgHead(p, pc->callref, MT_FACILITY); in l3ni1_redir_req()
1966 …for (subp = pc->chan->setup.phone; (*subp) && (*subp != '.'); subp++) len_phone++; /* len of phone… in l3ni1_redir_req()
1977 *p++ = pc->prot.ni1.invoke_id; /* invoke id */ in l3ni1_redir_req()
1990 *p++ = pc->chan->setup.phone[l]; in l3ni1_redir_req()
2000 *p++ = pc->chan->setup.screen; in l3ni1_redir_req()
2006 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_redir_req()
2012 static void l3ni1_redir_req_early(struct l3_process *pc, u_char pr, void *arg) in l3ni1_redir_req_early() argument
2014 l3ni1_proceed_req(pc, pr, arg); in l3ni1_redir_req_early()
2015 l3ni1_redir_req(pc, pr, arg); in l3ni1_redir_req_early()
2029 struct l3_process *pc = NULL; in l3ni1_cmd_global() local
2063 if (!(pc = ni1_new_l3_process(st, -1))) in l3ni1_cmd_global()
2067 pc->prot.ni1.ll_id = ic->parm.ni1_io.ll_id; /* remember id */ in l3ni1_cmd_global()
2068 pc->prot.ni1.proc = ic->parm.ni1_io.proc; /* and procedure */ in l3ni1_cmd_global()
2072 if (pc) ni1_release_l3_process(pc); in l3ni1_cmd_global()
2077 if (pc) in l3ni1_cmd_global()
2078 { pc->prot.ni1.invoke_id = id; /* remember id */ in l3ni1_cmd_global()
2079 L3AddTimer(&pc->timer, ic->parm.ni1_io.timeout, CC_TNI1_IO | REQUEST); in l3ni1_cmd_global()
2087 if ((pc = l3ni1_search_dummy_proc(st, ic->parm.ni1_io.hl_id))) in l3ni1_cmd_global()
2088 { L3DelTimer(&pc->timer); /* remove timer */ in l3ni1_cmd_global()
2089 ni1_release_l3_process(pc); in l3ni1_cmd_global()
2106 l3ni1_io_timer(struct l3_process *pc) in l3ni1_io_timer() argument
2108 struct IsdnCardState *cs = pc->st->l1.hardware; in l3ni1_io_timer()
2110 L3DelTimer(&pc->timer); /* remove timer */ in l3ni1_io_timer()
2115 ic.parm.ni1_io.hl_id = pc->prot.ni1.invoke_id; in l3ni1_io_timer()
2116 ic.parm.ni1_io.ll_id = pc->prot.ni1.ll_id; in l3ni1_io_timer()
2117 ic.parm.ni1_io.proc = pc->prot.ni1.proc; in l3ni1_io_timer()
2121 free_invoke_id(pc->st, pc->prot.ni1.invoke_id); in l3ni1_io_timer()
2122 pc->prot.ni1.invoke_id = 0; /* reset id */ in l3ni1_io_timer()
2126 ni1_release_l3_process(pc); in l3ni1_io_timer()
2130 l3ni1_release_ind(struct l3_process *pc, u_char pr, void *arg) in l3ni1_release_ind() argument
2146 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_release_ind()
2147 newl3state(pc, 0); in l3ni1_release_ind()
2148 ni1_release_l3_process(pc); in l3ni1_release_ind()
2150 pc->st->l3.l3l4(pc->st, CC_IGNORE | INDICATION, pc); in l3ni1_release_ind()
2155 l3ni1_dummy(struct l3_process *pc, u_char pr, void *arg) in l3ni1_dummy() argument
2160 l3ni1_t302(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t302() argument
2162 L3DelTimer(&pc->timer); in l3ni1_t302()
2163 pc->para.loc = 0; in l3ni1_t302()
2164 pc->para.cause = 28; /* invalid number */ in l3ni1_t302()
2165 l3ni1_disconnect_req(pc, pr, NULL); in l3ni1_t302()
2166 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3ni1_t302()
2170 l3ni1_t303(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t303() argument
2172 if (pc->N303 > 0) { in l3ni1_t303()
2173 pc->N303--; in l3ni1_t303()
2174 L3DelTimer(&pc->timer); in l3ni1_t303()
2175 l3ni1_setup_req(pc, pr, arg); in l3ni1_t303()
2177 L3DelTimer(&pc->timer); in l3ni1_t303()
2178 l3ni1_message_cause(pc, MT_RELEASE_COMPLETE, 102); in l3ni1_t303()
2179 pc->st->l3.l3l4(pc->st, CC_NOSETUP_RSP, pc); in l3ni1_t303()
2180 ni1_release_l3_process(pc); in l3ni1_t303()
2185 l3ni1_t304(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t304() argument
2187 L3DelTimer(&pc->timer); in l3ni1_t304()
2188 pc->para.loc = 0; in l3ni1_t304()
2189 pc->para.cause = 102; in l3ni1_t304()
2190 l3ni1_disconnect_req(pc, pr, NULL); in l3ni1_t304()
2191 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3ni1_t304()
2196 l3ni1_t305(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t305() argument
2204 L3DelTimer(&pc->timer); in l3ni1_t305()
2205 if (pc->para.cause != NO_CAUSE) in l3ni1_t305()
2206 cause = pc->para.cause; in l3ni1_t305()
2208 MsgHead(p, pc->callref, MT_RELEASE); in l3ni1_t305()
2219 newl3state(pc, 19); in l3ni1_t305()
2220 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_t305()
2221 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3ni1_t305()
2225 l3ni1_t310(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t310() argument
2227 L3DelTimer(&pc->timer); in l3ni1_t310()
2228 pc->para.loc = 0; in l3ni1_t310()
2229 pc->para.cause = 102; in l3ni1_t310()
2230 l3ni1_disconnect_req(pc, pr, NULL); in l3ni1_t310()
2231 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3ni1_t310()
2235 l3ni1_t313(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t313() argument
2237 L3DelTimer(&pc->timer); in l3ni1_t313()
2238 pc->para.loc = 0; in l3ni1_t313()
2239 pc->para.cause = 102; in l3ni1_t313()
2240 l3ni1_disconnect_req(pc, pr, NULL); in l3ni1_t313()
2241 pc->st->l3.l3l4(pc->st, CC_CONNECT_ERR, pc); in l3ni1_t313()
2245 l3ni1_t308_1(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t308_1() argument
2247 newl3state(pc, 19); in l3ni1_t308_1()
2248 L3DelTimer(&pc->timer); in l3ni1_t308_1()
2249 l3ni1_message(pc, MT_RELEASE); in l3ni1_t308_1()
2250 L3AddTimer(&pc->timer, T308, CC_T308_2); in l3ni1_t308_1()
2254 l3ni1_t308_2(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t308_2() argument
2256 L3DelTimer(&pc->timer); in l3ni1_t308_2()
2257 pc->st->l3.l3l4(pc->st, CC_RELEASE_ERR, pc); in l3ni1_t308_2()
2258 ni1_release_l3_process(pc); in l3ni1_t308_2()
2262 l3ni1_t318(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t318() argument
2264 L3DelTimer(&pc->timer); in l3ni1_t318()
2265 pc->para.cause = 102; /* Timer expiry */ in l3ni1_t318()
2266 pc->para.loc = 0; /* local */ in l3ni1_t318()
2267 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3ni1_t318()
2268 newl3state(pc, 19); in l3ni1_t318()
2269 l3ni1_message(pc, MT_RELEASE); in l3ni1_t318()
2270 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3ni1_t318()
2274 l3ni1_t319(struct l3_process *pc, u_char pr, void *arg) in l3ni1_t319() argument
2276 L3DelTimer(&pc->timer); in l3ni1_t319()
2277 pc->para.cause = 102; /* Timer expiry */ in l3ni1_t319()
2278 pc->para.loc = 0; /* local */ in l3ni1_t319()
2279 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3ni1_t319()
2280 newl3state(pc, 10); in l3ni1_t319()
2284 l3ni1_restart(struct l3_process *pc, u_char pr, void *arg) in l3ni1_restart() argument
2286 L3DelTimer(&pc->timer); in l3ni1_restart()
2287 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_restart()
2288 ni1_release_l3_process(pc); in l3ni1_restart()
2292 l3ni1_status(struct l3_process *pc, u_char pr, void *arg) in l3ni1_status() argument
2299 if ((ret = l3ni1_get_cause(pc, skb))) { in l3ni1_status()
2300 if (pc->debug & L3_DEB_WARN) in l3ni1_status()
2301 l3_debug(pc->st, "STATUS get_cause ret(%d)", ret); in l3ni1_status()
2311 if (!ie_in_set(pc, *p, l3_valid_states)) in l3ni1_status()
2318 ret = check_infoelements(pc, skb, ie_STATUS); in l3ni1_status()
2327 if (pc->debug & L3_DEB_WARN) in l3ni1_status()
2328 l3_debug(pc->st, "STATUS error(%d/%d)", ret, cause); in l3ni1_status()
2329 tmp = pc->para.cause; in l3ni1_status()
2330 pc->para.cause = cause; in l3ni1_status()
2331 l3ni1_status_send(pc, 0, NULL); in l3ni1_status()
2333 pc->para.cause = tmp; in l3ni1_status()
2337 cause = pc->para.cause; in l3ni1_status()
2343 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_status()
2344 newl3state(pc, 0); in l3ni1_status()
2345 ni1_release_l3_process(pc); in l3ni1_status()
2350 l3ni1_facility(struct l3_process *pc, u_char pr, void *arg) in l3ni1_facility() argument
2355 ret = check_infoelements(pc, skb, ie_FACILITY); in l3ni1_facility()
2356 l3ni1_std_ie_err(pc, ret); in l3ni1_facility()
2360 l3ni1_parse_facility(pc->st, pc, pc->callref, p); in l3ni1_facility()
2365 l3ni1_suspend_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_suspend_req() argument
2371 u_char *msg = pc->chan->setup.phone; in l3ni1_suspend_req()
2373 MsgHead(p, pc->callref, MT_SUSPEND); in l3ni1_suspend_req()
2381 l3_debug(pc->st, "SUS wrong CALL_ID len %d", l); in l3ni1_suspend_req()
2388 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_suspend_req()
2389 newl3state(pc, 15); in l3ni1_suspend_req()
2390 L3AddTimer(&pc->timer, T319, CC_T319); in l3ni1_suspend_req()
2394 l3ni1_suspend_ack(struct l3_process *pc, u_char pr, void *arg) in l3ni1_suspend_ack() argument
2399 L3DelTimer(&pc->timer); in l3ni1_suspend_ack()
2400 newl3state(pc, 0); in l3ni1_suspend_ack()
2401 pc->para.cause = NO_CAUSE; in l3ni1_suspend_ack()
2402 pc->st->l3.l3l4(pc->st, CC_SUSPEND | CONFIRM, pc); in l3ni1_suspend_ack()
2404 if ((ret = check_infoelements(pc, skb, ie_SUSPEND_ACKNOWLEDGE))) in l3ni1_suspend_ack()
2405 if (pc->debug & L3_DEB_WARN) in l3ni1_suspend_ack()
2406 l3_debug(pc->st, "SUSPACK check ie(%d)", ret); in l3ni1_suspend_ack()
2407 ni1_release_l3_process(pc); in l3ni1_suspend_ack()
2411 l3ni1_suspend_rej(struct l3_process *pc, u_char pr, void *arg) in l3ni1_suspend_rej() argument
2416 if ((ret = l3ni1_get_cause(pc, skb))) { in l3ni1_suspend_rej()
2417 if (pc->debug & L3_DEB_WARN) in l3ni1_suspend_rej()
2418 l3_debug(pc->st, "SUSP_REJ get_cause ret(%d)", ret); in l3ni1_suspend_rej()
2420 pc->para.cause = 96; in l3ni1_suspend_rej()
2422 pc->para.cause = 100; in l3ni1_suspend_rej()
2423 l3ni1_status_send(pc, pr, NULL); in l3ni1_suspend_rej()
2426 ret = check_infoelements(pc, skb, ie_SUSPEND_REJECT); in l3ni1_suspend_rej()
2428 l3ni1_std_ie_err(pc, ret); in l3ni1_suspend_rej()
2431 L3DelTimer(&pc->timer); in l3ni1_suspend_rej()
2432 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3ni1_suspend_rej()
2433 newl3state(pc, 10); in l3ni1_suspend_rej()
2435 l3ni1_std_ie_err(pc, ret); in l3ni1_suspend_rej()
2439 l3ni1_resume_req(struct l3_process *pc, u_char pr, void *arg) in l3ni1_resume_req() argument
2445 u_char *msg = pc->para.setup.phone; in l3ni1_resume_req()
2447 MsgHead(p, pc->callref, MT_RESUME); in l3ni1_resume_req()
2456 l3_debug(pc->st, "RES wrong CALL_ID len %d", l); in l3ni1_resume_req()
2463 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_resume_req()
2464 newl3state(pc, 17); in l3ni1_resume_req()
2465 L3AddTimer(&pc->timer, T318, CC_T318); in l3ni1_resume_req()
2469 l3ni1_resume_ack(struct l3_process *pc, u_char pr, void *arg) in l3ni1_resume_ack() argument
2474 if ((id = l3ni1_get_channel_id(pc, skb)) > 0) { in l3ni1_resume_ack()
2475 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3ni1_resume_ack()
2476 if (pc->debug & L3_DEB_WARN) in l3ni1_resume_ack()
2477 l3_debug(pc->st, "resume ack with wrong chid %x", id); in l3ni1_resume_ack()
2478 pc->para.cause = 100; in l3ni1_resume_ack()
2479 l3ni1_status_send(pc, pr, NULL); in l3ni1_resume_ack()
2482 pc->para.bchannel = id; in l3ni1_resume_ack()
2483 } else if (1 == pc->state) { in l3ni1_resume_ack()
2484 if (pc->debug & L3_DEB_WARN) in l3ni1_resume_ack()
2485 l3_debug(pc->st, "resume ack without chid (ret %d)", id); in l3ni1_resume_ack()
2486 pc->para.cause = 96; in l3ni1_resume_ack()
2487 l3ni1_status_send(pc, pr, NULL); in l3ni1_resume_ack()
2490 ret = check_infoelements(pc, skb, ie_RESUME_ACKNOWLEDGE); in l3ni1_resume_ack()
2492 l3ni1_std_ie_err(pc, ret); in l3ni1_resume_ack()
2495 L3DelTimer(&pc->timer); in l3ni1_resume_ack()
2496 pc->st->l3.l3l4(pc->st, CC_RESUME | CONFIRM, pc); in l3ni1_resume_ack()
2497 newl3state(pc, 10); in l3ni1_resume_ack()
2499 l3ni1_std_ie_err(pc, ret); in l3ni1_resume_ack()
2503 l3ni1_resume_rej(struct l3_process *pc, u_char pr, void *arg) in l3ni1_resume_rej() argument
2508 if ((ret = l3ni1_get_cause(pc, skb))) { in l3ni1_resume_rej()
2509 if (pc->debug & L3_DEB_WARN) in l3ni1_resume_rej()
2510 l3_debug(pc->st, "RES_REJ get_cause ret(%d)", ret); in l3ni1_resume_rej()
2512 pc->para.cause = 96; in l3ni1_resume_rej()
2514 pc->para.cause = 100; in l3ni1_resume_rej()
2515 l3ni1_status_send(pc, pr, NULL); in l3ni1_resume_rej()
2518 ret = check_infoelements(pc, skb, ie_RESUME_REJECT); in l3ni1_resume_rej()
2520 l3ni1_std_ie_err(pc, ret); in l3ni1_resume_rej()
2523 L3DelTimer(&pc->timer); in l3ni1_resume_rej()
2524 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3ni1_resume_rej()
2525 newl3state(pc, 0); in l3ni1_resume_rej()
2527 l3ni1_std_ie_err(pc, ret); in l3ni1_resume_rej()
2528 ni1_release_l3_process(pc); in l3ni1_resume_rej()
2532 l3ni1_global_restart(struct l3_process *pc, u_char pr, void *arg) in l3ni1_global_restart() argument
2541 newl3state(pc, 2); in l3ni1_global_restart()
2542 L3DelTimer(&pc->timer); in l3ni1_global_restart()
2546 l3_debug(pc->st, "Restart %x", ri); in l3ni1_global_restart()
2548 l3_debug(pc->st, "Restart without restart IE"); in l3ni1_global_restart()
2555 if (pc->st->l3.debug) in l3ni1_global_restart()
2556 l3_debug(pc->st, "Restart for channel %d", chan); in l3ni1_global_restart()
2558 newl3state(pc, 2); in l3ni1_global_restart()
2559 up = pc->st->l3.proc; in l3ni1_global_restart()
2569 MsgHead(p, pc->callref, MT_RESTART_ACKNOWLEDGE); in l3ni1_global_restart()
2582 newl3state(pc, 0); in l3ni1_global_restart()
2583 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3ni1_global_restart()
2587 l3ni1_dl_reset(struct l3_process *pc, u_char pr, void *arg) in l3ni1_dl_reset() argument
2589 pc->para.cause = 0x29; /* Temporary failure */ in l3ni1_dl_reset()
2590 pc->para.loc = 0; in l3ni1_dl_reset()
2591 l3ni1_disconnect_req(pc, pr, NULL); in l3ni1_dl_reset()
2592 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3ni1_dl_reset()
2596 l3ni1_dl_release(struct l3_process *pc, u_char pr, void *arg) in l3ni1_dl_release() argument
2598 newl3state(pc, 0); in l3ni1_dl_release()
2599 pc->para.cause = 0x1b; /* Destination out of order */ in l3ni1_dl_release()
2600 pc->para.loc = 0; in l3ni1_dl_release()
2601 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3ni1_dl_release()
2602 release_l3_process(pc); in l3ni1_dl_release()
2606 l3ni1_dl_reestablish(struct l3_process *pc, u_char pr, void *arg) in l3ni1_dl_reestablish() argument
2608 L3DelTimer(&pc->timer); in l3ni1_dl_reestablish()
2609 L3AddTimer(&pc->timer, T309, CC_T309); in l3ni1_dl_reestablish()
2610 l3_msg(pc->st, DL_ESTABLISH | REQUEST, NULL); in l3ni1_dl_reestablish()
2614 l3ni1_dl_reest_status(struct l3_process *pc, u_char pr, void *arg) in l3ni1_dl_reest_status() argument
2616 L3DelTimer(&pc->timer); in l3ni1_dl_reest_status()
2618 pc->para.cause = 0x1F; /* normal, unspecified */ in l3ni1_dl_reest_status()
2619 l3ni1_status_send(pc, 0, NULL); in l3ni1_dl_reest_status()
2622 static void l3ni1_SendSpid(struct l3_process *pc, u_char pr, struct sk_buff *skb, int iNewState) in l3ni1_SendSpid() argument
2626 struct Channel *pChan = pc->st->lli.userdata; in l3ni1_SendSpid()
2635 newl3state(pc, 0); in l3ni1_SendSpid()
2636 pc->st->l3.l3l2(pc->st, DL_RELEASE | REQUEST, NULL); in l3ni1_SendSpid()
2656 newl3state(pc, iNewState); in l3ni1_SendSpid()
2658 L3DelTimer(&pc->timer); in l3ni1_SendSpid()
2659 L3AddTimer(&pc->timer, TSPID, CC_TSPID); in l3ni1_SendSpid()
2661 pc->st->l3.l3l2(pc->st, DL_DATA | REQUEST, skb); in l3ni1_SendSpid()
2664 static void l3ni1_spid_send(struct l3_process *pc, u_char pr, void *arg) in l3ni1_spid_send() argument
2666 l3ni1_SendSpid(pc, pr, arg, 20); in l3ni1_spid_send()
2669 static void l3ni1_spid_epid(struct l3_process *pc, u_char pr, void *arg) in l3ni1_spid_epid() argument
2676 L3DelTimer(&pc->timer); in l3ni1_spid_epid()
2677 newl3state(pc, 0); in l3ni1_spid_epid()
2678 l3_msg(pc->st, DL_ESTABLISH | CONFIRM, NULL); in l3ni1_spid_epid()
2683 static void l3ni1_spid_tout(struct l3_process *pc, u_char pr, void *arg) in l3ni1_spid_tout() argument
2685 if (pc->state < 22) in l3ni1_spid_tout()
2686 l3ni1_SendSpid(pc, pr, arg, pc->state + 1); in l3ni1_spid_tout()
2689 L3DelTimer(&pc->timer); in l3ni1_spid_tout()
2693 newl3state(pc, 0); in l3ni1_spid_tout()
2694 pc->st->l3.l3l2(pc->st, DL_RELEASE | REQUEST, NULL); in l3ni1_spid_tout()