From e1593aa681c87212909ea1cd53315d5a82193486 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Wed, 15 Sep 2021 22:49:58 +0200
Subject: [PATCH] update project

---
 ospf_neighbor.mkp                 | Bin 7799 -> 8337 bytes
 web/plugins/wato/ospf_neighbor.py |  72 ++++++++++++++++++++++++++++--
 2 files changed, 69 insertions(+), 3 deletions(-)

diff --git a/ospf_neighbor.mkp b/ospf_neighbor.mkp
index bb13a13727b2dbf2cb47615687ef6363353c9f83..a7f78381a895badf1114b271030ea17e8e05a63e 100644
GIT binary patch
literal 8337
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

delta 7757
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
TZXgm2SzrDS;ws)30LTCUi6;@$

diff --git a/web/plugins/wato/ospf_neighbor.py b/web/plugins/wato/ospf_neighbor.py
index 634ab3a..2beee58 100644
--- a/web/plugins/wato/ospf_neighbor.py
+++ b/web/plugins/wato/ospf_neighbor.py
@@ -33,51 +33,116 @@ def _parameter_valuespec_ospf_neighbor():
             ('state_not_found',
              MonitoringState(
                  title=_('State to report if neighbor not found'),
-                 help=_('Monitoring state if the neighbor not found in the SNMP data.'),
+                 help=_('Default monitoring state if the neighbor not found in the SNMP data. Default monitoring '
+                        'state is "UNKNOWN"'),
                  default_value=3,
              )),
             ('neighborstate',
              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,
                       )),
                  ])
@@ -98,14 +163,15 @@ def _parameter_valuespec_ospf_neighbor():
                              title=_('OSPF Neighbor Alias'),
                              help=_('You can configure an individual alias here for the OSPF Neighbor matching '
                                     'the text configured in the "OSPF Neighbor IP address" field. The alias will '
-                                    'be shown in the infotext'),
+                                    '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 OSPF Neighbor matching the text '
-                                    'configured in the "OSPF Neighbor IP address" field is not found')
+                                    'configured in the "OSPF Neighbor IP address" field is not found. '
+                                    'Default monitoring state is "CRIT".')
                          )]),
                  add_label=_('Add OSPF Neighbor'),
                  movable=False,
-- 
GitLab