diff options
Diffstat (limited to 'isisd/isis_circuit.c')
| -rw-r--r-- | isisd/isis_circuit.c | 65 |
1 files changed, 46 insertions, 19 deletions
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 6207ae189a..bafc37a755 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -14,10 +14,10 @@ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. - - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <zebra.h> #ifdef GNU_LINUX @@ -60,6 +60,7 @@ #include "isisd/isis_csm.h" #include "isisd/isis_events.h" #include "isisd/isis_te.h" +#include "isisd/isis_mt.h" DEFINE_QOBJ_TYPE(isis_circuit) @@ -102,6 +103,8 @@ isis_circuit_new () circuit->mtc = mpls_te_circuit_new(); + circuit_mt_init(circuit); + QOBJ_REG (circuit, isis_circuit); return circuit; @@ -117,6 +120,8 @@ isis_circuit_del (struct isis_circuit *circuit) isis_circuit_if_unbind (circuit, circuit->interface); + circuit_mt_finish(circuit); + /* and lastly the circuit itself */ XFREE (MTYPE_ISIS_CIRCUIT, circuit); @@ -602,11 +607,12 @@ void isis_circuit_prepare (struct isis_circuit *circuit) { #ifdef GNU_LINUX - THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, - circuit->fd); + thread_add_read(master, isis_receive, circuit, circuit->fd, + &circuit->t_read); #else - THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit, - listcount (circuit->area->circuit_list) * 100); + thread_add_timer_msec(master, isis_receive, circuit, + listcount(circuit->area->circuit_list) * 100, + &circuit->t_read); #endif } @@ -667,13 +673,13 @@ isis_circuit_up (struct isis_circuit *circuit) if (circuit->is_type & IS_LEVEL_1) { - thread_add_event (master, send_lan_l1_hello, circuit, 0); + thread_add_event(master, send_lan_l1_hello, circuit, 0, NULL); circuit->u.bc.lan_neighs[0] = list_new (); } if (circuit->is_type & IS_LEVEL_2) { - thread_add_event (master, send_lan_l2_hello, circuit, 0); + thread_add_event(master, send_lan_l2_hello, circuit, 0, NULL); circuit->u.bc.lan_neighs[1] = list_new (); } @@ -683,11 +689,13 @@ isis_circuit_up (struct isis_circuit *circuit) /* 8.4.1 d) */ /* dr election will commence in... */ if (circuit->is_type & IS_LEVEL_1) - THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[0], isis_run_dr_l1, - circuit, 2 * circuit->hello_interval[0]); + thread_add_timer(master, isis_run_dr_l1, circuit, + 2 * circuit->hello_interval[0], + &circuit->u.bc.t_run_dr[0]); if (circuit->is_type & IS_LEVEL_2) - THREAD_TIMER_ON (master, circuit->u.bc.t_run_dr[1], isis_run_dr_l2, - circuit, 2 * circuit->hello_interval[1]); + thread_add_timer(master, isis_run_dr_l2, circuit, + 2 * circuit->hello_interval[1], + &circuit->u.bc.t_run_dr[1]); } else { @@ -695,17 +703,19 @@ isis_circuit_up (struct isis_circuit *circuit) * for a ptp IF */ circuit->u.p2p.neighbor = NULL; - thread_add_event (master, send_p2p_hello, circuit, 0); + thread_add_event(master, send_p2p_hello, circuit, 0, NULL); } /* initializing PSNP timers */ if (circuit->is_type & IS_LEVEL_1) - THREAD_TIMER_ON (master, circuit->t_send_psnp[0], send_l1_psnp, circuit, - isis_jitter (circuit->psnp_interval[0], PSNP_JITTER)); + thread_add_timer(master, send_l1_psnp, circuit, + isis_jitter(circuit->psnp_interval[0], PSNP_JITTER), + &circuit->t_send_psnp[0]); if (circuit->is_type & IS_LEVEL_2) - THREAD_TIMER_ON (master, circuit->t_send_psnp[1], send_l2_psnp, circuit, - isis_jitter (circuit->psnp_interval[1], PSNP_JITTER)); + thread_add_timer(master, send_l2_psnp, circuit, + isis_jitter(circuit->psnp_interval[1], PSNP_JITTER), + &circuit->t_send_psnp[1]); /* unified init for circuits; ignore warnings below this level */ retv = isis_sock_init (circuit); @@ -1215,6 +1225,7 @@ isis_interface_config_write (struct vty *vty) VTY_NEWLINE); write++; } + write += circuit_write_mt_settings(circuit, vty); } vty_out (vty, "!%s", VTY_NEWLINE); } @@ -1383,6 +1394,22 @@ isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type) } int +isis_circuit_mt_enabled_set (struct isis_circuit *circuit, uint16_t mtid, + bool enabled) +{ + struct isis_circuit_mt_setting *setting; + + setting = circuit_get_mt_setting(circuit, mtid); + if (setting->enabled != enabled) + { + setting->enabled = enabled; + lsp_regenerate_schedule (circuit->area, IS_LEVEL_1 | IS_LEVEL_2, 0); + } + + return CMD_SUCCESS; +} + +int isis_if_new_hook (struct interface *ifp) { return 0; |
