Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 1dc41de5 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

Delete ospfv3.py

parent 0c2c5b7b
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# License: GNU General Public License v2
#
# Author: thl-cmk[at]outlook[dot]com
# URL : https://thl-cmk.hopto.org
# Date : 2021-09-28
#
# wato plugin for ospfv3 check
#
# 2022-11-30: fixed CheckParameterRulespecWithoutItem (from CheckParameterRulespecWithItem)
#
from cmk.gui.i18n import _
from cmk.gui.valuespec import (
Dictionary,
TextAscii,
ListOf,
Tuple,
TextUnicode,
MonitoringState,
FixedValue,
)
from cmk.gui.plugins.wato import (
CheckParameterRulespecWithItem,
CheckParameterRulespecWithoutItem,
rulespec_registry,
RulespecGroupCheckParametersNetworking,
RulespecGroupCheckParametersDiscovery,
HostRulespec,
)
neighbor_states = ('neighbor_states',
Dictionary(
title=_('State to report for OSPF neighbor state'),
help=_('Map each OSPF state to a CheckMK monitoring state'),
elements=[
('1',
MonitoringState(
title=_('1 - down'),
help=_(
'This is the first OSPF neighbor state. It means that no information (hellos) has '
'been received from this neighbor, but hello packets can still be sent to the '
'neighbor in this state. During the fully adjacent neighbor state, if a router '
'doesn\'t receive hello packet from a neighbor within the RouterDeadInterval time '
'(RouterDeadInterval = 4*HelloInterval by default) or if the manually configured '
'neighbor is being removed from the configuration, then the neighbor state changes '
'from Full to Down. Default monitoring state is "CRIT"'),
default_value=2,
)),
('2',
MonitoringState(
title=_('2 - attempt'),
help=_(
'This state is only valid for manually configured neighbors in an NBMA '
'environment. In Attempt state, the router sends unicast hello packets every poll '
'interval to the neighbor, from which hellos have not been received within the '
'dead interval. Default monitoring state is "WARN"'),
default_value=1,
)),
('3',
MonitoringState(
title=_('3 - init'),
help=_(
'This state specifies that the router has received a hello packet from its '
'neighbor, but the receiving router\'s ID was not included in the hello packet. '
'When a router receives a hello packet from a neighbor, it should list the '
'sender\'s router ID in its hello packet as an acknowledgment that it received a '
'valid hello packet. Default monitoring state is "WARN"'),
default_value=1,
)),
('4',
MonitoringState(
title=_('4 - twoWay'),
help=_(
'This state designates that bi-directional communication has been established '
'between two routers. Bi-directional means that each router has seen the other\'s '
'hello packet. This state is attained when the router receiving the hello packet '
'sees its own Router ID within the received hello packet\'s neighbor field. At '
'this state, a router decides whether to become adjacent with this neighbor. On '
'broadcast media and non-broadcast multiaccess networks, a router becomes full '
'only with the designated router (DR) and the backup designated router (BDR); it '
'stays in the 2-way state with all other neighbors. On Point-to-point and '
'Point-to-multipoint networks, a router becomes full with all connected routers. '
'At the end of this stage, the DR and BDR for broadcast and non-broadcast '
'multiacess networks are elected. For more information on the DR election process, '
'refer to DR Election. Note: Receiving a Database Descriptor (DBD) packet from a '
'neighbor in the init state will also a cause a transition to 2-way state. Default '
'monitoring state is "OK"'),
default_value=0,
)),
('5',
MonitoringState(
title=_('5 - exchangeStart'),
help=_('Once the DR and BDR are elected, the actual process of exchanging link state '
'information can start between the routers and their DR and BDR. In this state, '
'the routers and their DR and BDR establish a master-slave relationship and '
'choose the initial sequence number for adjacency formation. The router with '
'the higher router ID becomes the master and starts the exchange, and as such, '
'is the only router that can increment the sequence number. Note that one would '
'logically conclude that the DR/BDR with the highest router ID will become the '
'master during this process of master-slave relation. Remember that the DR/BDR '
'election might be purely by virtue of a higher priority configured on the '
'router instead of highest router ID. Thus, it is possible that a DR plays the '
'role of slave. And also note that master/slave election is on a per-neighbor '
'basis. Default monitoring state is "WARN"'),
default_value=1,
)),
('6',
MonitoringState(
title=_('6 - exchange'),
help=_(
'In the exchange state, OSPF routers exchange database descriptor (DBD) packets. '
'Database descriptors contain link-state advertisement (LSA) headers only and '
'describe the contents of the entire link-state database. Each DBD packet has a '
'sequence number which can be incremented only by master which is explicitly '
'acknowledged by slave. Routers also send link-state request packets and '
'link-state update packets (which contain the entire LSA) in this state. The '
'contents of the DBD received are compared to the information contained in the '
'routers link-state database to check if new or more current link-state '
'information is available with the neighbor. Default monitoring state is "WARN"'),
default_value=1,
)),
('7',
MonitoringState(
title=_('7 - loading'),
help=_(
'In this state, the actual exchange of link state information occurs. Based on the '
'information provided by the DBDs, routers send link-state request packets. The '
'neighbor then provides the requested link-state information in link-state update '
'packets. During the adjacency, if a router receives an outdated or missing LSA, '
'it requests that LSA by sending a link-state request packet. All link-state '
'update packets are acknowledged. Default monitoring state is "WARN"'),
default_value=1,
)),
('8',
MonitoringState(
title=_('8 - full'),
help=_('In this state, routers are fully adjacent with each other. All the router and '
'network LSAs are exchanged and the routers databases are fully synchronized. '
'Full is the normal state for an OSPF router. If a router is stuck in another '
'state, it\'s an indication that there are problems in forming adjacencies. The '
'only exception to this is the 2-way state, which is normal in a broadcast '
'network. Routers achieve the full state with their DR and BDR only. Neighbors '
'always see each other as 2-way. Default monitoring state is "OK"'),
default_value=0,
)),
]))
# #####################################################
#
# OSPFv3 General
#
# #####################################################
def _parameter_valuespec_ospfv3_general():
return Dictionary(
elements=[
('state_admin_disabled',
MonitoringState(
title=_('State to report if OSPFv3 is admin disabled'),
help=_('Monitoring state if the OSPFv3 process is admin disabled. Default state is "WARNING"'),
default_value=1,
)),
],
)
rulespec_registry.register(
CheckParameterRulespecWithoutItem(
check_group_name='ospfv3_general',
group=RulespecGroupCheckParametersNetworking,
match_type='dict',
parameter_valuespec=_parameter_valuespec_ospfv3_general,
title=lambda: _('OSPFv3 general'),
))
def _valuespec_discovery_ospfv3_general():
return Dictionary(
title=_('OSPFv3 general'),
elements=[
('admin_disabled',
FixedValue(
True,
title=_('discover admin disabled OSPFv3 process'),
totext=_('discover admin disabled OSPFv3 process'),
default_value=False,
)),
],
)
rulespec_registry.register(
HostRulespec(
group=RulespecGroupCheckParametersDiscovery,
match_type='dict',
name='discovery_ospfv3_general',
valuespec=_valuespec_discovery_ospfv3_general,
))
# #####################################################
#
# OSPFv3 Interface
#
# #####################################################
def _parameter_valuespec_ospfv3_interface():
return Dictionary(
elements=[
('state_admin_disabled',
MonitoringState(
title=_('State to report if OSPFv3 is admin disabled'),
help=_('Monitoring state if OSPFv3 is admin disabled. Default state is "WARNING"'),
default_value=1,
)),
('state_if_down',
MonitoringState(
title=_('State to report if OSPFv3 is down'),
help=_('Monitoring state if OSPFv3 is down. Default state is "CRITICAL"'),
default_value=2,
)),
('state_if_wait_stby',
MonitoringState(
title=_('State to report if OSPFv3 is in waiting or standby'),
help=_('Monitoring state if OSPFv3 is waiting/standby. Default state is "WARNING"'),
default_value=1,
)),
],
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name='ospfv3_interface',
group=RulespecGroupCheckParametersNetworking,
item_spec=lambda: TextAscii(title=_('OSPFv3 interface'), ),
match_type='dict',
parameter_valuespec=_parameter_valuespec_ospfv3_interface,
title=lambda: _('OSPFv3 interface'),
))
# #####################################################
#
# OSPFv3 neighbor
#
# #####################################################
def _parameter_valuespec_ospfv3_neighbor():
return Dictionary(
elements=[
('state_not_found',
MonitoringState(
title=_('State to report if neighbor not found'),
help=_('Default monitoring state if the neighbor is not found in the SNMP data. '
'Default state is "UNKNOWN"'),
default_value=3,
)),
neighbor_states,
('peer_list',
ListOf(
Tuple(
title=_('Neighbors'),
elements=[
TextUnicode(
title=_('OSPFv3 Neighbor'),
help=_(
'The configured value must match a OSPFv3 Neighbor item reported by the monitored '
'device. For example: "FE80::192:168:10:148 on Vlan1"'),
allow_empty=False,
),
TextUnicode(
title=_('OSPFv3 Neighbor Alias'),
help=_('You can configure an individual alias here for the OSPF Neighbor matching '
'the text configured in the "OSPFv3 Neighbor" field. The alias will '
'be shown in the check info (i.e. [your alias])'),
allow_empty=False,
),
MonitoringState(
default_value=2,
title=_('State if not found'),
help=_('You can configure an individual state if the OSPFv3 Neighbor matching the text '
'configured in the "OSPFv3 Neighbor" field is not found. '
'Default state is "CRITICAL".')
)]),
add_label=_('Add OSPFv3 Neighbor'),
movable=False,
title=_('Neighbor specific configuration'),
)),
],
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name='ospfv3_neighbor',
group=RulespecGroupCheckParametersNetworking,
item_spec=lambda: TextAscii(title=_('OSPFv3 neighbor'), ),
match_type='dict',
parameter_valuespec=_parameter_valuespec_ospfv3_neighbor,
title=lambda: _('OSPFv3 neighbor'),
))
# #####################################################
#
# OSPFv3 virtual link
#
# #####################################################
def _parameter_valuespec_ospfv3_virtuallink():
return Dictionary(
elements=[
('state_not_found',
MonitoringState(
title=_('State to report if virtual link not found'),
help=_('Default monitoring state if the virtual link is not found in the SNMP data. '
'Default monitoring state is "UNKNOWN"'),
default_value=3,
)),
neighbor_states,
('peer_list',
ListOf(
Tuple(
title=_('Virtual Link'),
elements=[
TextUnicode(
title=_('OSPFv3 Virtual-Link'),
help=_(
'The configured value must match a OSPFv3 Virtual-Link item reported by the monitored '
'device. For example: "2003::192:168:0:1"'),
allow_empty=False,
),
TextUnicode(
title=_('OSPFv3 Virtual-Link Alias'),
help=_('You can configure an individual alias here for the OSPFv3 Virtual-Link matching '
'the text configured in the "OSPFv3 Virtual-Link" field. The alias will '
'be shown in the check info (i.e. [your alias])'),
allow_empty=False,
),
MonitoringState(
default_value=2,
title=_('State if not found'),
help=_('You can configure an individual state if the OSPFv3 Virtual-Link matching the '
'text configured in the "OSPFv3 Virtual-Link" field is not found. '
'Default state is "CRITICAL".')
)]),
add_label=_('Add Virtual-Link'),
movable=False,
title=_('Virtual-Link specific configuration'),
)),
],
)
rulespec_registry.register(
CheckParameterRulespecWithItem(
check_group_name='ospfv3_virtuallink',
group=RulespecGroupCheckParametersNetworking,
item_spec=lambda: TextAscii(title=_('OSPFv3 virtual link'), ),
match_type='dict',
parameter_valuespec=_parameter_valuespec_ospfv3_virtuallink,
title=lambda: _('OSPFv3 virtual link'),
))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment