Provided by: erlang-manpages_18.3-dfsg-1ubuntu3.1_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)..

       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 target_name() (see module ct) must then be used in  calls
       to ct_netconfc:open/2.

       If  no  configuration  exists  for  a  server,  a  session  can still be opened by calling
       ct_netconfc:open/2 with all necessary options specified in the call. The first argument to
       ct_netconfc:open/2 can then be any atom.

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, [{conn_mod(),hook_options()}]}]}].

       conn_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 ct_netconfc: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,[{conn_mod(),hook_options()}]}.

       For example:

        {ct_conn_log,[{ct_netconfc,[{log_type,pretty},
                                    {hosts,[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   ct_netconfc:create_subscription/6   and
       ct_netconfc:get_event_streams/3. (The functions also exist with other arities.)

DATA TYPES

         client() = handle() | key_or_name():

           For handle(), see module ct.

         error_reason() = term():

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

         handle() = term():

           Opaque  reference for a connection (NETCONF session). For more information, see module
           ct.

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

         key_or_name() = server_id() | target_name():

           For target_name, see module ct.

         netconf_db() = running | startup | candidate:

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

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

         option()  =  {ssh,  host()}  |  {port,  inet:port_number()}  |  {timeout,  timeout()}  |
         SshConnectOption:

           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

              Equivalent to ct_netconfc:action(Client, Action, infinity).

       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

              Equivalent to ct_netconfc:close_session(Client, infinity).

       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.

       copy_config(Client, Source, Target) -> Result

              Equivalent to ct_netconfc:copy_config(Client, Source, Target, infinity).

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

              Types:

                 Client = client()
                 Target = netconf_db()
                 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) -> term()

       create_subscription(Client, Timeout) -> term()

       create_subscription(Client, Stream, Timeout) -> term()

       create_subscription(Client, StartTime, StopTime, Timeout) -> term()

       create_subscription(Client, Stream, StartTime, StopTime, Timeout) -> term()

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

              Types:

                 Client = client()
                 Stream = stream_name()
                 Filter = simple_xml() | [simple_xml()]
                 StartTime = xs_datetime()
                 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().

                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

              Equivalent to ct_netconfc:delete_config(Client, Target, infinity).

       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.

       edit_config(Client, Target, Config) -> Result

              Equivalent to ct_netconfc:edit_config(Client, Target, Config, [], infinity).

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

              Types:

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

              If  OptParamsOrTimeout  is  a  time-out  value,  this  function  is  equivalent  to
              ct_netconfc:edit_config(Client, Target, Config, [], Timeout).

              If  OptParamsOrTimeout  is  a  list  of  simple XML, this function is equivalent to
              ct_netconfc:edit_config(Client, Target, Config, OptParams, infinity).

       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"]}]

       get(Client, Filter) -> Result

              Equivalent to ct_netconfc:get(Client, Filter, infinity).

       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

              Equivalent to ct_netconfc:get_capabilities(Client, infinity).

       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

              Equivalent to ct_netconfc:get_config(Client, Source, Filter, infinity).

       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, Timeout) -> Result

              Equivalent to ct_netconfc:get_event_streams(Client, [], Timeout).

       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 or ct_netconfc:get/3 and
              specify the exact filter according to "XML Schema for Event Notifications"  in  RFC
              5277.

       get_session_id(Client) -> Result

              Equivalent to ct_netconfc:get_session_id(Client, infinity).

       get_session_id(Client, Timeout) -> Result

              Types:

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

              Returns the session Id associated with the specified client.

       hello(Client) -> Result

              Equivalent to ct_netconfc:hello(Client, [], infinity).

       hello(Client, Timeout) -> Result

              Equivalent to ct_netconfc:hello(Client, [], Timeout).

       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

              Equivalent to ct_netconfc:kill_session(Client, SessionId, infinity).

       kill_session(Client, SessionId, Timeout) -> Result

              Types:

                 Client = client()
                 SessionId = pos_integer()
                 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

              Equivalent to ct_netconfc:lock(Client, Target, infinity).

       lock(Client, Target, Timeout) -> Result

              Types:

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

              Unlocks 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  ct_netconfc:kill_session/2  or ct_netconfc:kill_session/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 ct_netconfc:open/1, but does not send a hello message.

       only_open(KeyOrName, ExtraOptions) -> Result

              Types:

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

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

              As ct_netconfc: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
              ct_netconfc: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 = 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 ct_netconfc: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

              Equivalent to ct_netconfc:send(Client, SimpleXml, infinity).

       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

              Equivalent to ct_netconfc:send_rpc(Client, SimpleXml, infinity).

       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.

       unlock(Client, Target) -> Result

              Equivalent to ct_netconfc:unlock(Client, Target, infinity).

       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   ct_netconfc:lock/2   or
              ct_netconfc:lock/3,  this operation releases the associated lock. To access another
              target than running, the server must support :candidate and/or :startup.