The calling process subscribes or unsubscribes to node
          status change messages. A nodeup message is delivered
          to all subscribing processes when a new node is connected, and
          a nodedown message is delivered when a node is
          disconnected.
        If Flag is true, a new subscription is
          started. If Flag is false, all previous
          subscriptions started with the same Options
          are stopped. Two
          option lists are considered the same if they contain the same
          set of options.
        Delivery guarantees of nodeup/nodedown messages:
        
          - 
            nodeup messages are delivered before delivery
            of any signals from the remote node through the newly
            established connection.
           
- 
            nodedown messages are delivered after all
            the signals from the remote node over the connection
            have been delivered.
           
- 
            nodeup messages are delivered after the
	    corresponding node appears in results from
	    erlang:nodes().
           
- 
            nodedown messages are delivered after the
	    corresponding node has disappeared in results from
	    erlang:nodes().
           
- 
            As of OTP 23.0, a nodedown message for a
            connection being taken down will be delivered before a
            nodeup message due to a new connection to the
            same node. Prior to OTP 23.0, this was not
            guaranteed to be the case.
           
The format of the node status change messages depends on
          Options. If Options is
          the empty list or if net_kernel:monitor_nodes/1 is called,
          the format is as follows:
        {nodeup, Node} | {nodedown, Node}
  Node = node()
          When Options is the empty map or empty
          list, the caller will only subscribe for status change messages
          for visible nodes. That is, only nodes that appear in the
          result of
          erlang:nodes/0.
        
        
          If Options equals anything other than the
          empty list, the format of the status change messages is as follows:
        
        {nodeup, Node, Info} | {nodedown, Node, Info}
  Node = node()
  Info = #{Tag => Val} | [{Tag, Val}]
          Info is either a map or a list of 2-tuples. Its content
          depends on Options. If Options
          is a map, Info will also be a map. If Options
          is a list, Info will also be a list.
        
        
          When Options is a map, currently
          the following associations are allowed:
        
        
          - connection_id => boolean()
- 
            
              If the value of the association equals true, a
              connection_id => ConnectionId association will be
              included in the Info map where ConnectionId
              is the connection identifier of the connection coming up
              or going down. For more info about this connection
              identifier see the documentation of
              erlang:nodes/2.
             
- node_type => NodeType
- 
            Valid values for NodeType: 
              - visible
- Subscribe to node status change messages for visible
               nodes only. The association node_type => visible will
               be included in the Info map. 
- hidden
- Subscribe to node status change messages for hidden
               nodes only. The association node_type => hidden will
               be included in the Info map. 
- all
- Subscribe to node status change messages for both
               visible and hidden nodes. The association
               node_type => visible | hidden will be included in
               the Info map. 
 
              If no node_type => NodeType association
              is included in the Options map, the
              caller will subscribe for status change messages for visible
              nodes only, but no node_type => visible
              association will be included in the Info map.
             
- nodedown_reason => boolean()
- 
            
              If the value of the association equals true, a
              nodedown_reason => Reason association will be
              included in the Info map for nodedown
              messages.
             
	      Reason can, depending on which
	      distribution module or process that is used, be any term,
	      but for the standard TCP distribution module it is
	      one of the following:
	     
              - connection_setup_failed
- The connection setup failed (after nodeup
                messages were sent). 
- no_network
- No network is available. 
- net_kernel_terminated
- The net_kernel process terminated. 
- shutdown
- Unspecified connection shutdown. 
- connection_closed
- The connection was closed. 
- disconnect
- The connection was disconnected (forced from the
                current node). 
- net_tick_timeout
- Net tick time-out. 
- send_net_tick_failed
- Failed to send net tick over the connection. 
- get_status_failed
- Status information retrieval from the Port
                holding the connection failed. 
 
          When Options is a list, currently
          ListOption can be one of the following:
        
        
          - connection_id
- 
            
              A {connection_id, ConnectionId} tuple will be
              included in Info where ConnectionId is the
              connection identifier of the connection coming up or
              going down. For more info about this connection identifier
              see the documentation of
              erlang:nodes/2.
             
- {node_type, NodeType}
- 
            Valid values for NodeType: 
              - visible
- Subscribe to node status change messages for visible
               nodes only. The tuple {node_type, visible} will be
               included in the Info list. 
- hidden
- Subscribe to node status change messages for hidden
               nodes only. The tuple {node_type, hidden} will be
               included in the Info list. 
- all
- Subscribe to node status change messages for both
               visible and hidden nodes. The tuple
               {node_type, visible | hidden} will be included in
               the Info list. 
 
              If no {node_type, NodeType} option
              has been given. The caller will subscribe for status
              change messages for visible nodes only, but no
              {node_type, visible} tuple will be included in the
              Info list.
             
- nodedown_reason
- 
            
              The tuple {nodedown_reason, Reason} will be included
              in the Info list for nodedown messages.
             
              See the documentation of the
              nodedown_reason
              => boolean() association above for information
              about possible Reason values.
	     
Example:
        (a@localhost)1> net_kernel:monitor_nodes(true, #{connection_id=>true, node_type=>all, nodedown_reason=>true}).
ok
(a@localhost)2> flush().
Shell got {nodeup,b@localhost,
                  #{connection_id => 3067552,node_type => visible}}
Shell got {nodeup,c@localhost,
                  #{connection_id => 13892107,node_type => hidden}}
Shell got {nodedown,b@localhost,
                    #{connection_id => 3067552,node_type => visible,
                      nodedown_reason => connection_closed}}
Shell got {nodedown,c@localhost,
                    #{connection_id => 13892107,node_type => hidden,
                      nodedown_reason => net_tick_timeout}}
Shell got {nodeup,b@localhost,
                  #{connection_id => 3067553,node_type => visible}}
ok
(a@localhost)3>