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::
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
~~~~~~~~~~~~~~~
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:
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:
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:``
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, ':') +
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:
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:
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,
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:
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:
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:
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
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]
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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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->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]
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
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
Default Encoding: UTF-8
Language: en
Country: US
---></g></svg>
\ No newline at end of file
+--></g></svg>
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
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
footer dashed arrow means asynchronous processing
-@enduml
\ No newline at end of file
+@enduml
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
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