libnetconf2  3.5.4
NETCONF server and client library in C.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Client Session

Client-side NETCONF session manipulation. More...

Collaboration diagram for Client Session:

Typedefs

typedef void(* nc_client_monitoring_clb )(struct nc_session *session, void *user_data)
 Callback for monitoring client sessions. More...
 
typedef void(* nc_notif_dispatch_clb )(struct nc_session *session, const struct lyd_node *envp, const struct lyd_node *op, void *user_data)
 Callback for receiving notifications in a separate thread. More...
 

Functions

void nc_client_enable_tcp_keepalives (int enable)
 Enable or disable TCP keepalives. Only affects new sessions. More...
 
int nc_client_monitoring_thread_start (nc_client_monitoring_clb monitoring_clb, void *user_data, void(*free_data)(void *))
 Start a thread that monitors client sessions. More...
 
void nc_client_monitoring_thread_stop (void)
 Stop the client session monitoring thread. More...
 
void nc_client_session_set_not_strict (struct nc_session *session)
 Make a session not strict when sending RPCs and receiving RPC replies. In other words, it will silently skip unknown nodes without an error. More...
 
void nc_client_set_tcp_keepalives (uint16_t idle_time, uint16_t max_probes, uint16_t probe_interval)
 Set TCP keepalive options. More...
 
struct nc_session * nc_connect_inout (int fdin, int fdout, struct ly_ctx *ctx)
 Connect to the NETCONF server via proviaded input/output file descriptors. More...
 
struct nc_session * nc_connect_unix (const char *address, struct ly_ctx *ctx)
 Connect to the NETCONF server via unix socket. More...
 
NC_MSG_TYPE nc_recv_notif (struct nc_session *session, int timeout, struct lyd_node **envp, struct lyd_node **op)
 Receive NETCONF Notification. More...
 
int nc_recv_notif_dispatch (struct nc_session *session, nc_notif_dispatch_clb notif_clb)
 Receive NETCONF Notifications in a separate thread until the session is terminated or <notificationComplete> is received. More...
 
int nc_recv_notif_dispatch_data (struct nc_session *session, nc_notif_dispatch_clb notif_clb, void *user_data, void(*free_data)(void *))
 Receive NETCONF Notifications in a separate thread until the session is terminated or <notificationComplete> is received. Similar to nc_recv_notif_dispatch() but allows to set arbitrary user data that can be freed as well. More...
 
NC_MSG_TYPE nc_recv_reply (struct nc_session *session, struct nc_rpc *rpc, uint64_t msgid, int timeout, struct lyd_node **envp, struct lyd_node **op)
 Receive NETCONF RPC reply. More...
 
NC_MSG_TYPE nc_send_rpc (struct nc_session *session, struct nc_rpc *rpc, int timeout, uint64_t *msgid)
 Send NETCONF RPC message via the session. More...
 
const char * nc_session_cpblt (const struct nc_session *session, const char *capab)
 Check capability presence in a session. More...
 
const char *const * nc_session_get_cpblts (const struct nc_session *session)
 Get session capabilities. More...
 
int nc_session_ntf_thread_running (const struct nc_session *session)
 Check whether the session has a notification thread running. More...
 

Detailed Description

Client-side NETCONF session manipulation.

Typedef Documentation

typedef void(* nc_notif_dispatch_clb)(struct nc_session *session, const struct lyd_node *envp, const struct lyd_node *op, void *user_data)

Callback for receiving notifications in a separate thread.

Parameters
[in]sessionNC session that received the notification.
[in]envpNotification envelope data tree.
[in]opNotification body data tree.
[in]user_dataArbitrary user data passed to the callback.

Definition at line 564 of file session_client.h.

typedef void(* nc_client_monitoring_clb)(struct nc_session *session, void *user_data)

Callback for monitoring client sessions.

This callback is called whenever the client finds out that a session was disconnected by the server.

Parameters
[in]sessionDisconnected session. The session will not be freed, so it is safe to call nc_session_free() on it.
[in]user_dataArbitrary user data passed to the callback.

Definition at line 628 of file session_client.h.

Function Documentation

struct nc_session* nc_connect_inout ( int  fdin,
int  fdout,
struct ly_ctx *  ctx 
)

Connect to the NETCONF server via proviaded input/output file descriptors.

Transport layer is supposed to be already set. Function do not cover authentication or any other manipulation with the transport layer, it only establish NETCONF session by sending and processing NETCONF <hello> messages.

Parameters
[in]fdinInput file descriptor for reading (clear) data from NETCONF server.
[in]fdoutOutput file descriptor for writing (clear) data for NETCONF server.
[in,out]ctxOptional custom context to use for the session. If not set, a default context is created. Any YANG modules not present in the context and supported by the server are loaded using <get-schema> (if supported) and/or by searching the searchpath (see nc_client_set_schema_searchpath()).
Returns
Created NETCONF session object or NULL in case of error.
struct nc_session* nc_connect_unix ( const char *  address,
struct ly_ctx *  ctx 
)

Connect to the NETCONF server via unix socket.

Connect to netconf server via an unix socket. Function do not cover authentication or any other manipulation with the transport layer, it only establish NETCONF session by sending and processing NETCONF <hello> messages.

Parameters
[in]addressPath to the unix socket.
[in,out]ctxOptional custom context to use for the session. If not set, a default context is created. Any YANG modules not present in the context and supported by the server are loaded using <get-schema> (if supported) and/or by searching the searchpath (see nc_client_set_schema_searchpath()).
Returns
Created NETCONF session object or NULL in case of error.
const char* const* nc_session_get_cpblts ( const struct nc_session *  session)

Get session capabilities.

Parameters
[in]sessionSession to get the information from.
Returns
NULL-terminated array of the session capabilities.
const char* nc_session_cpblt ( const struct nc_session *  session,
const char *  capab 
)

Check capability presence in a session.

Parameters
[in]sessionSession to check.
[in]capabCapability to look for, capability with any additional suffix will match.
Returns
Matching capability, NULL if none found.
int nc_session_ntf_thread_running ( const struct nc_session *  session)

Check whether the session has a notification thread running.

Parameters
[in]sessionSession to check.
Returns
1 if notfication thread is running, 0 otherwise.
NC_MSG_TYPE nc_recv_reply ( struct nc_session *  session,
struct nc_rpc rpc,
uint64_t  msgid,
int  timeout,
struct lyd_node **  envp,
struct lyd_node **  op 
)

Receive NETCONF RPC reply.

Note
This function can be called in a single thread only.
Parameters
[in]sessionNETCONF session from which the function gets data. It must be the client side session object.
[in]rpcOriginal RPC this should be the reply to.
[in]msgidExpected message ID of the reply.
[in]timeoutTimeout for reading in milliseconds. Use negative value for infinite waiting and 0 for immediate return if data are not available on the wire.
[out]envpNETCONF rpc-reply XML envelopes.
[out]opParsed NETCONF reply data, if any (none for <ok> or error replies). Set only on NC_MSG_REPLY and NC_MSG_REPLY_ERR_MSGID return.
Returns
NC_MSG_REPLY for success, NC_MSG_WOULDBLOCK if timeout has elapsed, NC_MSG_ERROR if reading has failed, NC_MSG_NOTIF if a notification was read instead (call this function again to get the reply), and NC_MSG_REPLY_ERR_MSGID if a reply with missing or wrong message-id was received.
NC_MSG_TYPE nc_recv_notif ( struct nc_session *  session,
int  timeout,
struct lyd_node **  envp,
struct lyd_node **  op 
)

Receive NETCONF Notification.

Parameters
[in]sessionNETCONF session from which the function gets data. It must be the client side session object.
[in]timeoutTimeout for reading in milliseconds. Use negative value for infinite waiting and 0 for immediate return if data are not available on the wire.
[out]envpNETCONF notification XML envelopes.
[out]opParsed NETCONF notification data.
Returns
NC_MSG_NOTIF for success, NC_MSG_WOULDBLOCK if timeout has elapsed, NC_MSG_ERROR if reading has failed, and NC_MSG_REPLY if a reply was read instead (call this function again to get a notification).
int nc_recv_notif_dispatch ( struct nc_session *  session,
nc_notif_dispatch_clb  notif_clb 
)

Receive NETCONF Notifications in a separate thread until the session is terminated or <notificationComplete> is received.

Parameters
[in]sessionNetconf session to read notifications from.
[in]notif_clbFunction that is called for every received notification (including <notificationComplete>). Parameters are the session the notification was received on and the notification data.
Returns
0 if the thread was successfully created, -1 on error.
int nc_recv_notif_dispatch_data ( struct nc_session *  session,
nc_notif_dispatch_clb  notif_clb,
void *  user_data,
void(*)(void *)  free_data 
)

Receive NETCONF Notifications in a separate thread until the session is terminated or <notificationComplete> is received. Similar to nc_recv_notif_dispatch() but allows to set arbitrary user data that can be freed as well.

Parameters
[in]sessionNetconf session to read notifications from.
[in]notif_clbCallback that is called for every received notification (including <notificationComplete>). Parameters are the session the notification was received on and the notification data.
[in]user_dataArbitrary user data.
[in]free_dataCallback for freeing the user data after notif thread exit.
Returns
0 if the thread was successfully created, -1 on error.
NC_MSG_TYPE nc_send_rpc ( struct nc_session *  session,
struct nc_rpc rpc,
int  timeout,
uint64_t *  msgid 
)

Send NETCONF RPC message via the session.

Parameters
[in]sessionNETCONF session where the RPC will be written.
[in]rpcNETCONF RPC object to send via the specified session.
[in]timeoutTimeout for writing in milliseconds. Use negative value for infinite waiting and 0 for return if data cannot be sent immediately.
[out]msgidIf RPC was successfully sent, this is it's message ID.
Returns
NC_MSG_RPC on success, NC_MSG_WOULDBLOCK in case of a busy session, and NC_MSG_ERROR on error.
void nc_client_session_set_not_strict ( struct nc_session *  session)

Make a session not strict when sending RPCs and receiving RPC replies. In other words, it will silently skip unknown nodes without an error.

Generally, no such data should be worked with, so use this function only when you know what you are doing and you understand the consequences.

Parameters
[in]sessionNETCONF client session.
int nc_client_monitoring_thread_start ( nc_client_monitoring_clb  monitoring_clb,
void *  user_data,
void(*)(void *)  free_data 
)

Start a thread that monitors client sessions.

Once the thread is running, new sessions will be monitored automatically.

Note that once you start the monitoring thread, any other client thread that calls nc_session_free() needs to share the same thread context (or be the same thread) as the thread that called this function (see nc_client_set_thread_context()).

Parameters
[in]monitoring_clbCallback called whenever a session is terminated.
[in]user_dataArbitrary user data passed to the callback.
[in]free_dataCallback for freeing the user data after monitoring thread exits.
Returns
0 on success, 1 on error.
void nc_client_monitoring_thread_stop ( void  )

Stop the client session monitoring thread.

void nc_client_enable_tcp_keepalives ( int  enable)

Enable or disable TCP keepalives. Only affects new sessions.

Client-side TCP keepalives have the following default values:

  • idle time: 1 second
  • max probes: 10
  • probe interval: 5 seconds
Parameters
[in]enableWhether to enable or disable TCP keepalives.
void nc_client_set_tcp_keepalives ( uint16_t  idle_time,
uint16_t  max_probes,
uint16_t  probe_interval 
)

Set TCP keepalive options.

Parameters
[in]idle_timeTime in seconds before the first keepalive probe is sent. If 0, the default value 1 is used.
[in]max_probesMaximum number of keepalive probes to send before considering the connection dead. If 0, the default value 10 is used.
[in]probe_intervalTime in seconds between individual keepalive probes. If 0, the default value 5 is used.