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.