Provided by: erlang-manpages_20.2.2+dfsg-1ubuntu2_all bug

NAME

       ct_netconfc - NETCONF client module.

DESCRIPTION

       NETCONF client module.

       The  NETCONF  client  is  compliant  with  RFC 4741 NETCONF Configuration Protocol and RFC 4742 Using the
       NETCONF Configuration Protocol over Secure SHell (SSH).

       Connecting to a NETCONF server

       NETCONF sessions can either be opened by a single call to open/1,2 or by a call to  connect/1,2  followed
       by one or more calls to session/1,2,3.

       The  properties  of  the  sessions  will be exactly the same, except that when using connect/1,2, you may
       start multiple sessions over the same SSH connection. Each session is implemented as an SSH channel.

       open/1,2 will establish one SSH connection with one SSH channel implementing one NETCONF session. You may
       start mutiple sessions by calling open/1,2 multiple  times,  but  then  a  new  SSH  connection  will  be
       established for each session.

       For each server to test against, the following entry can be added to a configuration file:

        {server_id(),options()}.

       The server_id() or an associated ct:target_name() must then be used in calls to connect/2 or open/2.

       If  no  configuration  exists  for  a  server, use connect/1 or open/1 instead, and specify all necessary
       options in the Options parameter.

       Logging

       The NETCONF server uses error_logger for logging of NETCONF traffic. A special purpose error  handler  is
       implemented in ct_conn_log_h. To use this error handler, add the cth_conn_log hook in the test suite, for
       example:

        suite() ->
           [{ct_hooks, [{cth_conn_log, [{ct:conn_log_mod(),ct:conn_log_options()}]}]}].

       conn_log_mod()  is  the name of the Common Test module implementing the connection protocol, for example,
       ct_netconfc.

       Hook option log_type specifies the type of logging:

         raw:
           The sent and received NETCONF data is logged to a separate text file "as is" without any  formatting.
           A link to the file is added to the test case HTML log.

         pretty:
           The sent and received NETCONF data is logged to a separate text file with XML data nicely indented. A
           link to the file is added to the test case HTML log.

         html (default):
           The sent and received NETCONF traffic is pretty printed directly in the test case HTML log.

         silent:
           NETCONF traffic is not logged.

       By  default,  all NETCONF traffic is logged in one single log file. However, different connections can be
       logged in separate files. To do this, use hook option hosts and list the names of the servers/connections
       to be used in the suite. The connections must be named for this to work, that is,  they  must  be  opened
       with open/2.

       Option hosts has no effect if log_type is set to html or silent.

       The hook options can also be specified in a configuration file with configuration variable ct_conn_log:

        {ct_conn_log,[{ct:conn_log_mod(),ct:conn_log_options()}]}.

       For example:

        {ct_conn_log,[{ct_netconfc,[{log_type,pretty},
                                    {hosts,[ct:key_or_name()]}]}]}

   Note:
       Hook options specified in a configuration file overwrite the hard-coded hook options in the test suite.

       Logging Example 1:

       The  following  ct_hooks  statement  causes  pretty  printing of NETCONF traffic to separate logs for the
       connections named nc_server1 and nc_server2. Any other connections are logged to default NETCONF log.

        suite() ->
           [{ct_hooks, [{cth_conn_log, [{ct_netconfc,[{log_type,pretty}},
                                                      {hosts,[nc_server1,nc_server2]}]}
                                       ]}]}].

       Connections must be opened as follows:

        open(nc_server1,[...]),
        open(nc_server2,[...]).

       Logging Example 2:

       The following configuration file causes raw logging of all NETCONF traffic in to one single text file:

        {ct_conn_log,[{ct_netconfc,[{log_type,raw}]}]}.

       The ct_hooks statement must look as follows:

        suite() ->
           [{ct_hooks, [{cth_conn_log, []}]}].

       The same ct_hooks statement without the configuration file  would  cause  HTML  logging  of  all  NETCONF
       connections in to the test case HTML log.

       Notifications

       The NETCONF client is also compliant with RFC 5277 NETCONF Event Notifications, which defines a mechanism
       for an asynchronous message notification delivery service for the NETCONF protocol.

       Specific functions to support this are create_subscription/1-6 and get_event_streams/1-3.

       Default Timeout

       Most  of  the  functions  in  this  module have one variant with a Timeout parameter, and one without. If
       nothing else is specified, the default value infinity is used when the Timeout parameter is not given.

DATA TYPES

       client() = handle() | server_id() | ct:target_name()

       error_reason() = term()

       event_time() = {eventTime, xml_attributes(), [xs_datetime()]}

       handle()

              Opaque reference for a connection to a NETCONF server or a NETCONF session.

       host() = inet:hostname() | inet:ip_address()

       netconf_db() = running | startup | candidate

       notification() =
           {notification, xml_attributes(), notification_content()}

       notification_content() = [event_time() | simple_xml()]

       option() =
           {ssh, host()} |
           {port, inet:port_number()} |
           {user, string()} |
           {password, string()} |
           {user_dir, string()} |
           {timeout, timeout()}

              SshConnectOption is any valid option to ssh:connect/3,4. Common options used  are  user,  password
              and user_dir. The SshConnectOptions are verfied by the SSH application.

       options() = [option()]

              Options used for setting up an SSH connection to a NETCONF server.

       server_id() = atom()

              The identity of a server, specified in a configuration file.

       simple_xml() =
           {xml_tag(), xml_attributes(), xml_content()} |
           {xml_tag(), xml_content()} |
           xml_tag()

              This type is further described in application xmerl.

       stream_data() =
           {description, string()} |
           {replaySupport, string()} |
           {replayLogCreationTime, string()} |
           {replayLogAgedTime, string()}

              For  details about the data format for the string values, see "XML Schema for Event Notifications"
              in RFC 5277.

       stream_name() = string()

       streams() = [{stream_name(), [stream_data()]}]

       xml_attribute_tag() = atom()

       xml_attribute_value() = string()

       xml_attributes() =
           [{xml_attribute_tag(), xml_attribute_value()}]

       xml_content() = [simple_xml() | iolist()]

       xml_tag() = atom()

       xpath() = {xpath, string()}

       xs_datetime() = string()

              This date and time identifier has the same format as the XML type dateTime and is  compliant  with
              RFC 3339 Date and Time on the Internet Timestamps. The format is as follows:

               [-]CCYY-MM-DDThh:mm:ss[.s][Z|(+|-)hh:mm]

EXPORTS

       action(Client, Action) -> Result

       action(Client, Action, Timeout) -> Result

              Types:

                 Client = client()
                 Action = simple_xml()
                 Timeout = timeout()
                 Result = ok | {ok, [simple_xml()]} | {error, error_reason()}

              Executes an action. If the return type is void, ok is returned instead of {ok,[simple_xml()]}.

       close_session(Client) -> Result

       close_session(Client, Timeout) -> Result

              Types:

                 Client = client()
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Requests graceful termination of the session associated with the client.

              When  a  NETCONF  server  receives  a close-session request, it gracefully closes the session. The
              server releases any locks and resources associated with the  session  and  gracefully  closes  any
              associated connections. Any NETCONF requests received after a close-session request are ignored.

       connect(Options) -> Result

              Types:

                 Options = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Opens an SSH connection to a NETCONF server.

              If the server options are specified in a configuration file, use connect/2 instead.

              The  opaque  handle()  reference  returned from this function is required as connection identifier
              when opening sessions over this connection, see session/1,2,3.

              Option timeout (milliseconds) is used when setting up the SSH connection. It is not used  for  any
              other purposes during the lifetime of the connection.

       connect(KeyOrName, ExtraOptions) -> Result

              Types:

                 KeyOrName = ct:key_or_name()
                 ExtraOptions = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Open an SSH connection to a named NETCONF server.

              If  KeyOrName  is a configured server_id() or a target_name() associated with such an Id, then the
              options for this server are fetched from the configuration file.

              Argument ExtraOptions is added to the options found in the configuration file. If the same options
              are specified, the values from the configuration file overwrite ExtraOptions.

              If the server is not specified in a configuration file, use connect/1 instead.

              The opaque handle() reference returned from this function can be  used  as  connection  identifier
              when  opening  sessions  over  this  connection,  see  session/1,2,3.  However,  if KeyOrName is a
              target_name(), that is, if the server is named  through  a  call  to  ct:require/2  or  a  require
              statement in the test suite, then this name can be used instead of handle().

              Option  timeout  (milliseconds) is used when setting up the SSH connection. It is not used for any
              other purposes during the lifetime of the connection.

       copy_config(Client, Target, Source) -> Result

       copy_config(Client, Target, Source, Timeout) -> Result

              Types:

                 Client = client()
                 Target = Source = netconf_db()
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Copies configuration data.

              Which source and target options that can be issued depends on the capabilities  supported  by  the
              server. That is, :candidate and/or :startup are required.

       create_subscription(Client) -> Result
       create_subscription(Client, Stream) -> Result
       create_subscription(Client, Stream, Filter) -> Result
       create_subscription(Client, Stream, Filter, Timeout) -> Result

       create_subscription(Client, Stream, Filter, StartTime, StopTime) ->
                              Result

       create_subscription(Client,
                           Stream,
                           Filter,
                           StartTime,
                           StopTime,
                           Timeout) ->
                              Result

              Types:

                 Client = client()
                 Stream = stream_name()
                 Filter = simple_xml() | [simple_xml()]
                 StartTime = StopTime = xs_datetime()
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Creates a subscription for event notifications.

              This function sets up a subscription for NETCONF event notifications of the specified stream type,
              matching  the  specified  filter.  The  calling process receives notifications as messages of type
              notification().

              Only a subset of the function clauses are show above. The full set of valid combinations of  input
              parameters is as follows:

              create_subscription(Client)

              create_subscription(Client, Timeout)
              create_subscription(Client, Stream)
              create_subscription(Client, Filter)

              create_subscription(Client, Stream, Timeout)
              create_subscription(Client, Filter, Timeout)
              create_subscription(Client, Stream, Filter)
              create_subscription(Client, StartTime, StopTime)

              create_subscription(Client, Stream, Filter, Timeout)
              create_subscription(Client, StartTime, StopTime, Timeout)
              create_subscription(Client, Stream, StartTime, StopTime)
              create_subscription(Client, Filter, StartTime, StopTime)

              create_subscription(Client, Stream, StartTime, StopTime, Timeout)
              create_subscription(Client, Stream, Filter, StartTime, StopTime)
              create_subscription(Client, Stream, Filter, StartTime, StopTime, Timeout)

                Stream:
                  Optional parameter that indicates which stream of event is of interest. If not present, events
                  in the default NETCONF stream are sent.

                Filter:
                  Optional  parameter  that  indicates  which  subset of all possible events is of interest. The
                  parameter format is the same  as  that  of  the  filter  parameter  in  the  NETCONF  protocol
                  operations. If not present, all events not precluded by other parameters are sent.

                StartTime:
                  Optional parameter used to trigger the replay feature and indicate that the replay is to start
                  at the time specified. If StartTime is not present, this is not a replay subscription.

                  It  is  not valid to specify start times that are later than the current time. If StartTime is
                  specified earlier than the log can support, the replay  begins  with  the  earliest  available
                  notification.

                  This  parameter  is  of  type dateTime and compliant to RFC 3339. Implementations must support
                  time zones.

                StopTime:
                  Optional parameter used with the optional replay feature to indicate the newest  notifications
                  of interest. If StopTime is not present, the notifications continues until the subscription is
                  terminated.

                  Must  be  used  with  and be later than StartTime. Values of StopTime in the future are valid.
                  This parameter is of type dateTime and compliant to RFC  3339.  Implementations  must  support
                  time zones.

              For more details about the event notification mechanism, see RFC 5277.

       delete_config(Client, Target) -> Result

       delete_config(Client, Target, Timeout) -> Result

              Types:

                 Client = client()
                 Target = startup | candidate
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Deletes configuration data.

              The  running  configuration cannot be deleted and :candidate or :startup must be advertised by the
              server.

       disconnect(Conn) -> ok | {error, error_reason()}

              Types:

                 Conn = handle()

              Closes the given SSH connection.

              If there are open NETCONF sessions on the connection, these will be  brutally  aborted.  To  avoid
              this, close each session with close_session/1,2

       edit_config(Client, Target, Config) -> Result

       edit_config(Client, Target, Config, OptParams) -> Result

       edit_config(Client, Target, Config, Timeout) -> Result

       edit_config(Client, Target, Config, OptParams, Timeout) -> Result

              Types:

                 Client = client()
                 Target = netconf_db()
                 Config = simple_xml()
                 OptParams = [simple_xml()]
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Edits configuration data.

              By default only the running target is available, unless the server includes :candidate or :startup
              in its list of capabilities.

              OptParams  can  be  used  for  specifying  optional parameters (default-operation, test-option, or
              error-option) to be added to the edit-config request. The value must be a  list  containing  valid
              simple XML, for example:

               [{'default-operation', ["none"]},
                {'error-option', ["rollback-on-error"]}]

              If OptParams is not given, the default value [] is used.

       get(Client, Filter) -> Result

       get(Client, Filter, Timeout) -> Result

              Types:

                 Client = client()
                 Filter = simple_xml() | xpath()
                 Timeout = timeout()
                 Result = {ok, [simple_xml()]} | {error, error_reason()}

              Gets data.

              This operation returns both configuration and state data from the server.

              Filter type xpath can be used only if the server supports :xpath.

       get_capabilities(Client) -> Result

       get_capabilities(Client, Timeout) -> Result

              Types:

                 Client = client()
                 Timeout = timeout()
                 Result = [string()] | {error, error_reason()}

              Returns the server side capabilities.

              The  following  capability identifiers, defined in RFC 4741 NETCONF Configuration Protocol, can be
              returned:

                * "urn:ietf:params:netconf:base:1.0"

                * "urn:ietf:params:netconf:capability:writable-running:1.0"

                * "urn:ietf:params:netconf:capability:candidate:1.0"

                * "urn:ietf:params:netconf:capability:confirmed-commit:1.0"

                * "urn:ietf:params:netconf:capability:rollback-on-error:1.0"

                * "urn:ietf:params:netconf:capability:startup:1.0"

                * "urn:ietf:params:netconf:capability:url:1.0"

                * "urn:ietf:params:netconf:capability:xpath:1.0"

              More identifiers can exist, for example, server-side namespace.

       get_config(Client, Source, Filter) -> Result

       get_config(Client, Source, Filter, Timeout) -> Result

              Types:

                 Client = client()
                 Source = netconf_db()
                 Filter = simple_xml() | xpath()
                 Timeout = timeout()
                 Result = {ok, [simple_xml()]} | {error, error_reason()}

              Gets configuration data.

              To be able to access another source than running, the  server  must  advertise  :candidate  and/or
              :startup.

              Filter type xpath can be used only if the server supports :xpath.

       get_event_streams(Client) -> Result

       get_event_streams(Client, Timeout) -> Result

       get_event_streams(Client, Streams) -> Result

       get_event_streams(Client, Streams, Timeout) -> Result

              Types:

                 Client = client()
                 Streams = [stream_name()]
                 Timeout = timeout()
                 Result = {ok, streams()} | {error, error_reason()}

              Sends a request to get the specified event streams.

              Streams  is  a  list  of stream names. The following filter is sent to the NETCONF server in a get
              request:

               <netconf xmlns="urn:ietf:params:xml:ns:netmod:notification">
                 <streams>
                   <stream>
                     <name>StreamName1</name>
                   </stream>
                   <stream>
                     <name>StreamName2</name>
                   </stream>
                   ...
                 </streams>
               </netconf>

              If Streams is an empty list, all streams are requested by sending the following filter:

               <netconf xmlns="urn:ietf:params:xml:ns:netmod:notification">
                 <streams/>
               </netconf>

              If more complex filtering  is  needed,  use  ct_netconfc:get/2,3  and  specify  the  exact  filter
              according to "XML Schema for Event Notifications" in RFC 5277.

       get_session_id(Client) -> Result

       get_session_id(Client, Timeout) -> Result

              Types:

                 Client = client()
                 Timeout = timeout()
                 Result = integer() >= 1 | {error, error_reason()}

              Returns the session Id associated with the specified client.

       hello(Client) -> Result

       hello(Client, Timeout) -> Result

       hello(Client, Options, Timeout) -> Result

              Types:

                 Client = handle()
                 Options = [{capability, [string()]}]
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Exchanges hello messages with the server.

              Adds optional capabilities and sends a hello message to the server and waits for the return.

       kill_session(Client, SessionId) -> Result

       kill_session(Client, SessionId, Timeout) -> Result

              Types:

                 Client = client()
                 SessionId = integer() >= 1
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Forces termination of the session associated with the supplied session Id.

              The server side must abort any ongoing operations, release any locks and resources associated with
              the session, and close any associated connections.

              Only  if  the  server is in the confirmed commit phase, the configuration is restored to its state
              before entering the confirmed commit phase. Otherwise, no configuration rollback is performed.

              If the specified SessionId is equal to the current session Id, an error is returned.

       lock(Client, Target) -> Result

       lock(Client, Target, Timeout) -> Result

              Types:

                 Client = client()
                 Target = netconf_db()
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Locks the configuration target.

              Which target parameters that can be used depends on if :candidate and/or :startup are supported by
              the server. If successfull, the configuration system of the device is unavailable to other clients
              (NETCONF, CORBA, SNMP, and so on). Locks are intended to be short-lived.

              Operation kill_session/2,3 can be used to force the release of a lock  owned  by  another  NETCONF
              session. How this is achieved by the server side is implementation-specific.

       only_open(Options) -> Result

              Types:

                 Options = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Opens a NETCONF session, but does not send hello.

              As open/1, but does not send a hello message.

       only_open(KeyOrName, ExtraOptions) -> Result

              Types:

                 KeyOrName = ct:key_or_name()
                 ExtraOptions = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Opens a named NETCONF session, but does not send hello.

              As open/2, but does not send a hello message.

       open(Options) -> Result

              Types:

                 Options = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Opens a NETCONF session and exchanges hello messages.

              If  the  server  options are specified in a configuration file, or if a named client is needed for
              logging purposes (see section Logging in this module), use open/2 instead.

              The opaque handle() reference returned from this function is required as  client  identifier  when
              calling any other function in this module.

              Option  timeout (milliseconds) is used when setting up the SSH connection and when waiting for the
              hello message from the server. It is not used for any other purposes during the  lifetime  of  the
              connection.

       open(KeyOrName, ExtraOptions) -> Result

              Types:

                 KeyOrName = ct:key_or_name()
                 ExtraOptions = options()
                 Result = {ok, handle()} | {error, error_reason()}

              Opens a named NETCONF session and exchanges hello messages.

              If  KeyOrName  is a configured server_id() or a target_name() associated with such an Id, then the
              options for this server are fetched from the configuration file.

              Argument ExtraOptions is added to the options found in the configuration file. If the same options
              are specified, the values from the configuration file overwrite ExtraOptions.

              If the server is not specified in a configuration file, use open/1 instead.

              The opaque handle() reference returned from this function can be used as  client  identifier  when
              calling  any  other function in this module. However, if KeyOrName is a target_name(), that is, if
              the server is named through a call to ct:require/2 or a require statement in the test suite,  then
              this name can be used instead of handle().

              Option  timeout (milliseconds) is used when setting up the SSH connection and when waiting for the
              hello message from the server. It is not used for any other purposes during the  lifetime  of  the
              connection.

              See also ct:require/2.

       send(Client, SimpleXml) -> Result

       send(Client, SimpleXml, Timeout) -> Result

              Types:

                 Client = client()
                 SimpleXml = simple_xml()
                 Timeout = timeout()
                 Result = simple_xml() | {error, error_reason()}

              Sends an XML document to the server.

              The  specified  XML  document is sent "as is" to the server. This function can be used for sending
              XML documents that cannot be expressed by other interface functions in this module.

       send_rpc(Client, SimpleXml) -> Result

       send_rpc(Client, SimpleXml, Timeout) -> Result

              Types:

                 Client = client()
                 SimpleXml = simple_xml()
                 Timeout = timeout()
                 Result = [simple_xml()] | {error, error_reason()}

              Sends a NETCONF rpc request to the server.

              The specified XML document is wrapped in a valid NETCONF rpc request and sent to the  server.  The
              message-id and namespace attributes are added to element rpc.

              This  function  can  be  used for sending rpc requests that cannot be expressed by other interface
              functions in this module.

       session(Conn) -> Result

       session(Conn, Options) -> Result

       session(KeyOrName, Conn) -> Result

       session(KeyOrName, Conn, Options) -> Result

              Types:

                 Conn = handle()
                 Options = session_options()
                 KeyOrName = ct:key_or_name()
                 Result = {ok, handle()} | {error, error_reason()}
                 session_options() = [session_option()]
                 session_option() = {timeout, timeout()}

              Opens a NETCONF session as a channel on the given SSH connection,  and  exchanges  hello  messages
              with the server.

              The  opaque  handle()  reference returned from this function can be used as client identifier when
              calling any  other  function  in  this  module.  However,  if  KeyOrName  is  used  and  it  is  a
              target_name(),  that  is,  if  the  server  is  named  through a call to ct:require/2 or a require
              statement in the test suite, then this name can be used instead of handle().

       unlock(Client, Target) -> Result

       unlock(Client, Target, Timeout) -> Result

              Types:

                 Client = client()
                 Target = netconf_db()
                 Timeout = timeout()
                 Result = ok | {error, error_reason()}

              Unlocks the configuration target.

              If the client earlier has acquired a lock through lock/2,3, this operation releases the associated
              lock. To access another target than running, the server must support :candidate and/or :startup.

Ericsson AB                                    common_test 1.15.3                              ct_netconfc(3erl)