{
enum isis_threeway_state next_tw_state = ISIS_THREEWAY_DOWN;
- if (tw_adj) {
+ if (tw_adj && !adj->circuit->disable_threeway_adj) {
if (tw_adj->state == ISIS_THREEWAY_DOWN) {
next_tw_state = ISIS_THREEWAY_INITIALIZING;
} else if (tw_adj->state == ISIS_THREEWAY_INITIALIZING) {
write++;
}
+ if (circuit->disable_threeway_adj) {
+ vty_out(vty, " no isis three-way-handshake\n");
+ write++;
+ }
+
/* ISIS - Hello interval */
if (circuit->hello_interval[0]
== circuit->hello_interval[1]) {
u_int16_t upadjcount[2];
#define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
u_char flags;
+ bool disable_threeway_adj;
/*
* Counters as in 10589--11.2.5.9
*/
if (circuit->circ_type == CIRCUIT_T_BROADCAST) {
isis_tlvs_add_lan_neighbors(
tlvs, circuit->u.bc.lan_neighs[level - 1]);
- } else if (circuit->circ_type == CIRCUIT_T_P2P) {
+ } else if (circuit->circ_type == CIRCUIT_T_P2P
+ && !circuit->disable_threeway_adj) {
uint32_t ext_circuit_id = circuit->idx;
if (circuit->u.p2p.neighbor) {
isis_tlvs_add_threeway_adj(tlvs,
return CMD_SUCCESS;
}
+DEFUN (isis_threeway_adj,
+ isis_threeway_adj_cmd,
+ "[no] isis three-way-handshake",
+ NO_STR
+ "IS-IS commands\n"
+ "Enable/Disable three-way handshake\n")
+{
+ struct isis_circuit *circuit = isis_circuit_lookup(vty);
+ if (!circuit)
+ return CMD_ERR_NO_MATCH;
+
+ circuit->disable_threeway_adj = !strcmp(argv[0]->text, "no");
+ return CMD_SUCCESS;
+}
+
DEFUN (csnp_interval,
csnp_interval_cmd,
"isis csnp-interval (1-600)",
install_element(INTERFACE_NODE, &isis_hello_padding_cmd);
install_element(INTERFACE_NODE, &no_isis_hello_padding_cmd);
+ install_element(INTERFACE_NODE, &isis_threeway_adj_cmd);
+
install_element(INTERFACE_NODE, &csnp_interval_cmd);
install_element(INTERFACE_NODE, &no_csnp_interval_cmd);
install_element(INTERFACE_NODE, &csnp_interval_l1_cmd);