trusty (3) ct_netconfc.3erl.gz

Provided by: erlang-manpages_16.b.3-dfsg-1ubuntu2.2_all bug

NAME

       ct_netconfc - Netconf client module.

DESCRIPTION

       Netconf client module.

       The Netconf client is compliant with RFC4741 and RFC4742.

       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 ct) shall then be used in calls to open/2.

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

       Logging

       The netconf server uses the 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 your test suite,
       e.g.

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

       The conn_mod() is the  name  of  the  common_test  module  implementing  the  connection  protocol,  e.g.
       ct_netconfc.

       The 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, it is possible to have
       different connections logged in separate files. To do this, use the hook option hosts and list the  names
       of  the  servers/connections  that will be used in the suite. Note that the connections must be named for
       this to work, i.e. they must be opened with open/2.

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

       The hook options can  also  be  specified  in  a  configuration  file  with  the  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 that hook options specified in a configuration file will overwrite the hardcoded hook options in the
       test suite.

       Logging example 1

       The following ct_hooks statement will cause pretty printing of netconf traffic to separate logs  for  the
       connections named nc_server1 and nc_server2. Any other connections will be 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 like this:

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

       Logging example 2

       The following configuration file will cause raw logging of all netconf traffic into one single text file.

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

       The ct_hooks statement must look like this:

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

       The  same  ct_hooks  statement  without  the  configuration  file would cause HTML logging of all netconf
       connections into the test case HTML log.

       Notifications

       The netconf client is also compliant with RFC5277 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/6 and get_event_streams/3. (The functions also
       exist with other arities.)

DATA TYPES

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

         conn_mod() = ct_netconfc:

         error_reason() = term():

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

         handle() = term():

           An opaque reference for a connection (netconf session). See ct for more information.

         hook_option() = {log_type, log_type()} | {hosts, [key_or_name()]}:

         hook_options() = [hook_option()]:

           Options that can be given to cth_conn_log in the ct_hook statement.

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

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

         log_type() = raw | pretty | html | silent:

           -type error_handler() :: module().

         netconf_db() = running | startup | candidate:

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

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

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

         options() = [option()]:

           Options used for setting up ssh connection to a netconf server.

         server_id() = atom():

           A ServerId which exists in a configuration file.

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

           This type is further described in the documentation for the Xmerl application.

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

           See XML Schema for Event Notifications found in RFC5277 for further detail about the data format  for
           the string values.

         stream_name() = string():

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

         target_name() = atom():

           A  name which is associated to a server_id() via a require statement or a call to ct:require/2 in the
           test suite.

         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 identifyer has the same format as the XML type dateTime and compliant to  RFC3339.
           The format is

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

EXPORTS

       action(Client, Action) -> Result

              Equivalent to action(Client, Action, infinity).

       action(Client, Action, Timeout) -> Result

              Types:

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

              Execute an action.

       close_session(Client) -> Result

              Equivalent to close_session(Client, infinity).

       close_session(Client, Timeout) -> Result

              Types:

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

              Request graceful termination of the session associated with the client.

              When  a netconf server receives a close-session request, it will gracefully close the session. The
              server will release any locks and resources associated with the session and gracefully  close  any
              associated  connections.  Any  NETCONF  requests  received  after  a close-session request will be
              ignored.

       copy_config(Client, Source, Target) -> Result

              Equivalent to 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()}

              Copy configuration data.

              Which source and target options that can be issued depends on the capabilities  supported  by  the
              server. I.e. :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()}

              Create a subscription for event notifications.

              This  function  sets  up  a subscription for netconf event notifications of the given stream type,
              matching the given filter. The calling process will receive  notifications  as  messages  of  type
              notification().

                Stream::
                  An  optional  parameter  that indicates which stream of events is of interest. If not present,
                  events in the default NETCONF stream will be sent.

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

                StartTime::
                  An optional parameter used to trigger the replay feature and indicate that the  replay  should
                  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 the  StartTime
                  specified  is  earlier  than  the  log  can  support,  the replay will begin with the earliest
                  available notification. This parameter  is  of  type  dateTime  and  compliant  to  [RFC3339].
                  Implementations must support time zones.

                StopTime::
                  An  optional  parameter  used  with  the  optional  replay  feature  to  indicate  the  newest
                  notifications of interest. If StopTime is not present, the notifications will  continue  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
                  [RFC3339]. Implementations must support time zones.

              See RFC5277 for further details about the event notification mechanism.

       delete_config(Client, Target) -> Result

              Equivalent to delete_config(Client, Target, infinity).

       delete_config(Client, Target, Timeout) -> Result

              Types:

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

              Delete 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 edit_config(Client, Target, Config, infinity).

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

              Types:

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

              Edit configuration data.

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

       format_data(How, Data) -> term()

       get(Client, Filter) -> Result

              Equivalent to 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()}

              Get data.

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

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

       get_capabilities(Client) -> Result

              Equivalent to 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, 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"

              Note, additional identifiers may exist, e.g. server side namespace.

       get_config(Client, Source, Filter) -> Result

              Equivalent to 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()}

              Get configuration data.

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

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

       get_event_streams(Client, Timeout) -> Result

              Equivalent to 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()}

              Send a request to get the given event streams.

              Streams is a list of stream names. The following filter will be 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 will be requested by sending the following filter:

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

              If  more  complex filtering is needed, a use get/2 or get/3 and specify the exact filter according
              to XML Schema for Event Notifications found in RFC5277.

       get_session_id(Client) -> Result

              Equivalent to 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 given client.

       handle_msg(X1, State) -> term()

       hello(Client) -> Result

              Equivalent to hello(Client, infinity).

       hello(Client, Timeout) -> Result

              Types:

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

              Exchange hello messages with the server.

              Sends a hello message to the server and waits for the return.

       kill_session(Client, SessionId) -> Result

              Equivalent to kill_session(Client, SessionId, infinity).

       kill_session(Client, SessionId, Timeout) -> Result

              Types:

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

              Force termination of the session associated with the supplied session id.

              The server side shall abort any operations currently in process, 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 will be restored to its
              state before entering the confirmed commit phase. Otherwise, no configuration roll  back  will  be
              performed.

              If the given SessionId is equal to the current session id, an error will be returned.

       lock(Client, Target) -> Result

              Equivalent to lock(Client, Target, infinity).

       lock(Client, Target, Timeout) -> Result

              Types:

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

              Unlock 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  not  available  to  other
              clients (Netconf, CORBA, SNMP etc). Locks are intended to be short-lived.

              The  operations  kill_session/2 or 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()}

              Open a netconf session, but don't send hello.

              As 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()}

              Open a name netconf session, but don't send hello.

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

       open(Options) -> Result

              Types:

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

              Open a netconf session and exchange hello messages.

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

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

              The timeout option (milli seconds) 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()}

              Open a named netconf session and exchange hello messages.

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

              The  ExtraOptions  argument  will  be added to the options found in the configuration file. If the
              same options are given, the values from the configuration file will overwrite ExtraOptions.

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

              The opaque handle() reference which  is  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(), i.e. if the server is named via a call to ct:require/2 or a  require  statement  in
              the test suite, then this name may be used instead of the handle().

              The timeout option (milli seconds) 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 send(Client, SimpleXml, infinity).

       send(Client, SimpleXml, Timeout) -> Result

              Types:

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

              Send an XML document to the server.

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

       send_rpc(Client, SimpleXml) -> Result

              Equivalent to send_rpc(Client, SimpleXml, infinity).

       send_rpc(Client, SimpleXml, Timeout) -> Result

              Types:

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

              Send a Netconf rpc request to the server.

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

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

       unlock(Client, Target) -> Result

              Equivalent to unlock(Client, Target, infinity).

       unlock(Client, Target, Timeout) -> Result

              Types:

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

              Unlock configuration target.

              If the client earlier has aquired a lock,  via  lock/2  or  lock/3,  this  operation  release  the
              associated  lock.  To  be  able  to  access  another  target than running, the server must support
              :candidate and/or :startup.

AUTHORS

       Support <>

                                                common_test 1.7.4                              ct_netconfc(3erl)