From 2dd5c27f39acf28f85af52b7ebffb2b3a9f464a1 Mon Sep 17 00:00:00 2001 From: saichint Date: Tue, 9 Aug 2016 11:24:39 -0700 Subject: [PATCH] Ospf parameters for interfaces (#460) * Add feature ospf enable * review comments * Fix interface_ospf * added pri, tx delay, shut and mtu to int ospf * changelog --- CHANGELOG.md | 4 ++ .../cmd_ref/interface_ospf.yaml | 24 +++++++ lib/cisco_node_utils/interface_ospf.rb | 68 ++++++++++++++++++ tests/test_interface_ospf.rb | 70 +++++++++++++++++++ 4 files changed, 166 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6065d0a3..80d1ab03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,11 @@ Changelog * `bfd_echo` * Extend interface_ospf with attributes: * `bfd` + * `mtu_ignore` * `network_type` + * `priority` + * `shutdown` + * `transmit_delay` * Extend interface_portchannel with attributes: * `bfd_per_link` * Extend router_ospf_vrf with attributes: diff --git a/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml b/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml index b9635c75..2a5a83a1 100644 --- a/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +++ b/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml @@ -64,6 +64,12 @@ message_digest_password: default_value: ~ get_value: '/^\s*ip ospf message-digest-key \d+ \S+ \d+ (\S+)/' +mtu_ignore: + kind: boolean + get_value: '/^\s*ip ospf mtu-ignore/' + set_value: "%s ip ospf mtu-ignore" + default_value: false + network_type: get_value: '/^\s*ip ospf network (\S+)$/' set_value: "%s ip ospf network %s" @@ -79,3 +85,21 @@ passive_interface: get_value: '/^\s*ip ospf passive-interface/' set_value: "%s ip ospf passive-interface" default_value: false + +priority: + kind: int + get_value: '/^\s*ip ospf priority (\d+)/' + set_value: "%s ip ospf priority %s" + default_value: 1 + +shutdown: + kind: boolean + get_value: '/^\s*ip ospf shutdown/' + set_value: "%s ip ospf shutdown" + default_value: false + +transmit_delay: + kind: int + get_value: '/^\s*ip ospf transmit-delay (\d+)/' + set_value: "%s ip ospf transmit-delay %s" + default_value: 1 diff --git a/lib/cisco_node_utils/interface_ospf.rb b/lib/cisco_node_utils/interface_ospf.rb index 5563c15e..8f7f48ce 100644 --- a/lib/cisco_node_utils/interface_ospf.rb +++ b/lib/cisco_node_utils/interface_ospf.rb @@ -93,8 +93,12 @@ def destroy config_set('interface_ospf', 'dead_interval', @interface.name, 'no', '') self.bfd = default_bfd + self.mtu_ignore = default_mtu_ignore + self.priority = default_priority self.network_type = default_network_type self.passive_interface = default_passive_interface if passive_interface + self.shutdown = default_shutdown + self.transmit_delay = default_transmit_delay end def default_message_digest @@ -250,6 +254,21 @@ def default_network_type config_get_default('interface_ospf', lookup) end + def mtu_ignore + config_get('interface_ospf', 'mtu_ignore', @interface.name) + end + + # interface %s + # %s ip ospf mtu-ignore + def mtu_ignore=(enable) + config_set('interface_ospf', 'mtu_ignore', @interface.name, + enable ? '' : 'no') + end + + def default_mtu_ignore + config_get_default('interface_ospf', 'mtu_ignore') + end + def network_type type = config_get('interface_ospf', 'network_type', @interface.name) return 'p2p' if type == 'point-to-point' @@ -282,5 +301,54 @@ def passive_interface=(enable) config_set('interface_ospf', 'passive_interface', @interface.name, enable ? '' : 'no') end + + def priority + config_get('interface_ospf', 'priority', @interface.name) + end + + # interface %s + # ip ospf priority %d + def priority=(val) + no_cmd = (val == default_priority) ? 'no' : '' + pri = (val == default_priority) ? '' : val + config_set('interface_ospf', 'priority', + @interface.name, no_cmd, pri) + end + + def default_priority + config_get_default('interface_ospf', 'priority') + end + + def shutdown + config_get('interface_ospf', 'shutdown', @interface.name) + end + + # interface %s + # %s ip ospf shutdown + def shutdown=(state) + config_set('interface_ospf', 'shutdown', @interface.name, + state ? '' : 'no') + end + + def default_shutdown + config_get_default('interface_ospf', 'shutdown') + end + + def transmit_delay + config_get('interface_ospf', 'transmit_delay', @interface.name) + end + + # interface %s + # ip ospf transmit-delay %d + def transmit_delay=(val) + no_cmd = (val == default_transmit_delay) ? 'no' : '' + delay = (val == default_transmit_delay) ? '' : val + config_set('interface_ospf', 'transmit_delay', + @interface.name, no_cmd, delay) + end + + def default_transmit_delay + config_get_default('interface_ospf', 'transmit_delay') + end end end diff --git a/tests/test_interface_ospf.rb b/tests/test_interface_ospf.rb index 12ae985e..992c8e8d 100644 --- a/tests/test_interface_ospf.rb +++ b/tests/test_interface_ospf.rb @@ -142,10 +142,26 @@ def test_collection_not_empty 'bfd'), interface.bfd, 'Error: bfd get failed') + assert_equal(node.config_get_default('interface_ospf', + 'mtu_ignore'), + interface.mtu_ignore, + 'Error: mtu_ignore get failed') + assert_equal(node.config_get_default('interface_ospf', + 'priority'), + interface.priority, + 'Error: priority get failed') assert_equal(node.config_get_default('interface_ospf', 'network_type_default'), interface.network_type, 'Error: network type get failed') + assert_equal(node.config_get_default('interface_ospf', + 'shutdown'), + interface.shutdown, + 'Error: shutdown get failed') + assert_equal(node.config_get_default('interface_ospf', + 'transmit_delay'), + interface.transmit_delay, + 'Error: transmit_delay get failed') assert_equal(node.config_get_default('interface_ospf', 'passive_interface'), interface.passive_interface, @@ -222,6 +238,18 @@ def test_destroy refute_show_match(pattern: /^\s+ip ospf bfd \S+/, msg: "'bfd' not removed") + refute_show_match(pattern: /^\s+ip ospf mtu-ignore \S+/, + msg: "'mtu_ignore' not removed") + + refute_show_match(pattern: /^\s+ip ospf shutdown \S+/, + msg: "'shutdown' not removed") + + refute_show_match(pattern: /^\s+ip ospf transmit-delay \S+/, + msg: "'transmit_delay' not removed") + + refute_show_match(pattern: /^\s+ip ospf priority \S+/, + msg: "'priority' not removed") + refute_show_match(pattern: /^\s+ip ospf network point-to-point/, msg: "'network_type' not removed") @@ -340,6 +368,16 @@ def test_bfd assert_equal(interface.default_bfd, interface.bfd) end + def test_mtu_ignore + ospf = create_routerospf + interface = create_interfaceospf(ospf) + assert_equal(interface.default_mtu_ignore, interface.mtu_ignore) + interface.mtu_ignore = true + assert_equal(true, interface.mtu_ignore) + interface.mtu_ignore = interface.default_mtu_ignore + assert_equal(interface.default_mtu_ignore, interface.mtu_ignore) + end + def test_network_type ospf = create_routerospf interface = create_interfaceospf(ospf) @@ -379,6 +417,36 @@ def test_passive msg: 'default passive interface set failed') end + def test_priority + ospf = create_routerospf + interface = create_interfaceospf(ospf) + assert_equal(interface.default_priority, interface.priority) + interface.priority = 100 + assert_equal(100, interface.priority) + interface.priority = interface.default_priority + assert_equal(interface.default_priority, interface.priority) + end + + def test_shutdown + ospf = create_routerospf + interface = create_interfaceospf(ospf) + assert_equal(interface.default_shutdown, interface.shutdown) + interface.shutdown = true + assert_equal(true, interface.shutdown) + interface.shutdown = interface.default_shutdown + assert_equal(interface.default_shutdown, interface.shutdown) + end + + def test_transmit_delay + ospf = create_routerospf + interface = create_interfaceospf(ospf) + assert_equal(interface.default_transmit_delay, interface.transmit_delay) + interface.transmit_delay = 400 + assert_equal(400, interface.transmit_delay) + interface.transmit_delay = interface.default_transmit_delay + assert_equal(interface.default_transmit_delay, interface.transmit_delay) + end + def test_mult # ospf and interfaces[0] ospf = create_routerospf @@ -501,6 +569,7 @@ def test_collect_mult_intf # enable feature ospf config('no feature ospf', 'feature ospf', + 'feature bfd', 'feature interface-vlan', "default interface #{interfaces[0]}", "default interface #{interfaces[1]}", @@ -544,6 +613,7 @@ def test_collect_mult_intf # disable feature interface-vlan config('no feature interface-vlan') + config('no feature bfd') # clean up port channel ospf_h.each_value do |v| v.each_key do |k1|