diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index c5812a658d..0ea6c3d453 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -606,6 +606,18 @@ isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream) } } +void +isis_circuit_prepare (struct isis_circuit *circuit) +{ +#ifdef GNU_LINUX + THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, + circuit->fd); +#else + THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit, + listcount (circuit->area->circuit_list) * 100); +#endif +} + int isis_circuit_up (struct isis_circuit *circuit) { @@ -715,13 +727,7 @@ isis_circuit_up (struct isis_circuit *circuit) isis_circuit_stream(circuit, &circuit->rcv_stream); isis_circuit_stream(circuit, &circuit->snd_stream); -#ifdef GNU_LINUX - THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, - circuit->fd); -#else - THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit, - listcount (circuit->area->circuit_list) * 100); -#endif + isis_circuit_prepare (circuit); circuit->lsp_queue = list_new (); circuit->lsp_queue_last_cleared = time (NULL); diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h index efe153f32e..035e558c0a 100644 --- a/isisd/isis_circuit.h +++ b/isisd/isis_circuit.h @@ -168,6 +168,7 @@ void isis_circuit_add_addr (struct isis_circuit *circuit, struct connected *conn); void isis_circuit_del_addr (struct isis_circuit *circuit, struct connected *conn); +void isis_circuit_prepare (struct isis_circuit *circuit); int isis_circuit_up (struct isis_circuit *circuit); void isis_circuit_down (struct isis_circuit *); void circuit_update_nlpids (struct isis_circuit *circuit); diff --git a/isisd/isis_pdu.c b/isisd/isis_pdu.c index 6fec498a4d..96e459a797 100644 --- a/isisd/isis_pdu.c +++ b/isisd/isis_pdu.c @@ -2134,41 +2134,6 @@ isis_handle_pdu (struct isis_circuit *circuit, u_char * ssnpa) return retval; } -#ifdef GNU_LINUX -int -isis_receive (struct thread *thread) -{ - struct isis_circuit *circuit; - u_char ssnpa[ETH_ALEN]; - int retval; - - /* - * Get the circuit - */ - circuit = THREAD_ARG (thread); - assert (circuit); - - isis_circuit_stream(circuit, &circuit->rcv_stream); - - retval = circuit->rx (circuit, ssnpa); - circuit->t_read = NULL; - - if (retval == ISIS_OK) - retval = isis_handle_pdu (circuit, ssnpa); - - /* - * prepare for next packet. - */ - if (!circuit->is_passive) - { - THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, - circuit->fd); - } - - return retval; -} - -#else int isis_receive (struct thread *thread) { @@ -2195,18 +2160,11 @@ isis_receive (struct thread *thread) * prepare for next packet. */ if (!circuit->is_passive) - { - circuit->t_read = thread_add_timer_msec (master, isis_receive, circuit, - listcount - (circuit->area->circuit_list) * - 100); - } + isis_circuit_prepare (circuit); return retval; } -#endif - /* filling of the fixed isis header */ void fill_fixed_hdr (struct isis_fixed_hdr *hdr, u_char pdu_type)