]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1864] forensic logging documentation
authorAndrei Pavel <andrei@isc.org>
Fri, 21 May 2021 08:47:38 +0000 (11:47 +0300)
committerAndrei Pavel <andrei@isc.org>
Thu, 27 May 2021 05:15:56 +0000 (05:15 +0000)
doc/sphinx/arm/hooks.rst
doc/sphinx/uml/packet4.svg
doc/sphinx/uml/packet4.uml
src/bin/dhcp4/dhcp4_messages.mes
src/bin/dhcp6/dhcp6_messages.mes

index dad996cd637ee181addbafb9b9c668c4535c2437..98058b4c60e94840a930d2945931a2ee019df42b 100644 (file)
@@ -561,12 +561,12 @@ from scratch.
 legal_log: Forensic Logging Hooks
 =================================
 
-This section describes the forensic log hooks library. This library
-provides hooks that record a detailed log of lease assignments and
-renewals into a set of log files.
+This section describes the forensic log hooks library. This library provides
+hooks that record a detailed log of assignments, renewals, releases and other
+lease events into a set of log files.
 
-Currently this library is only
-available to ISC customers with a paid support contract.
+Currently this library is only available to ISC customers with a paid support
+contract.
 
 .. note::
 
@@ -578,25 +578,19 @@ information about the addresses they have leased to DHCP clients. This
 library is designed to help with that requirement. If the information
 that it records is sufficient, it may be used directly.
 
-Since Kea 1.9.8, the library supports custom format for logging information
-that can be extracted either from the incoming packet or from the server
-response packet. Use with caution as this might affect server performance.
-
-The custom format can not be used for control channel commands.
-
 If a jurisdiction requires that a different set of information be saved, users
-may use this library as a template or example to create their own custom logging
-hooks.
-
-This logging is done as a set of hooks to allow it to be customized to
-any particular need. Modifying a hooks library is easier and safer than
-updating the core code. In addition by using the hooks features, those
-users who do not need to log this information can leave it out and avoid
+may use the custom formatting capability to extract information from the inbound
+request packet, or from the outbound response packet. Use with caution as this
+might affect server performance.  The custom format can not be used for control
+channel commands.
+
+Alternatively, this library may be used as a template or an example for the
+user's own custom logging hook. The logging is done as a set of hooks to allow
+it to be customized to any particular need. Modifying a hooks library is easier
+and safer than updating the core code. In addition by using the hooks features,
+those users who do not need to log this information can leave it out and avoid
 any performance penalties.
 
-Since Kea 1.9.8, the library supports additional parameters to control the rotating
-log process.
-
 Log File Naming
 ~~~~~~~~~~~~~~~
 
@@ -608,8 +602,8 @@ Legal file names, if using ``day``, ``month`` or ``year`` as time unit:
 
    path/base-name.CCYYMMDD.txt
 
-where CC represents century, YY represents current year, MM represents current
-month and DD represents current day.
+where ``CC`` represents century, ``YY`` represents current year, MM represents
+current month and ``DD`` represents current day.
 
 Legal file names, if using ``second`` as time unit:
 
@@ -617,30 +611,208 @@ Legal file names, if using ``second`` as time unit:
 
    path/base-name.TXXXXXXXXXXXXXXXXXXXX.txt
 
-where XXXXXXXXXXXXXXXXXXXX represents time in seconds since epoch.
+where ``XXXXXXXXXXXXXXXXXXXX`` represents time in seconds since epoch.
 
-To note that when using ``second`` as time unit, the file will be rotated when
+When using ``second`` as the time unit, the file will be rotated when
 the ``count`` number of seconds pass. In contrast, when using ``day``, ``month``
 or ``year`` as time unit, the file will be rotated whenever the ``count`` th day,
 month or year starts respectively.
 
-The "path" and "base-name" are supplied in the configuration as
-described below; see :ref:`forensic-log-configuration`. The next part of the name is the
-date the log file was started, with four digits for year, two digits for
-month, and two digits for day. The file is rotated on a daily basis.
+The ``"path"`` and ``"base-name"`` are supplied in the configuration as
+described below; see :ref:`forensic-log-configuration`.
 
 .. note::
 
    When running Kea servers for both DHCPv4 and DHCPv6, the log names
    must be distinct. See the examples in :ref:`forensic-log-configuration`.
 
+.. _forensic-log-configuration:
+
+Configuring the Forensic Log Hooks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To use this functionality, the hook library must be included in the
+configuration of the desired DHCP server modules. The legal_log library
+is able to save logs to a text file or to a database (created using
+``kea-admin`` see :ref:`mysql-database-create`, :ref:`pgsql-database-create`).
+The library is installed alongside the Kea libraries in
+``[kea-install-dir]/var/lib/kea`` where ``kea-install-dir`` is determined
+by the "--prefix" option of the configure script. It defaults to
+``/usr/local``. Assuming the default value, configuring kea-dhcp4 to load
+the legal_log library could be done with the following kea-dhcp4 configuration:
+
+.. code-block:: json
+
+    {
+        "Dhcp4": {
+            "hooks-libraries": [
+                {
+                    "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
+                    "parameters": {
+                        "path": "/var/lib/kea/log",
+                        "base-name": "kea-forensic4"
+                    }
+                }
+            ]
+        }
+    }
+
+To configure it for kea-dhcp6, the commands are:
+
+.. code-block:: json
+
+    {
+        "Dhcp6": {
+            "hooks-libraries": [
+                {
+                    "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
+                    "parameters": {
+                        "path": "/var/lib/kea/log",
+                        "base-name": "kea-forensic6"
+                    }
+                }
+            ]
+        }
+    }
+
+The hook library parameters for the text file configuration are:
+
+-  ``path`` - the directory in which the forensic file(s) will be written.
+   The default value is ``[prefix]/var/lib/kea``. The directory must exist.
+
+-  ``base-name`` - an arbitrary value which is used in conjunction with the
+   current system date to form the current forensic file name. It
+   defaults to ``kea-legal``.
+
+-  ``time-unit`` - configures the time unit used to rotate the log file. Valid
+   values are ``second``, ``day``, ``month`` or ``year``. It defaults to
+   ``day``.
+
+-  ``count`` - configures the number of time units that need to pass until the
+   log file is rotated. It can be any positive number, or 0 which disables log
+   rotate. It defaults to 1.
+
+If log rotate is disabled, a new file will be created when the library is
+loaded and the new file name is different that any previous file name.
+
+Additional actions can be performed just before closing the old file and after
+opening the new file. These actions must point to an external executable or
+script and are configured by setting:
+
+-  ``prerotate`` - external executable or script called with the name of the
+   file that will be closed. Kea will not wait for the process to finish.
+
+-  ``postrotate`` - external executable or script called with the name of the
+   file that had been opened. Kea will not wait for the process to finish.
+
+Custom formatting can be enabled for logging information that can be extracted
+either from the client's request packet or from the server's response packet.
+Use with caution as this might affect server performance.
+The custom format can not be used for control channel commands.
+Two parameters can be used towards this goal, either combined or together:
+
+-  ``request-parser-format`` - evaluated parsed expression used to extract and
+   log data from the incoming packet
+
+-  ``response-parser-format`` - evaluated parsed expression used to extract and
+   log data from the server response packet
+
+See :ref:`classification-using-expressions` for a list of expressions.
+If any of ``request-parser-format`` or ``response-parser-format`` is
+configured, the default logging format is not used. If both of them are
+configured, the resulting log message is constructed by concatenating the
+data extracted from the request and the data extracted from the response.
+
+Some data might be available in the request or in the response only and some
+data might differ in the request packet from the one in the response packet.
+
+The lease client context can only be printed using the default format, as this
+information is not directly stored in the request packet or in the response
+packet.
+
+Additional parameters for the database connection can be specified, e.g:
+
+::
+
+    "Dhcp6": {
+       "hooks-libraries": [
+           {
+               "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
+               "parameters": {
+                   "name":"database-name",
+                   "password":"passwd",
+                   "type":"mysql",
+                   "user":"user-name"
+               }
+           },
+           ...
+       ]
+   }
+
+For more specific information about database related parameters please refer to
+:ref:`database-configuration6` and :ref:`database-configuration4`.
+
+If it is desired to restrict forensic logging to certain subnets, the
+"legal-logging" boolean parameter can be specified within a user context
+of these subnets. For example:
+
+::
+
+   "Dhcpv4" {
+       "subnet4": [
+           {
+               "subnet": "192.0.2.0/24",
+               "pools": [
+                   {
+                        "pool": "192.0.2.1 - 192.0.2.200"
+                   }
+               ],
+               "user-context": {
+                   "legal-logging": false
+               }
+           }
+       ]
+   }
+
+This configuration disables legal logging for the subnet "192.0.2.0/24". If the
+"legal-logging" parameter is not specified, it defaults to 'true', which
+enables legal logging for the subnet.
+
+The following example demonstrates how to selectively disable legal
+logging for an IPv6 subnet:
+
+::
+
+   "Dhcpv6": {
+       "subnet6": [
+           {
+               "subnet": "2001:db8:1::/64",
+               "pools": [
+                    {
+                        "pool": "2001:db8:1::1-2001:db8:1::ffff"
+                    }
+               ],
+               "user-context": {
+                   "legal-logging": false
+               }
+           }
+       ]
+   }
+
+See :ref:`dhcp4-user-contexts` and :ref:`dhcp6-user-contexts` to
+learn more about user contexts in Kea configuration.
+
 DHCPv4 Log Entries
 ~~~~~~~~~~~~~~~~~~
 
-For DHCPv4, the library creates entries based on DHCPREQUEST messages and
-corresponding DHCPv4 leases intercepted by the lease4_select (for new
-leases), the lease4_renew (for renewed leases), and beginning with Kea 1.9.1
-the lease4_release and the lease4_decline (for released leases) hooks.
+For DHCPv4, the library creates entries based on DHCPREQUEST, DHCPDECLINE,
+DHCPRELEASE messages et.al. and their responses. The resulting packets and
+leases are taken into account, intercepted through the following hook points:
+* pkt4_receive
+* leases4_committed
+* pkt4_send
+* lease4_release
+* lease4_decline
 
 An entry is a single string with no embedded end-of-line markers and a
 prepended timestamp, and has the following sections:
@@ -693,10 +865,10 @@ or for a release:
    identified by circuit-id: 68:6f:77:64:79 (howdy) and remote-id: 87:f6:79:77:ef
 
 In addition to logging lease activity driven by DHCPv4 client traffic,
-the hooks library also logs entries for the following lease management control channel
-commands: lease4-add, lease4-update, and lease4-del. Each entry is a
-single string with no embedded end-of-line markers, and it will
-typically have the following form:
+the hooks library also logs entries for the following lease management control
+channel commands: lease4-add, lease4-update, and lease4-del. These cannot have
+custom formatting. Each entry is a single string with no embedded end-of-line
+markers, and it will typically have the following form:
 
 ``lease4-add:``
 
@@ -779,7 +951,6 @@ Examples:
                     ifelse(option[82].option[2].exists, ', remote-id: ' + hexstring(option[82].option[2].hex, ':'), '') +
                     ifelse(option[82].option[6].exists, ', subscriber-id: ' + hexstring(option[82].option[6].hex, ':'), '')),
             '')",
-   ...
    "response-parser-format":
        "ifelse(pkt4.msgtype == 5,
             'Address: ' + addrtotext(pkt4.yiaddr) + ' has been assigned for ' + uint32totext(option[51].hex) + ' seconds to a device with hardware address: hwtype=' + substring(hexstring(pkt4.htype, ''), 7, 1) + ' ' + hexstring(pkt4.mac, ':') +
@@ -788,8 +959,7 @@ Examples:
                     ifelse(option[82].option[1].exists, ', circuit-id: ' + hexstring(option[82].option[1].hex, ':'), '') +
                     ifelse(option[82].option[2].exists, ', remote-id: ' + hexstring(option[82].option[2].hex, ':'), '') +
                     ifelse(option[82].option[6].exists, ', subscriber-id: ' + hexstring(option[82].option[6].hex, ':'), '')),
-            '')",
-   ...
+            '')"
 
 
 This will log the following data on request and renew:
@@ -827,17 +997,20 @@ Examples:
                         ifelse(option[82].option[1].exists, ', circuit-id: ' + hexstring(option[82].option[1].hex, ':'), '') +
                         ifelse(option[82].option[2].exists, ', remote-id: ' + hexstring(option[82].option[2].hex, ':'), '') +
                         ifelse(option[82].option[6].exists, ', subscriber-id: ' + hexstring(option[82].option[6].hex, ':'), '')),
-                ''))",
-   ...
+                ''))"
 
 
 DHCPv6 Log Entries
 ~~~~~~~~~~~~~~~~~~
 
-For DHCPv6 the library creates entries based on lease management actions
-intercepted by lease6_select (for new leases), lease6_renew and
-lease6_rebind (for renewed leases), and beginning with Kea 1.9.1
-lease6_release and lease6_decline (for released leases) hooks.
+For DHCPv6, the library creates entries based on REQUEST, RENEW, RELEASE,
+DECLINE messages et.al. and their responses. The resulting packets and leases
+are taken into account, intercepted through the following hook points:
+* pkt6_receive
+* leases6_committed
+* pkt6_send
+* lease6_release
+* lease6_decline
 
 An entry is a single string with no embedded end-of-line markers and a
 prepended timestamp, and has the following sections:
@@ -984,7 +1157,6 @@ Examples:
                             ifelse(relay6[0].option[38].exists, ', subscriber-id: ' + hexstring(relay6[0].option[38].hex, ':'), '') +
                             ifelse(relay6[0].option[18].exists, ', connected at location interface-id: ' + hexstring(relay6[0].option[18].hex, ':'), '')), ''),
             '')",
-   ...
    "response-parser-format":
        "ifelse(pkt6.msgtype == 7,
             ifelse(option[3].option[5].exists,
@@ -999,8 +1171,7 @@ Examples:
                             ifelse(relay6[0].option[37].exists, ', remote-id: ' + hexstring(relay6[0].option[37].hex, ':'), '') +
                             ifelse(relay6[0].option[38].exists, ', subscriber-id: ' + hexstring(relay6[0].option[38].hex, ':'), '') +
                             ifelse(relay6[0].option[18].exists, ', connected at location interface-id: ' + hexstring(relay6[0].option[18].hex, ':'), '')), ''),
-            '')",
-   ...
+            '')"
 
 
 This will log the following data on request, renew and rebind for NA:
@@ -1064,177 +1235,7 @@ Examples:
                                 ifelse(relay6[0].option[37].exists, ', remote-id: ' + hexstring(relay6[0].option[37].hex, ':'), '') +
                                 ifelse(relay6[0].option[38].exists, ', subscriber-id: ' + hexstring(relay6[0].option[38].hex, ':'), '') +
                                 ifelse(relay6[0].option[18].exists, ', connected at location interface-id: ' + hexstring(relay6[0].option[18].hex, ':'), '')), ''),
-                ''))",
-   ...
-
-
-.. _forensic-log-configuration:
-
-Configuring the Forensic Log Hooks
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To use this functionality, the hook library must be included in the
-configuration of the desired DHCP server modules. The legal_log library
-is able to save logs to a text file or a database (created using
-``kea-admin`` see :ref:`mysql-database-create`, :ref:`pgsql-database-create`).
-Library is installed alongside the Kea libraries in
-``[kea-install-dir]/var/lib/kea`` where ``kea-install-dir`` is determined
-by the "--prefix" option of the configure script. It defaults to
-``/usr/local``. Assuming the default value, configuring kea-dhcp4 to load
-the legal_log library could be done with the following Kea4 configuration:
-
-::
-
-   "Dhcp4": {
-       "hooks-libraries": [
-           {
-               "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
-               "parameters": {
-                   "path": "/var/lib/kea/log",
-                   "base-name": "kea-forensic4"
-               }
-           },
-           ...
-       ]
-   }
-
-To configure it for kea-dhcp6, the commands are:
-
-::
-
-   "Dhcp6": {
-       "hooks-libraries": [
-           {
-               "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
-               "parameters": {
-                   "path": "/var/lib/kea/log",
-                   "base-name": "kea-forensic6"
-               }
-           },
-           ...
-       ]
-   }
-
-Two hooks library parameters for text file are supported:
-
--  ``path`` - the directory in which the forensic file(s) will be written.
-   The default value is ``[prefix]/var/lib/kea``. The directory must exist.
-
--  ``base-name`` - an arbitrary value which is used in conjunction with the
-   current system date to form the current forensic file name. It
-   defaults to ``kea-legal``.
-
--  ``time-unit`` - configures the time unit used to rotate the log file. Valid
-   values are ``second``, ``day``, ``month`` or ``year``. It defaults to
-   ``day``.
-
--  ``count`` - configures the number of time units that need to pass until the
-   log file is rotated. It can be any positive number, or 0 which disabled log
-   rotate. It defaults to 1.
-
-If log rotate is disabled, a new file will be created when the library is
-loaded and the new file name is different that any previous file name.
-
-Additional actions can be performed just before closing the old file and after
-opening the new file. These actions must point to an external executable or
-script and are configured by setting:
-
--  ``prerotate`` - external executable or script called with the name of the
-   file that will be closed (Kea will not wait for the process to finish)
-
--  ``postrotate`` - external executable or script called with the name of the
-   file that had been opened (Kea will not wait for the process to finish)
-
--  ``request-parser-format`` - evaluated parsed expression used to extract and
-   log data from the incoming packet
-
--  ``response-parser-format`` - evaluated parsed expression used to extract and
-   log data from the server response packet
-
-See :ref:`classification-using-expressions` for a list of expressions.
-If any of ``request-parser-format`` or ``response-parser-format`` is
-configured, the default logging format is not used. If both of them are
-configured, the resulting log message is constructed by concatenating the
-data extracted from the request and the data extracted from the response.
-
-Some data might be available in the request or in the response only and some
-data might differ in the incoming packet from the one in the response packet.
-
-The lease client context can be printed using only the default format, as this
-information is not directly stored in the incoming packet or in the server
-response packet.
-
-Additional parameters for the database connection can be specified, e.g:
-
-::
-
-    "Dhcp6": {
-       "hooks-libraries": [
-           {
-               "library": "/usr/local/lib/kea/hooks/libdhcp_legal_log.so",
-               "parameters": {
-                   "name":"database-name",
-                   "password":"passwd",
-                   "type":"mysql",
-                   "user":"user-name"
-               }
-           },
-           ...
-       ]
-   }
-
-For more specific information about database related parameters please refer to
-:ref:`database-configuration6` and :ref:`database-configuration4`.
-
-If it is desired to restrict forensic logging to certain subnets, the
-"legal-logging" boolean parameter can be specified within a user context
-of these subnets. For example:
-
-::
-
-   "Dhcpv4" {
-       "subnet4": [
-           {
-               "subnet": "192.0.2.0/24",
-               "pools": [
-                   {
-                        "pool": "192.0.2.1 - 192.0.2.200"
-                   }
-               ],
-               "user-context": {
-                   "legal-logging": false
-               }
-           }
-       ]
-   }
-
-This configuration disables legal logging for the subnet "192.0.2.0/24". If the
-"legal-logging" parameter is not specified, it defaults to 'true', which
-enables legal logging for the subnet.
-
-The following example demonstrates how to selectively disable legal
-logging for an IPv6 subnet:
-
-::
-
-   "Dhcpv6": {
-       "subnet6": [
-           {
-               "subnet": "2001:db8:1::/64",
-               "pools": [
-                    {
-                        "pool": "2001:db8:1::1-2001:db8:1::ffff"
-                    }
-               ],
-               "user-context": {
-                   "legal-logging": false
-               }
-           }
-       ]
-   }
-
-See :ref:`dhcp4-user-contexts` and :ref:`dhcp6-user-contexts` to
-learn more about user contexts in Kea configuration.
+                ''))"
 
 .. _forensic-log-database:
 
@@ -1270,7 +1271,16 @@ from a CQL database:
     2018-01-06 01:02:03.227000+0000 | Address: 192.2.1.100 has been renewed ...
     ...
    (12 rows)
-   $
+
+Like all the other database-centric features, forensic logging supports database
+connection recovery which can be enabled by setting the ``on-fail`` parameter.
+If not specified, the ``on-fail`` parameter defaults to ``serve-retry-continue``
+as opposed to the case of lease manager, host manager and config backend where
+it defaults to ``stop-retry-exit``. In this case, the server will continue serving clients and it will not shut down
+even if the recovery mechanism fails. If the ``on-fail`` is set to ``serve-retry-exit``, the server will shut down if
+the connection to the database backend is not restored according to the
+``max-reconnect-tries`` and ``reconnect-wait-time`` parameters, but it will
+continue serving clients while this mechanism is activated.
 
 .. _flex-id:
 
@@ -1508,7 +1518,7 @@ This library allows you to define an action to take, for a given option,
 based upon on the result of an expression.  These actions are carried
 out during the final stages of constructing a query response packet,
 just before it is sent to the client. The three actions currently
-supported are  ``add``, ``supersede``, and ``remove``.
+supported are ``add``, ``supersede``, and ``remove``.
 
 The syntax used for the action expressions is the same syntax used
 for client classification and the Flex Identifier hook library
index d488c704da059760b2a401b41fd77f63f30bcb70..2e37ed9fffe6a3550cced09115719aab2c7498ed 100644 (file)
@@ -13,7 +13,7 @@ entity classify--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.
 entity pkt4_receive--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="159" x="454.5" y="545.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="139" x="464.5" y="568.7344">Callout pkt4_receive</text><path d="M648.5,550.6992 L648.5,559.1992 L613.59,563.1992 L648.5,567.1992 L648.5,576.0098 A0,0 0 0 0 648.5,576.0098 L701.5,576.0098 A0,0 0 0 0 701.5,576.0098 L701.5,560.6992 L691.5,550.6992 L648.5,550.6992 A0,0 0 0 0 648.5,550.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M691.5,550.6992 L691.5,560.6992 L701.5,560.6992 L691.5,550.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="654.5" y="568.2676">hook</text><!--MD5=[7aeeef4718a003ce2e7ad9bcbdf71ad9]
 entity drop_class--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="141" x="243.5" y="658.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="121" x="253.5" y="681.7344">Check DROP class</text><!--MD5=[a52533196b9ad0f42d77bd2c5acf5304]
 entity same_client--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="333" x="147.5" y="755.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="313" x="157.5" y="778.7344">Avoid same client race in multi-threaded mode</text><path d="M587.5,760.6992 L587.5,769.1992 L480.63,773.1992 L587.5,777.1992 L587.5,786.0098 A0,0 0 0 0 587.5,786.0098 L790.5,786.0098 A0,0 0 0 0 790.5,786.0098 L790.5,770.6992 L780.5,760.6992 L587.5,760.6992 A0,0 0 0 0 587.5,760.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M780.5,760.6992 L780.5,770.6992 L790.5,770.6992 L780.5,760.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="182" x="593.5" y="778.2676">postpone processing or drop</text><!--MD5=[a8af8e48f2cc558a0fee70431885f908]
-entity lease4_committed--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="1045.5" y="1098.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="177" x="1055.5" y="1121.7344">Callout lease4_committed</text><path d="M1277.5,1103.6992 L1277.5,1112.1992 L1242.75,1116.1992 L1277.5,1120.1992 L1277.5,1129.0098 A0,0 0 0 0 1277.5,1129.0098 L1330.5,1129.0098 A0,0 0 0 0 1330.5,1129.0098 L1330.5,1113.6992 L1320.5,1103.6992 L1277.5,1103.6992 A0,0 0 0 0 1277.5,1103.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1320.5,1103.6992 L1320.5,1113.6992 L1330.5,1113.6992 L1320.5,1103.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1283.5" y="1121.2676">hook</text><!--MD5=[8e18f13991ca58e5a79e0b81ed56b9db]
+entity leases4_committed--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="1045.5" y="1098.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="177" x="1055.5" y="1121.7344">Callout leases4_committed</text><path d="M1277.5,1103.6992 L1277.5,1112.1992 L1242.75,1116.1992 L1277.5,1120.1992 L1277.5,1129.0098 A0,0 0 0 0 1277.5,1129.0098 L1330.5,1129.0098 A0,0 0 0 0 1330.5,1129.0098 L1330.5,1113.6992 L1320.5,1103.6992 L1277.5,1103.6992 A0,0 0 0 0 1277.5,1103.6992 " fill="#FBFB77" filter="url(#f1u1c8b25aigi3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1320.5,1103.6992 L1320.5,1113.6992 L1330.5,1113.6992 L1320.5,1103.6992 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1283.5" y="1121.2676">hook</text><!--MD5=[8e18f13991ca58e5a79e0b81ed56b9db]
 entity park--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="50" x="1119" y="1211.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="1129" y="1234.7344">Park</text><!--MD5=[145fde1089ff11319f35031b66a8b2bf]
 entity pkt4_send--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="144" x="943" y="1324.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="124" x="953" y="1347.7344">Callout pkt4_send</text><!--MD5=[62d5b04920c444814fafa1dbf06b35cd]
 entity send--><rect fill="#FEFECE" filter="url(#f1u1c8b25aigi3)" height="36.4883" style="stroke: #A80036; stroke-width: 1.5;" width="121" x="1052.5" y="1647.1992"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="101" x="1062.5" y="1670.7344">Send response</text><!--MD5=[5f600c2348a98514851ba709bbd3f597]
@@ -36,19 +36,19 @@ link drop_class to drop--><path d="M243.48,679.2592 C179.13,685.3592 94,705.9492
 link same_client to process--><path d="M347.12,791.2092 C395.425,816.0092 488.31,863.6992 569.655,905.4642 C610.3275,926.3467 648.115,945.748 676.0025,960.0661 C689.9463,967.2252 701.415,973.1134 709.5319,977.2807 C711.5611,978.3225 713.3808,979.2568 714.9774,980.0764 " fill="none" id="same_client-&gt;process" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="714.9774,980.0764,708.7978,972.4075,710.5293,977.7928,705.144,979.5244,714.9774,980.0764" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2de62570b816e5df0f82700c4b296cc3]
 link same_client to drop--><path d="M299.7,791.2592 C288.57,806.3092 275,829.3392 275,852.1992 C275,852.1992 275,852.1992 275,1173.6992 C275,1222.3992 247.11,1229.1792 239,1277.1992 C237.74,1284.6492 238.76,1286.6492 239,1294.1992 C239.67,1315.1192 242,1320.2692 242,1341.1992 C242,1341.1992 242,1341.1992 242,1666.1992 C242,1713.3692 777.64,1725.3292 895,1744.1992 C898.94,1744.8292 902.99,1745.5792 907.05,1746.3992 " fill="none" id="same_client-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.19,1747.4692,904.2071,1741.7009,907.2973,1746.4392,902.559,1749.5293,912.19,1747.4692" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="267" x="240" y="1290.7676">queries from the same client possible race</text><!--MD5=[3640933a3eded42de606c73d1c2efb26]
 link process to drop--><path d="M714.7345,990.1215 C714.4884,990.2441 714.2376,990.3695 713.9823,990.4976 C712.9607,991.0103 711.8653,991.5676 710.703,992.1686 C708.3783,993.3708 705.7858,994.7482 702.9805,996.2952 C691.7591,1002.483 677.1319,1011.383 662.6163,1022.6242 C633.585,1045.1067 605,1076.9542 605,1115.1992 C605,1115.1992 605,1115.1992 605,1286.6992 C605,1382.9192 605,1406.9792 605,1503.1992 C605,1503.1992 605,1503.1992 605,1666.1992 C605,1670.0592 805.92,1721.3092 907.14,1746.8892 " fill="none" id="process-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="912.18,1748.1592,904.4231,1742.0904,907.3301,1746.9432,902.4774,1749.8502,912.18,1748.1592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="606" y="1403.7676">unknown message type</text><!--MD5=[952846e6e065ca3396c39be4d5d60980]
-link processDiscover to lease4_committed--><path d="M1153.54,1003.3292 C1151.58,1026.3592 1148.08,1067.3592 1145.91,1092.8192 " fill="none" id="processDiscover-&gt;lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1145.47,1097.9992,1150.2261,1089.3749,1145.8982,1093.0176,1142.2555,1088.6897,1145.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7f61b5f2e024f0ea6329d761794804a2]
+link processDiscover to leases4_committed--><path d="M1153.54,1003.3292 C1151.58,1026.3592 1148.08,1067.3592 1145.91,1092.8192 " fill="none" id="processDiscover-&gt;leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1145.47,1097.9992,1150.2261,1089.3749,1145.8982,1093.0176,1142.2555,1088.6897,1145.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7f61b5f2e024f0ea6329d761794804a2]
 link processDiscover to drop--><path d="M1178.66,1003.2492 C1195.43,1015.0392 1218.66,1030.7692 1240,1043.1992 C1301.84,1079.1992 1384,1043.6492 1384,1115.1992 C1384,1115.1992 1384,1115.1992 1384,1343.1992 C1384,1405.5792 1346.5,1559.4192 1323,1617.1992 C1310.64,1647.5792 1313.41,1660.2292 1290,1683.1992 C1252.31,1720.1992 1104.17,1743.9392 1021.16,1754.6292 " fill="none" id="processDiscover-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.79,1755.3092,1025.2217,1758.1453,1020.7503,1754.6802,1024.2153,1750.2088,1015.79,1755.3092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1380" y="1403.7676">on error</text><!--MD5=[f46ab6743faf3720230dd3ca9adf25a5]
-link processRequest to lease4_committed--><path d="M845.36,1003.3592 C861.72,1015.8092 885.26,1032.3292 908,1043.1992 C957.4,1066.8292 1016.32,1084.8192 1062.92,1096.8992 " fill="none" id="processRequest-&gt;lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1067.97,1098.1992,1060.2468,1092.0875,1063.1269,1096.9563,1058.2582,1099.8364,1067.97,1098.1992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[46780bcbdce00599e22cc2808afc4298]
+link processRequest to leases4_committed--><path d="M845.36,1003.3592 C861.72,1015.8092 885.26,1032.3292 908,1043.1992 C957.4,1066.8292 1016.32,1084.8192 1062.92,1096.8992 " fill="none" id="processRequest-&gt;leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1067.97,1098.1992,1060.2468,1092.0875,1063.1269,1096.9563,1058.2582,1099.8364,1067.97,1098.1992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[46780bcbdce00599e22cc2808afc4298]
 link processRequest to drop--><path d="M814.47,1003.5592 C802.08,1027.7992 782,1073.5092 782,1115.1992 C782,1115.1992 782,1115.1992 782,1343.1992 C782,1504.6592 842.57,1536.4892 910,1683.1992 C916.56,1697.4792 918.33,1701.0892 927,1714.1992 C932.7,1722.8192 939.57,1731.8492 945.83,1739.6592 " fill="none" id="processRequest-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="949.23,1743.8592,946.6802,1734.3461,946.0857,1739.9717,940.4601,1739.3771,949.23,1743.8592" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="786" y="1403.7676">on error</text><!--MD5=[dd5280f7a4fbe519a789693377d2c3dc]
-link processRelease to lease4_committed--><path d="M1009.58,1003.3292 C1037.95,1026.9392 1089.01,1069.4292 1119.37,1094.6992 " fill="none" id="processRelease-&gt;lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1123.33,1097.9992,1118.9735,1089.1663,1119.4877,1094.7997,1113.8543,1095.3139,1123.33,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9c1ccee308c843163ae9c7fab5373c87]
+link processRelease to leases4_committed--><path d="M1009.58,1003.3292 C1037.95,1026.9392 1089.01,1069.4292 1119.37,1094.6992 " fill="none" id="processRelease-&gt;leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1123.33,1097.9992,1118.9735,1089.1663,1119.4877,1094.7997,1113.8543,1095.3139,1123.33,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9c1ccee308c843163ae9c7fab5373c87]
 link processRelease to drop--><path d="M958.18,1003.1992 C924.12,1024.5192 874,1064.4892 874,1115.1992 C874,1115.1992 874,1115.1992 874,1343.1992 C874,1496.1392 893.83,1533.8992 927,1683.1992 C930.11,1697.2092 930.28,1701.0392 936,1714.1992 C939.7,1722.7092 944.65,1731.5692 949.37,1739.2792 " fill="none" id="processRelease-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="952.26,1743.9092,950.8732,1734.1585,949.6062,1739.6716,944.093,1738.4046,952.26,1743.9092" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="876" y="1403.7676">on error</text><!--MD5=[762f153a4fd6a7efd08d553c7afbf530]
-link processDecline to lease4_committed--><path d="M1296.63,1003.3292 C1264.28,1027.0392 1205.97,1069.7792 1171.54,1095.0092 " fill="none" id="processDecline-&gt;lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1167.47,1097.9992,1177.0921,1095.8981,1171.5007,1095.0405,1172.3582,1089.4491,1167.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d9fbe084438a9903d341665e19467c6]
+link processDecline to leases4_committed--><path d="M1296.63,1003.3292 C1264.28,1027.0392 1205.97,1069.7792 1171.54,1095.0092 " fill="none" id="processDecline-&gt;leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1167.47,1097.9992,1177.0921,1095.8981,1171.5007,1095.0405,1172.3582,1089.4491,1167.47,1097.9992" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d9fbe084438a9903d341665e19467c6]
 link processDecline to drop--><path d="M1344.72,1003.4392 C1388.71,1034.5392 1476,1098.3692 1476,1115.1992 C1476,1115.1992 1476,1115.1992 1476,1666.1992 C1476,1712.0592 1154.4,1744.8992 1020.96,1756.5492 " fill="none" id="processDecline-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.91,1756.9892,1025.2195,1760.2037,1020.8916,1756.561,1024.5344,1752.2331,1015.91,1756.9892" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1477" y="1403.7676">on error</text><!--MD5=[403b2bcd25ba6f5a11641c975fae6de0]
-link processInform to lease4_committed--><path d="M1459.75,1003.3292 C1444.69,1015.9292 1422.73,1032.6492 1401,1043.1992 C1350.13,1067.9092 1289.34,1085.4192 1239.66,1096.9892 " fill="none" id="processInform-&gt;lease4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1234.58,1098.1592,1244.2506,1100.0248,1239.451,1097.0307,1242.445,1092.2312,1234.58,1098.1592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c5223c78dfc731d8a0b6dd3ad2587a32]
+link processInform to leases4_committed--><path d="M1459.75,1003.3292 C1444.69,1015.9292 1422.73,1032.6492 1401,1043.1992 C1350.13,1067.9092 1289.34,1085.4192 1239.66,1096.9892 " fill="none" id="processInform-&gt;leases4_committed" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1234.58,1098.1592,1244.2506,1100.0248,1239.451,1097.0307,1242.445,1092.2312,1234.58,1098.1592" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c5223c78dfc731d8a0b6dd3ad2587a32]
 link processInform to drop--><path d="M1501,1003.2392 C1527.36,1025.7692 1568,1068.1292 1568,1115.1992 C1568,1115.1992 1568,1115.1992 1568,1666.1992 C1568,1721.2392 1171.5,1749.4592 1021.01,1758.1792 " fill="none" id="processInform-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.76,1758.4792,1024.9741,1761.9578,1020.7518,1758.1932,1024.5164,1753.9709,1015.76,1758.4792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="50" x="1569" y="1403.7676">on error</text><!--MD5=[887612e1a41deb0055e6b261cad7b207]
-link lease4_committed to pkt4_send--><path d="M1113.34,1134.3192 C1087.4,1150.5592 1051.56,1177.4592 1033,1211.1992 C1014.26,1245.2592 1012.51,1291.6692 1013.42,1318.8292 " fill="none" id="lease4_committed-&gt;pkt4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1013.63,1323.9992,1017.2398,1314.8358,1013.4153,1319.0038,1009.2472,1315.1793,1013.63,1323.9992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1034" y="1234.2676">CONTINUE</text><!--MD5=[03d4f1b76350f6f230f27d5a69f4e552]
-link lease4_committed to drop--><path d="M1215.67,1134.3092 C1261.73,1150.0592 1313,1178.6992 1313,1228.1992 C1313,1228.1992 1313,1228.1992 1313,1399.6992 C1313,1528.5792 1332.51,1582.5492 1252,1683.1992 C1223.32,1719.0492 1096.3,1742.6492 1020.86,1753.7692 " fill="none" id="lease4_committed-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.52,1754.5492,1025.0071,1757.1941,1020.4666,1753.8201,1023.8405,1749.2796,1015.52,1754.5492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1315" y="1460.2676">DROP</text><!--MD5=[e6b479318b22374427e5a12769813441]
-link lease4_committed to park--><path d="M1144,1134.5392 C1144,1153.7692 1144,1184.8292 1144,1205.8592 " fill="none" id="lease4_committed-&gt;park" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1144,1210.9792,1148,1201.9792,1144,1205.9792,1140,1201.9792,1144,1210.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1145" y="1177.7676">PARK</text><!--MD5=[6b0b05ab5b5e01054aa0e3030e86c15b]
+link leases4_committed to pkt4_send--><path d="M1113.34,1134.3192 C1087.4,1150.5592 1051.56,1177.4592 1033,1211.1992 C1014.26,1245.2592 1012.51,1291.6692 1013.42,1318.8292 " fill="none" id="leases4_committed-&gt;pkt4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1013.63,1323.9992,1017.2398,1314.8358,1013.4153,1319.0038,1009.2472,1315.1793,1013.63,1323.9992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1034" y="1234.2676">CONTINUE</text><!--MD5=[03d4f1b76350f6f230f27d5a69f4e552]
+link leases4_committed to drop--><path d="M1215.67,1134.3092 C1261.73,1150.0592 1313,1178.6992 1313,1228.1992 C1313,1228.1992 1313,1228.1992 1313,1399.6992 C1313,1528.5792 1332.51,1582.5492 1252,1683.1992 C1223.32,1719.0492 1096.3,1742.6492 1020.86,1753.7692 " fill="none" id="leases4_committed-&gt;drop" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1015.52,1754.5492,1025.0071,1757.1941,1020.4666,1753.8201,1023.8405,1749.2796,1015.52,1754.5492" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="35" x="1315" y="1460.2676">DROP</text><!--MD5=[e6b479318b22374427e5a12769813441]
+link leases4_committed to park--><path d="M1144,1134.5392 C1144,1153.7692 1144,1184.8292 1144,1205.8592 " fill="none" id="leases4_committed-&gt;park" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1144,1210.9792,1148,1201.9792,1144,1205.9792,1140,1201.9792,1144,1210.9792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="32" x="1145" y="1177.7676">PARK</text><!--MD5=[6b0b05ab5b5e01054aa0e3030e86c15b]
 link park to pkt4_send--><path d="M1124.13,1247.2992 C1101.18,1267.0392 1063.46,1299.4992 1038.93,1320.6092 " fill="none" id="park-&gt;pkt4_send" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="1035.11,1323.8992,1044.5412,1321.0616,1038.9002,1320.6382,1039.3236,1314.9972,1035.11,1323.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="44" x="1088" y="1290.7676">unpark</text><!--MD5=[e1e7c40ae99ae9db4be329f6b3cb143f]
 link pkt4_send to pack--><path d="M1033.64,1360.2992 C1055.07,1379.9592 1090.25,1412.2292 1113.27,1433.3492 " fill="none" id="pkt4_send-&gt;pack" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1117.14,1436.8992,1113.218,1427.8649,1113.4578,1433.5167,1107.806,1433.7565,1117.14,1436.8992" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="1083" y="1403.7676">CONTINUE</text><!--MD5=[729fab78839d14d65a522c939ef9b552]
 link pkt4_send to buffer4_send--><path d="M1013.6,1360.3192 C1012.24,1386.3092 1012.69,1436.5492 1032,1473.1992 C1044.57,1497.0592 1067.55,1517.1692 1086.73,1530.9992 " fill="none" id="pkt4_send-&gt;buffer4_send" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1091.02,1534.0292,1085.9763,1525.5698,1086.936,1531.1447,1081.3611,1532.1043,1091.02,1534.0292" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="26" x="1033" y="1460.2676">SKIP</text><!--MD5=[7a343c005ca5222349b93a374f6aa4be]
@@ -89,7 +89,7 @@ rectangle "Process Query on its Message Type" as process {
  agent "Process Inform" as processInform
 }
 
-agent "Callout lease4_committed" as lease4_committed
+agent "Callout leases4_committed" as leases4_committed
 note right : hook
 
 agent "Park" as park
@@ -124,19 +124,19 @@ drop_class - - -> drop : query in DROP class
 same_client - - -> process
 same_client - - -> drop : queries from the same client possible race
 process - - -> drop : unknown message type
-processDiscover - -> lease4_committed
+processDiscover - -> leases4_committed
 processDiscover - - -> drop : on error
-processRequest - -> lease4_committed
+processRequest - -> leases4_committed
 processRequest - - -> drop : on error
-processRelease - -> lease4_committed
+processRelease - -> leases4_committed
 processRelease - - -> drop : on error
-processDecline - -> lease4_committed
+processDecline - -> leases4_committed
 processDecline - - -> drop : on error
-processInform - -> lease4_committed
+processInform - -> leases4_committed
 processInform - - -> drop : on error
-lease4_committed - -> pkt4_send : CONTINUE
-lease4_committed - - -> drop : DROP
-lease4_committed - -> park : PARK
+leases4_committed - -> pkt4_send : CONTINUE
+leases4_committed - - -> drop : DROP
+leases4_committed - -> park : PARK
 park -[dashed]-> pkt4_send : unpark
 pkt4_send - -> pack : CONTINUE
 pkt4_send - -> buffer4_send : SKIP
@@ -157,4 +157,4 @@ JVM: OpenJDK 64-Bit Server VM
 Default Encoding: UTF-8
 Language: en
 Country: US
---></g></svg>
\ No newline at end of file
+--></g></svg>
index ad73c430e3a4d97a41d9f989c710d6d9b413a13d..15263c79a30c52bd93220e100ce664db67dc1e1c 100644 (file)
@@ -30,7 +30,7 @@ rectangle "Process Query on its Message Type" as process {
  agent "Process Inform" as processInform
 }
 
-agent "Callout lease4_committed" as lease4_committed
+agent "Callout leases4_committed" as leases4_committed
 note right : hook
 
 agent "Park" as park
@@ -65,19 +65,19 @@ drop_class ---> drop : query in DROP class
 same_client ---> process
 same_client ---> drop : queries from the same client possible race
 process ---> drop : unknown message type
-processDiscover --> lease4_committed
+processDiscover --> leases4_committed
 processDiscover ---> drop : on error
-processRequest --> lease4_committed
+processRequest --> leases4_committed
 processRequest ---> drop : on error
-processRelease --> lease4_committed
+processRelease --> leases4_committed
 processRelease ---> drop : on error
-processDecline --> lease4_committed
+processDecline --> leases4_committed
 processDecline ---> drop : on error
-processInform --> lease4_committed
+processInform --> leases4_committed
 processInform ---> drop : on error
-lease4_committed --> pkt4_send : CONTINUE
-lease4_committed ---> drop : DROP
-lease4_committed --> park : PARK
+leases4_committed --> pkt4_send : CONTINUE
+leases4_committed ---> drop : DROP
+leases4_committed --> park : PARK
 park -[dashed]-> pkt4_send : unpark
 pkt4_send --> pack : CONTINUE
 pkt4_send --> buffer4_send : SKIP
@@ -89,4 +89,4 @@ send -[hidden]-> drop
 
 footer dashed arrow means asynchronous processing
 
-@enduml
\ No newline at end of file
+@enduml
index 0db82906aeaa150130d1a9d1ccd4165af5baf74c..968d1fd424698dcdcd5e862e4130fc422e23e4f9 100644 (file)
@@ -384,7 +384,7 @@ This debug message is printed when a callout installed on the leases4_committed
 hook point sets the next step to DROP.
 
 % DHCP4_HOOK_LEASES4_COMMITTED_PARK %1: packet is parked, because a callout set the next step to PARK
-This debug message is printed when a callout installed on the lease4_committed
+This debug message is printed when a callout installed on the leases4_committed
 hook point sets the next step to PARK.
 
 % DHCP4_HOOK_PACKET_RCVD_SKIP %1: packet is dropped, because a callout set the next step to SKIP
index 3c830aa7a1d920879489ff5d6573053f5d02cf24..ee2af1e04a0b4c77a97e8ada387037c87a3c50a3 100644 (file)
@@ -393,7 +393,7 @@ This debug message is printed when a callout installed on the leases6_committed
 hook point sets the next step to DROP.
 
 % DHCP6_HOOK_LEASES6_COMMITTED_PARK %1: packet is parked, because a callout set the next step to PARK
-This debug message is printed when a callout installed on the lease6_committed
+This debug message is printed when a callout installed on the leases6_committed
 hook point sets the next step to PARK.
 
 % DHCP6_HOOK_PACKET_RCVD_SKIP %1: packet is dropped, because a callout set the next step to SKIP