return 0;
}
+static int misdn_restart_pid (int fd, int argc, char *argv[])
+{
+ int pid;
+
+ if (argc != 4)
+ return RESULT_SHOWUSAGE;
+
+ pid = atoi(argv[3]);
+
+ misdn_lib_pid_restart(pid);
+
+ return 0;
+}
+
static int misdn_port_up (int fd, int argc, char *argv[])
{
int port;
"Usage: misdn restart port\n"
};
+static struct ast_cli_entry cli_restart_pid =
+{ {"misdn","restart","pid", NULL},
+ misdn_restart_pid,
+ "Restarts the given pid",
+ "Usage: misdn restart pid\n"
+};
+
static struct ast_cli_entry cli_port_up =
{ {"misdn","port","up", NULL},
misdn_port_up,
ast_cli_register(&cli_port_block);
ast_cli_register(&cli_port_unblock);
ast_cli_register(&cli_restart_port);
+ ast_cli_register(&cli_restart_pid);
ast_cli_register(&cli_port_up);
ast_cli_register(&cli_port_down);
ast_cli_register(&cli_set_debug);
ast_cli_unregister(&cli_show_stacks);
ast_cli_unregister(&cli_port_block);
ast_cli_unregister(&cli_port_unblock);
- ast_cli_unregister(&cli_restart_port);
+ ast_cli_unregister(&cli_restart_pid);
ast_cli_unregister(&cli_port_up);
ast_cli_unregister(&cli_port_down);
ast_cli_unregister(&cli_set_debug);
int manager_isdn_handler(iframe_t *frm ,msg_t *msg);
int misdn_lib_port_restart(int port);
+int misdn_lib_pid_restart(int pid);
extern struct isdn_msg msgs_g[];
int empty_chan_in_stack(struct misdn_stack *stack, int channel)
{
- if (channel<=0) {
+ if (channel<=0 || channel>=MAX_BCHANS) {
cb_log(0,stack?stack->port:0, "empty_chan_inst_stack: cannot empty channel %d\n",channel);
return -1;
}
cb_log(4,stack->port,"set_chan_in_stack: %d\n",channel);
dump_chan_list(stack);
- if (channel >=1 ) {
+ if (channel >=1 && channel <= MAX_BCHANS) {
if (!stack->channels[channel-1])
stack->channels[channel-1] = 1;
else {
stack->l1link=0;
clear_l3(stack);
-
break;
case SSTATUS_L2_ESTABLISHED:
bc->need_disconnect=0;
bc->need_release=0;
bc->need_release_complete=0;
+
+ if (!stack->nt) {
+ /*create clenaup in TE*/
+ if (bc->channel>0)
+ empty_chan_in_stack(stack,bc->channel);
+ int tmpcause=bc->cause;
+ empty_bc(bc);
+ bc->cause=tmpcause;
+ clean_up_bc(bc);
+ }
break;
case EVENT_CONNECT_ACKNOWLEDGE:
}
+int misdn_lib_pid_restart(int pid)
+{
+ struct misdn_bchannel *bc=manager_find_bc_by_pid(pid);
+
+ if (bc) {
+ manager_clean_bc(bc);
+ }
+}
+
int misdn_lib_port_restart(int port)
{
struct misdn_stack *stack=find_stack_by_port(port);
empty_chan_in_stack(stack, bc->channel);
empty_bc(bc);
- misdn_lib_send_event(bc,EVENT_RELEASE_COMPLETE);
+ cb_event(EVENT_CLEANUP, bc, NULL);
}
int misdn_lib_port_restart(int port);
+int misdn_lib_pid_restart(int pid);
+
int misdn_lib_get_port_info(int port);
int misdn_lib_is_port_blocked(int port);
{ "txgain", MISDN_CFG_TXGAIN, MISDN_CTYPE_INT, "0", NONE },
{ "te_choose_channel", MISDN_CFG_TE_CHOOSE_CHANNEL, MISDN_CTYPE_BOOL, "no", NONE },
{ "far_alerting", MISDN_CFG_FAR_ALERTING, MISDN_CTYPE_BOOL, "no", NONE },
- { "pmp_l1_check", MISDN_CFG_PMP_L1_CHECK, MISDN_CTYPE_BOOL, "yes", NONE },
+ { "pmp_l1_check", MISDN_CFG_PMP_L1_CHECK, MISDN_CTYPE_BOOL, "no", NONE },
{ "reject_cause", MISDN_CFG_REJECT_CAUSE, MISDN_CTYPE_INT, "21", NONE },
{ "block_on_alarm", MISDN_CFG_ALARM_BLOCK, MISDN_CTYPE_BOOL, "no", NONE },
{ "hdlc", MISDN_CFG_HDLC, MISDN_CTYPE_BOOL, "no", NONE },
; as well, since chan_misdn has no chance to distinguish if the L1 is down
; because of a lost Link or because the Provider shut it down...
;
-; default: yes
+; default: no
;
-pmp_l1_check=yes
+pmp_l1_check=no