/* ipl2tp_api_tunnel.h - IPL2TP Tunnel API. */ /* DESCRIPTION API for the Layer 2 tunneling protocol. */ /* ****************************************************************************** * HEADER FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipl2tp_api_tunnel.h,v $ $Revision: 1.3 $ * $Source: /home/interpeak/CVSRoot/ipl2tp/include/ipl2tp_api_tunnel.h,v $ * $Author: tneale $ $Date: 2009-10-27 14:37:05 $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Joel Hortelius ****************************************************************************** */ #ifndef IPL2TP_API_TUNNEL_H #define IPL2TP_API_TUNNEL_H /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ /* **************************************************************************** * 5 TYPES **************************************************************************** */ /* **************************************************************************** * 6 FUNCTIONS **************************************************************************** */ /******************************************************************************* * * ipl2tp_api_interface_attribute_set - Set the attributes of a tunnel interface. * * Set the attributes of a tunnel interface. This function is equivalent to * ipl2tp_api_tunnel_attribute_set(), but the tunnel is specified with an interface * index instead of a tunnel key. * * Note that a tunnel must be assigned an interface index before this function is used. * The assignment is done with the 'IPL2TP_TATTR_SET_tunnelIfIndex' attribute. * * Refer to the attribute functions named ipl2tp_attr_xxx() for information on * how to enter values into and obtain values from an attribute object. * * A return status of IPL2TP_STATUS_BADPARAM indicates that at least one of * the attributes had an invalid value. The invalid attribute may be located by using * the ipl2tp_attr_status() function. The offending attribute has a status of * IPL2TP_STATUS_BADPARAM. * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_interface_attribute_set(Ip_u16 ifindex, Ipl2tp_attrobj attrobj); * \ce * * PARAMETERS * \is * \i 'ifindex' Interface index. * \i 'attrobj' Tunnel attributes. * \ie * * ATTRIBUTES * * This function supports the same attributes as ipl2tp_api_tunnel_attribute_set(). * Refer to that function for a complete attribute list. * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_BADID' if the tunnel ID is invalid. * \i 'IPL2TP_STATUS_BADPARAM' if a bad attribute object(s) is present. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_attrobj attrobj = IP_NULL; * * /@ Create attribute object @/ * ipl2tp_attr_iappend(&attrobj, IPL2TP_TATTR_SET_l2tpTunnelConfigControlRWS, 100); * * /@ Set parameter @/ * ipl2tp_api_interface_attribute_set(ifindex, attrobj); * * /@ Free attribute object @/ * ipl2tp_attr_delete(&attrobj); * } * \ce * * * SEE ALSO * * ipl2tp_attr_new(), ipl2tp_attr_delete(), ipl2tp_attr_iappend(), * ipl2tp_attr_pappend(), ipl2tp_attr_first(), ipl2tp_attr_next(), ipl2tp_attr_tag(), * ipl2tp_attr_idata(), ipl2tp_attr_pdata() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_interface_attribute_set(Ip_u32 ifindex, Ipl2tp_attrobj attr); /******************************************************************************* * * ipl2tp_api_interface_attribute_get - Get the attributes of a tunnel interface. * * Get the attributes of a tunnel interface. This function is equivalent to * ipl2tp_api_tunnel_attribute_get(), but the tunnel is specified with an interface * index instead of a tunnel key. * * Note that a tunnel must be assigned an interface index before this function is used. * The assignment is done with the 'IPL2TP_TATTR_SET_tunnelIfIndex' attribute. * * Refer to the attribute functions named ipl2tp_attr_xxx() for information on * how to enter values into and obtain values from an attribute object. * * A return status of IPL2TP_STATUS_BADPARAM indicates that at least one of * the attributes had an invalid value. The invalid attribute may be located by using * the ipl2tp_attr_status() function. The offending attribute has a status of * IPL2TP_STATUS_BADPARAM. * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_interface_attribute_get(Ip_u16 ifindex, Ipl2tp_attrobj attrobj, Ipl2tp_attrobj *replies); * \ce * * PARAMETERS * \is * \i 'ifindex' Interface index. * \i 'attrobj' Tunnel attributes. * \i 'replies' The placeholder for the return values. * \ie * * ATTRIBUTES * * This function supports the same attributes as ipl2tp_api_tunnel_attribute_get(). * Refer to that function for a complete attribute list. * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_BADID' if the tunnel ID is invalid. * \i 'IPL2TP_STATUS_BADPARAM' if a bad attribute object(s) is present. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_attrobj attrobj = IP_NULL; * Ipl2tp_attrobj replies = IP_NULL; * Ipl2tp_attr a; * * /@ Create attribute object @/ * ipl2tp_attr_add_query(&attrobj, IPL2TP_TATTR_RW_l2tpTunnelConfigControlRWS); * * /@ Get parameter @/ * ipl2tp_api_interface_attribute_get(ifindex, attrobj, &replies); * a = ipl2tp_attr_first(replies); * printf("Window size is %d\n", ipl2tp_attr_idata(a)); * * /@ Free attribute object @/ * ipl2tp_attr_delete(&attrobj); * ipl2tp_attr_delete(&replies); * } * \ce * * * SEE ALSO * * ipl2tp_attr_new(), ipl2tp_attr_delete(), ipl2tp_attr_iappend(), * ipl2tp_attr_pappend(), ipl2tp_attr_first(), ipl2tp_attr_next(), ipl2tp_attr_tag(), * ipl2tp_attr_idata(), ipl2tp_attr_pdata() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_interface_attribute_get(Ip_u32 ifindex, Ipl2tp_attrobj attr, Ipl2tp_attrobj *replies); /******************************************************************************* * * ipl2tp_api_tunnel_attribute_set - Set the tunnel attributes. * * Set the tunnel attributes. Refer to the attribute functions named * ipl2tp_attr_xxx() for information of how to enter values into and obtain values * from an attribute object. * * A return status of IPL2TP_STATUS_BADPARAM indicates that at least one of * the attributes had an invalid value. The invalid attribute may be located by using * the ipl2tp_attr_status() function. The offending attribute has a status of * IPL2TP_STATUS_BADPARAM. * * Attribute types are: * \ts * 'integer' | - | 32-bit unsigned integer. * 'pointer' | - | General-purpose pointer. * 'string' | - | Pointer to null-terminated character string. * 'vector' | - | General-purpose vector with variable length. * 'address' | - | Address. * 'integer64' | - | 64-bit unsigned integer. * 'key' | - | Tunnel/Session key. * \te * * Use codes are: * \ts * 'default' | - | May be used as tunnel default in the ipl2tp_open() call. * 'open' | - | May be used in the ipl2tp_tunnel_open() and ipl2tp_session_open() calls. * 'idle' | - | May be used on a non-established tunnel in the ipl2tp_tunnel_control() call. * 'control' | - | May be used on an established tunnel in the ipl2tp_tunnel_control() call. * 'all' | - | May be used in any context. * \te * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_tunnel_attribute_set(Ipl2tp_key *tkey, Ipl2tp_attrobj attrobj); * \ce * * PARAMETERS * \is * \i 'tkey' Tunnel ID. * \i 'attrobj' Tunnel attributes. * \ie * * ATTRIBUTES * \is * * \i 'IPL2TP_TATTR_SET_BEARER_CAPABILITIES' * \ts * Use: default, open, idle. * Type: integer. * Set the bearer capabilities of the tunnel. * Valid values are: * 'IPL2TP_MIB_BEARER_NONE' * 'IPL2TP_MIB_BEARER_DIGITAL' * 'IPL2TP_MIB_BEARER_ANALOG' * 'IPL2TP_MIB_BEARER_DIGITAL_ANALOG' * \te * * \i 'IPL2TP_TATTR_SET_FRAMING_CAPABILITIES' * \ts * Use: default, open, idle. * Type: integer. * Set the framing capabilities of the tunnel. * Valid values are: * 'IPL2TP_MIB_FRAMING_NONE' * 'IPL2TP_MIB_FRAMING_SYNC' * 'IPL2TP_MIB_FRAMING_ASYNC' * 'IPL2TP_MIB_FRAMING_SYNC_ASYNC' * \te * * \i 'IPL2TP_TATTR_SET_HIDE_AVP' * \ts * Use: all. * Type: integer. * Set the hide flag for the tunnel. When the hide flag is enabled, transmitted AVP values are hidden using an MD5 algorithm. * Note that hiding only takes place if there is a shared secret configured for the tunnel. This is done with the 'IPL2TP_TATTR_SET_l2tpTunnelConfigSecret' attribute. * \te * * \i 'IPL2TP_TATTR_SET_PEER_HOST_NAME' * \ts * Use: open, idle. * Type: string. * Set the expected name of the peer host. This name is used in the simple (host name) authentication scheme. * \te * * \i 'IPL2TP_TATTR_SET_STATUS_CALLBACK' * \ts * Use: all. * Type: pointer. * Set the function pointer of the tunnel status callback routine. * The callback is called whenever there is a change in tunnel status. * The callback routine uses the Ipl2tp_status_callback() prototype. * \te * * \i 'IPL2TP_TATTR_SET_USER_DATA' * \ts * Use: all. * Type: pointer. * Set the user-defined pointer that is passed as a parameter to the tunnel status callback. This pointer can be used to point to a set of application-specific variables. * \te * * \i 'IPL2TP_TATTR_SET_ifAdminStatus' * \ts * Use: idle, control. * Type: integer. * Set the administrative status of a tunnel. * Valid values are: * 'IPL2TP_MIB_DOWN' Tunnel is down * 'IPL2TP_MIB_UP' Tunnel is up * \te * Note that getting this attribute may not necessarily show the actual status of the tunnel, rather the status that the tunnel is aiming at. For a correct snapshot of the current status, use the 'IPL2TP_TATTR_GET_ifOperStatus' attribute. * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigAuthentication' * \ts * Use: default, open, idle. * Type: integer. * Set the authentication model to use when establishing the tunnel. * Valid values are: * 'IPL2TP_MIB_AUTH_NONE' No authentication. * 'IPL2TP_MIB_AUTH_SIMPLE' Host name authentication. * 'IPL2TP_MIB_AUTH_CHALLENGE' Challenge authentication. * 'IPL2TP_MIB_AUTH_DIGEST' MD5 or SHA digest for L2TPV3 * \te * Note that simple authentication requires setting of the 'IPL2TP_TATTR_RW_PEER_HOST_NAME' attribute, and that challenge authentication requires setting of the 'IPL2TP_TATTR_SET_l2tpTunnelConfigSecret' attribute. * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigControlMaxRetransmissionTimeout' * \ts * Use: all. * Type: integer. * Set the maximum timeout between control channel retransmissions. The first retransmission timeout is controlled by the 'IPL2TP_ATTR_SET_FIRST_RETRANSMIT_SEC' attribute, and further retransmission timeouts are doubled at each unsuccessful retry. This attribute places a cap on the retransmission timeout. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigControlMaxRetransmissions' * \ts * Use: all. * Type: integer. * Set the maximum number of retransmissions. Note that the initial transmission is not included, so entering a value of 5 is given a total of 6 transmissions. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigControlRWS' * \ts * Use: all. * Type: integer. * Set the control channel receive window size, specifying how many packets the peer host may send without waiting for an acknowledgement. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigDrainTunnel' * \ts * Use: open, idle, control. * Type: integer. * Set the draining state of this tunnel. When draining is enabled, no additional session establishments are accepted. * Valid values are: * 'IPL2TP_MIB_YES' Enable draining * 'IPL2TP_MIB_NO' Disable draining * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigHelloInterval' * \ts * Use: all. * Type: integer. * Set the interval between HELLO messages, which are sent on the tunnel when there is no control channel activity from the peer host. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigIdleTimeout' * \ts * Use: all. * Type: integer. * Set the number of seconds a tunnel is kept in the established state after all sessions are deleted. The only supported value is 0. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigPayloadSequencing' * \ts * Use: all. * Type: integer. * Set the state of data channel sequencing. * Valid values are: * 'IPL2TP_MIB_NEVER' The LAC never initiates payload sequencing, but enables it if requested by the LNS. * 'IPL2TP_MIB_ALWAYS' The LAC sends the Sequencing Required AVP during session establishment, which forces payload sequencing to be used. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigReassemblyTimeout' * \ts * Use: all. * Type: integer. * Set the number of milliseconds to wait until processing out-of-order payload packets. The only supported value is 0. * \te * * \i 'IPL2TP_TATTR_SET_l2tpTunnelConfigSecret' * \ts * Use: open, idle. * Type: vector. * Set the shared secret used in the challenge authentication AVP hiding or digest schemes. * \te * * \i 'IPL2TP_TATTR_SET_tunnelIfIndex' * \ts * Use: open, idle. * Type: integer. * Set the interface index of the tunnel. This index must be set before using the function ipl2tp_interface_control() and the attributes 'IPL2TP_ATTR_GET_NEXT_IFINDEX' and 'IPL2TP_SATTR_GET_l2tpSessionStatsTunnelIfIndex'. * \te * * \i 'IPL2TP_TATTR_SET_LOCAL_ROUTER_ID' * \ts * Use: idle, control. * Type: integer. * Set the local router identification. * \te * * \i 'IPL2TP_TATTR_SET_LOCAL_PREFERRED_LANGUAGE' * \ts * Use: idle, control. * Type: string. * Set the local preferred language. * \te * * \i 'IPL2TP_TATTR_SET_LOCAL_PSEUDOWIRE_CAPABILITIES_LIST' * \ts * Use: idle, control. * Type: vector * Vector of 16-bit values containing the pseudowire capabilities. * \te * * \i 'IPL2TP_TATTR_SET_TRANSPORT' * \ts * Use: idle, control. * Type: integer * The transport to be used, either 'IPL2TP_ATTR_TRANSPORT_UDP' or 'IPL2TP_ATTR_TRANSPORT_IP'. * \te * * \i 'IPL2TP_TATTR_SET_HMAC' * \ts * Use: idle, control. * Type: integer * The HNAC algorithm to be used when using the digest authentication mechanism, either 'IPL2TP_MIB_AUTH_MD5' or 'IPL2TP_MIB_AUTH_SHA'. * \te * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_BADID' if the tunnel ID is invalid. * \i 'IPL2TP_STATUS_BADPARAM' if a bad attribute object(s) is present. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_attrobj attrobj = IP_NULL; * * /@ Create attribute object @/ * ipl2tp_attr_iappend(&attrobj, IPL2TP_TATTR_SET_HMAC, IPL2TP_MIB_AUTH_SHA); * * /@ Get parameter @/ * ipl2tp_api_tunnel_attribute_set(tkey, attrobj); * * /@ Free attribute object @/ * ipl2tp_attr_delete(&attrobj); * } * \ce * * * SEE ALSO * * ipl2tp_attr_new(), ipl2tp_attr_delete(), ipl2tp_attr_iappend(), * ipl2tp_attr_pappend(), ipl2tp_attr_first(), ipl2tp_attr_next(), ipl2tp_attr_tag(), * ipl2tp_attr_idata(), ipl2tp_attr_pdata() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_attribute_set(Ipl2tp_key *key, Ipl2tp_attrobj attr); /******************************************************************************* * * ipl2tp_api_tunnel_attribute_get - Get the tunnel attributes. * * Get the tunnel attributes. Refer to the attribute functions named * ipl2tp_attr_xxx() for information of how to enter values into and obtain values * from an attribute object. * * A return status of IPL2TP_STATUS_BADPARAM indicates that at least one of * the attributes had an invalid value. The invalid attribute may be located by using * the ipl2tp_attr_status() function. The offending attribute has a status of * IPL2TP_STATUS_BADPARAM. * * Attribute types are: * \ts * 'integer' | - | 32-bit unsigned integer. * 'pointer' | - | General-purpose pointer. * 'string' | - | Pointer to null-terminated character string. * 'vector' | - | General-purpose vector with variable length. * 'address' | - | Address. * 'integer64' | - | 64-bit unsigned integer. * 'key' | - | Tunnel/Session key. * \te * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_tunnel_attribute_get(Ipl2tp_key *tkey, Ipl2tp_attrobj attrobj, Ipl2tp_attrobj *replies); * \ce * * PARAMETERS * \is * \i 'tkey' Tunnel ID. * \i 'attrobj' Tunnel attributes. * \i 'replies' Tunnel attribute replies. * \ie * * ATTRIBUTES * \is * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsBearerCapabilities' or 'IPL2TP_TATTR_GET_BEARER_CAPABILITIES' * \ts * Type: integer. * Get the bearer capabilities of the tunnel. * Valid values are: * 'IPL2TP_MIB_BEARER_NONE' * 'IPL2TP_MIB_BEARER_DIGITAL' * 'IPL2TP_MIB_BEARER_ANALOG' * 'IPL2TP_MIB_BEARER_DIGITAL_ANALOG' * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsFramingCapabilities' or 'IPL2TP_TATTR_GET_FRAMING_CAPABILITIES' * \ts * Type: integer. * Get the framing capabilities of the tunnel. * Valid values are: * 'IPL2TP_MIB_FRAMING_NONE' * 'IPL2TP_MIB_FRAMING_SYNC' * 'IPL2TP_MIB_FRAMING_ASYNC' * 'IPL2TP_MIB_FRAMING_SYNC_ASYNC' * \te * * \i 'IPL2TP_TATTR_GET_HIDE_AVP' * \ts * Type: integer. * Get the hide flag for the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_PEER_HOST_NAME' * \ts * Type: string. * Get the expected name of the peer host. This name is used in the simple (host name) authentication scheme. * \te * * \i 'IPL2TP_TATTR_GET_STATUS_CALLBACK' * \ts * Type: pointer. * Get the function pointer of the tunnel status callback routine. * \te * * \i 'IPL2TP_TATTR_GET_USER_DATA' * \ts * Type: pointer. * Get the user-defined pointer that is passed as a parameter to the tunnel status callback. * \te * * \i 'IPL2TP_TATTR_GET_ifAdminStatus' * \ts * Type: integer. * Get the administrative status of a tunnel. * Valid values are: * 'IPL2TP_MIB_DOWN' Tunnel is down * 'IPL2TP_MIB_UP' Tunnel is up * \te * Note that getting this attribute may not necessarily show the actual status of the tunnel, rather the status that the tunnel is aiming at. * For a correct snapshot of the current status, use the 'IPL2TP_TATTR_GET_ifOperStatus' attribute. * * \i 'IPL2TP_TATTR_GET_ifDescr' * \ts * Type: string. * Get a string that describes the vendor, product name, and product revision of the tunnel interface. * \te * * \i 'IPL2TP_TATTR_GET_ifInDiscards' * \ts * Type: integer. * Get the number of discarded packets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_ifInErrors' * \ts * Type: integer. * Get the number of erroneous packets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_ifInOctets' * \ts * Type: integer. * Get the number of received octets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_ifInUcastPkts' * \ts * Type: integer. * Get the number of received packets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_ifOperStatus' * \ts * Type: integer. * Get the operative status of a tunnel. * Valid values are: * 'IPL2TP_MIB_DOWN' Tunnel is down * 'IPL2TP_MIB_UP' Tunnel is up * \te * * \i 'IPL2TP_TATTR_GET_ifOutOctets' * \ts * Type: integer. * Get the number of sent octets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_ifOutUcastPkts' * \ts * Type: integer. * Get the number of sent packets in the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigAuthentication' * \ts * Type: integer. * Get the authentication model to use when establishing the tunnel. * Valid values are: * 'IPL2TP_MIB_AUTH_NONE' No authentication. * 'IPL2TP_MIB_AUTH_SIMPLE' Host name authentication. * 'IPL2TP_MIB_AUTH_CHALLENGE' Challenge authentication. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigControlMaxRetransmissionTimeout' * \ts * Type: integer. * Get the maximum timeout between control channel retransmissions. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigControlMaxRetransmissions' * \ts * Type: integer. * Get the maximum number of retransmissions. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigControlRWS' * \ts * Type: integer. * Get the control channel receive window size. The value specifies how many packets the peer host may send without waiting for an acknowledgement. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigDrainTunnel' * \ts * Type: integer. * Get the draining state of this tunnel. Note that getting this attribute always returns IPL2TP_MIB_NO. To check the current state, use the 'IPL2TP_TATTR_GET_l2tpTunnelStatsDrainingTunnel' attribute. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigHelloInterval' * \ts * Type: integer. * Get the interval between HELLO messages, which are sent on the tunnel when there is no control channel activity from the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigIdleTimeout' * \ts * Type: integer. * Get the number of seconds a tunnel is kept in the established state after all sessions are deleted. The only supported value is 0. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigPayloadSequencing' * \ts * Type: integer. * Get the state of data channel sequencing. * Valid values are: * 'IPL2TP_MIB_NEVER' The LAC never initiates payload sequencing, but enables it if requested by the LNS. * 'IPL2TP_MIB_ALWAYS' The LAC sends the Sequencing Required AVP during session establishment, which forces payload sequencing to be used. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigReassemblyTimeout' * \ts * Type: integer. * Get the number of milliseconds to wait until processing out-of-order payload packets. The only supported value is 0. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelConfigSecret' * \ts * Type: vector. * Get the shared secret used in the challenge authentication scheme. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsActiveSessions' * \ts * Type: integer. * Get the number of active sessions in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlAckTimeouts' * \ts * Type: integer. * Get the number of control channel timeouts that have occurred in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlOutOfSequence' * \ts * Type: integer. * Get the number of out-of-sequence control messages that have been received in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlOutOfWindow' * \ts * Type: integer. * Get the number of out-of-window control messages that have been received in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlRecvPackets' * \ts * Type: integer. * Get the number of control messages that have been received in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlRecvZLB' * \ts * Type: integer. * Get the number of ZLB messages that have been received in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlSendPackets' * \ts * Type: integer. * Get the number of control messages that have been sent in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsControlSendZLB' * \ts * Type: integer. * Get the number of ZLB messages that have been sent in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsCurrentRemoteRWS' * \ts * Type: integer. * Get the current value of the remote receive window. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsDrainingTunnel' * \ts * Type: integer. * Get the draining state of the tunnel. * Valid values are: * 'IPL2TP_MIB_YES' Draining is enabled * 'IPL2TP_MIB_NO' Draining is disabled * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsFailedSessions' * \ts * Type: integer. * Get the number of session establishments that have failed in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsInitialRemoteRWS' * \ts * Type: integer. * Get the initial remote receive window size as reported by the peer host at tunnel establishment. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsInitiated' * \ts * Type: integer. * Get an indication if the tunnel was opened locally or by the LNS. * Valid values are: * 'IPL2TP_MIB_LOCALLY' Opened by the LAC * 'IPL2TP_MIB_REMOTELY' Opened by the LNS * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsLastErrorCode' * \ts * Type: integer. * Return the last error code that caused the tunnel to disconnect. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsLastErrorMessage' * \ts * Type: string. * Return the last error message that caused the tunnel to disconnect. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsLastResultCode' * \ts * Type: integer. * Return the last result code that caused the tunnel to disconnect. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsLocalTID' * \ts * Type: integer. * Get the local tunnel ID. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRecvSeq' * \ts * Type: integer. * Get the next expected receive sequence number. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRecvSeqAck' * \ts * Type: integer. * Get the last receive sequence number that was acknowledged by the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRemoteFirmwareRevision' * \ts * Type: integer. * Get the firmware revision of the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRemoteHostName' * \ts * Type: string. * Get the name of the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRemoteProtocolVersion' * \ts * Type: vector. * Get the protocol version and revision supported by the peer host. The value is returned as a vector of two octets, where the first octet indicates the version, and the second contains the revision. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRemoteTID' * \ts * Type: integer. * Get the tunnel ID assigned by the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsRemoteVendorName' * \ts * Type: string. * Get the vendor name of the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsSendSeq' * \ts * Type: integer. * Get the next send sequence number. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsSendSeqAck' * \ts * Type: integer. * Get the last send sequence number that was acknowledged by the peer host. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsState' * \ts * Type: integer. * Get the current state of the tunnel. * Valid values are: * 'IPL2TP_MIB_IDLE' Tunnel is idle. * 'IPL2TP_MIB_ESTABLISHED' Tunnel is established. * 'IPL2TP_MIB_DISCONNECTING' Tunnel is disconnecting. * 'IPL2TP_MIB_CONNECTING' Tunnel is connecting. * \te * * \i 'IPL2TP_TATTR_GET_l2tpTunnelStatsTotalSessions' * \ts * Type: integer. * Get the total number of sessions that have been established in this tunnel. * \te * * \i 'IPL2TP_TATTR_GET_tunnelEncapsMethod' * \ts * Type: integer. * Get the encapsulation method used. This always returns 'IPL2TP_MIB_L2TP'. * \te * * \i 'IPL2TP_TATTR_GET_tunnelIfIndex' * \ts * Type: integer. * Get the interface index of the tunnel. * \te * * \i 'IPL2TP_TATTR_GET_tunnelRemoteAddress' * \ts * Type: integer. * Get the IP address of the peer host. * \te * * \i 'IPL2TP_TATTR_GET_LOCAL_ROUTER_ID' * \ts * Type: integer. * Get the local router identification. * \te * * \i 'IPL2TP_TATTR_GET_REMOTE_ROUTER_ID' * \ts * Type: integer. * Get the remote router identification. * \te * * \i 'IPL2TP_TATTR_GET_LOCAL_PREFERRED_LANGUAGE' * \ts * Type: string. * Get the local preferred language. * \te * * \i 'IPL2TP_TATTR_GET_REMOTE_PREFERRED_LANGUAGE' * \ts * Type: string. * Get the remote preferred language. * \te * * \i 'IPL2TP_TATTR_GET_LOCAL_PSEUDOWIRE_CAPABILITIES_LIST' * \ts * Type: vector * Vector of 16-bit values containing the local pseudowire capabilities * \te * * \i 'IPL2TP_TATTR_GET_REMOTE_PSEUDOWIRE_CAPABILITIES_LIST' * \ts * Type: vector * Vector of 16-bit values containing the remote pseudowire capabilities. * \te * * \i 'IPL2TP_TATTR_GET_TRANSPORT' * \ts * Type: integer * The transport to be used, either 'IPL2TP_ATTR_TRANSPORT_UDP' or 'IPL2TP_ATTR_TRANSPORT_IP'. * \te * * \i 'IPL2TP_TATTR_GET_HMAC' * \ts * Type: integer * The HMAC algorithm to be used when using the digest authentication mechanism, ether: 'IPL2TP_MIB_AUTH_MD5' or 'IPL2TP_MIB_AUTH_SHA'. * \te * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_BADID' if the tunnel ID is invalid. * \i 'IPL2TP_STATUS_BADPARAM' if a bad attribute object(s) is present. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_attrobj attrobj = IP_NULL; * Ipl2tp_attrobj replies = IP_NULL; * Ipl2tp_attr a; * * /@ Create attribute object @/ * ipl2tp_attr_add_query(&attrobj, IPL2TP_TATTR_RO_l2tpTunnelStatsCurrentRemoteRWS); * * /@ Get parameter @/ * ipl2tp_api_tunnel_attribute_get(tkey, attrobj, &replies); * a = ipl2tp_attr_first(replies); * printf("Window size is %d\n", ipl2tp_attr_idata(a)); * * /@ Free attribute object @/ * ipl2tp_attr_delete(&attrobj); * ipl2tp_attr_delete(&replies); * } * \ce * * * SEE ALSO * * ipl2tp_attr_new(), ipl2tp_attr_delete(), ipl2tp_attr_iappend(), * ipl2tp_attr_pappend(), ipl2tp_attr_first(), ipl2tp_attr_next(), ipl2tp_attr_tag(), * ipl2tp_attr_idata(), ipl2tp_attr_pdata() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_attribute_get(Ipl2tp_key *key, Ipl2tp_attrobj attr, Ipl2tp_attrobj *replies); /* *=========================================================================== * ipl2tp_api_tunnel_attribute_query *=========================================================================== * Description: Get a singular tunnel parameter * Parameters: key - The tunnel key. * query - The query * replies - Where the replies are to be stored. * Returns: * * \NOMANUAL */ IP_EXTERN void ipl2tp_api_tunnel_attribute_query(Ipl2tp_key *key, int query, Ipl2tp_attrobj *replies); /******************************************************************************* * * ipl2tp_api_tunnel_open - Open a tunnel to a peer L2TP device. * * Open a tunnel to a peer L2TP device. The ID of the new tunnel is stored in a * location pointed to by the 'tidp' argument. 'tidp' is considered to be an array of keys, * which is required to be at least one entry long if 'hs' is IP_FALSE and two entries if 'hs' is * IP_TRUE. 'hs' specifies whether or not we try to use version negotiation. That * is, an attempt is made to open an L2TPv3 tunnel, but the format of the request is * such that an L2TPv2 reply is accepted. This requires that you set the * 'tattr' attributes so that it can deal with both L2TPv2 and L2TPv3 tunnels. * ipl2tp_api_tunnel_negotiation() can be used afterwards to retrieve the correct * instance and version of the tunnel. * * The establish parameter controls whether the tunnel should be established immediately * or be created in an idle state. An idle tunnel may have its attributes changed by * means of the ipl2tp_api_tunnel_attribute_set() call, and eventually be established * by using the 'IPL2TP_ATTR_SET_ifAdminStatus' attribute. * * Since this operation may take a while to complete, only the basic operations are * performed during the actual function call. The continued progress is monitored * with the callback routine entered in the 'IPL2TP_TATTR_STATUS_CALLBACK' * attribute. The callback is called when there is a change of status in the tunnel. * * Note that tunnel creation is inhibited if there already exists a tunnel to the peer * L2TP device, and the 'IPL2TP_ATTR_SET_OPEN_EXCLUSIVE' attribute is zero. * In this case, IPL2TP_STATUS_EXISTS is returned, and the ID of the existing * tunnel is stored in the location pointed to by the 'tidp[0]' argument. * * The version of the tunnel is specified by the 'tidp[0]->version' field. * * Refer to the function ipl2tp_api_tunnel_attribute_set() for a description of * available attributes. * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_tunnel_open(Ipl2tp_key *tidp, union Ip_sockaddr_union *addr, Ipl2tp_attrobj tattr, int establish, Ip_bool hs); * \ce * * PARAMETERS * \is * \i 'tidp' Tunnel ID key array. * \i 'addr' IP address to peer. * \i 'tattr' Tunnel attributes. * \i 'establish' Establish tunnel immediately if non-zero. * \i 'hs' Version negotiation. * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_DRAIN' if tunnel creation is disabled. * \i 'IPL2TP_STATUS_NOMEM' if out of memory. * \i 'IPL2TP_STATUS_BADPARAM' if a bad attribute object(s) is present. * \i 'IPL2TP_STATUS_EXISTS' if there already exists a tunnel to the peer. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_attrobj tattr = IP_NULL; * Ipl2tp_key tkey; * struct Ip_sockaddr_in saddr; * * /@ Setup AF_INET peer @/ * saddr.sin_family = IP_AF_INET; * saddr.sin_len = sizeof(saddr); * saddr.sin_addr.s_addr = inet_addr("192.168.0.2"); * * /@ Set tunnel attributes @/ * ipl2tp_attr_iappend(&tattr, IPL2TP_TATTR_RW_FRAMING_CAPABILITIES, IPL2TP_MIB_FRAMING_SYNC); * ipl2tp_attr_iappend(&tattr, IPL2TP_TATTR_RW_BEARER_CAPABILITIES, IPL2TP_MIB_BEARER_DIGITAL); * * /@ Open tunnel @/ * tkey.version = IPL2TP_VERSION_L2TPV2; * if (ipl2tp_api_tunnel_open(&tkey, &addr, tattr, 1, IP_FALSE) != IPL2TP_STATUS_OK) * { * printf("Failed at ipl2tp_api_tunnel_open()\n"); * } * * /@ Delete attribute object @/ * ipl2tp_attr_delete(&tattr); * } * \ce * * * SEE ALSO * * ipl2tp_api_tunnel_close() * * ERRNO * None */ IP_PUBLIC Ipl2tp_status ipl2tp_api_tunnel_open(Ipl2tp_key *tidp, union Ip_sockaddr_union *addr, Ipl2tp_attrobj tattr, int establish, Ip_bool hs); /******************************************************************************* * * ipl2tp_api_tunnel_close - Close a tunnel to a peer L2TP device. * * Close a tunnel to a peer L2TP device, and all the sessions that reside in it. * * Since this operation may take a while to complete, only the basic operations are * performed during the actual function call. The status callback routine, registered as * an attribute to ipl2tp_tunnel_open() is called when the close operation is * complete. * * The tunnel key is obtained when calling ipl2tp_api_tunnel_open(). * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_tunnel_close(Ipl2tp_key *key); * \ce * * PARAMETERS * \is * \i 'tkey' Tunnel ID. * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_BADID' if the tunnel ID is invalid. * \ie * * EXAMPLE * \cs * void example(void) * { * if (ipl2tp_api_tunnel_close(tkey) != IPL2TP_STATUS_OK) * { * printf("Error closing tunnel %d\n", tkey->ident); * } * } * \ce * * SEE ALSO * * ipl2tp_api_tunnel_open() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_close(Ipl2tp_key *key); /* *=========================================================================== * ipl2tp_api_ifindex_next *=========================================================================== * Description: Retrieves the next interface * Parameters: last - Last ifindex, or 0 if first. * next - [OUT] next ifindex. * Returns: IPL2TP_STATUS_OK if next has been properly filled in. * * \NOMANUAL */ IP_EXTERN Ipl2tp_status ipl2tp_api_ifindex_next(Ip_u32 last, Ip_u32 *next); /* *=========================================================================== * ipl2tp_api_tunnel_next *=========================================================================== * Description: Retrieves the tunnel identifier * Parameters: last - Last tunnel we retrieved, or IP_NULL if first * next - [OUT] next tunnel key. * Returns: IPL2TP_STATUS_OK if next has been properly filled in. * * \NOMANUAL */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_next(Ipl2tp_key *last, Ipl2tp_key *next); /******************************************************************************* * * ipl2tp_api_tunnel_negotiation - Retrieve the tunnel identifier. * * Retrieves the tunnel identifier. Call this function to determine which one of * the 'tidp' elements was used for the version handshaked tunnel. * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_tunnel_negotiation(Ipl2tp_key *tidp, Ipl2tp_key **key); * \ce * * PARAMETERS * \is * \i 'tidp' Tunnel ID array. * \i 'key' Placeholder where the real tunnel key is stored. * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success and key contains the key. * \i 'IPL2TP_STATUS_ERROR' if the tunnel failed. * \i 'IPL2TP_STATUS_NEGOTIATION' if the tunnel is still negotiating. * \ie * * EXAMPLE * \cs * void example(void) * { * Ipl2tp_key *key; * * if (ipl2tp_api_tunnel_negotiation(tidp, &key) == IPL2TP_STATUS_OK) * { * printf("Tunnel is v%d %d\n", key->version, key> ident); * } * } * \ce * * * SEE ALSO * * ipl2tp_api_tunnel_open() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_negotiation(Ipl2tp_key *tidp, Ipl2tp_key **key); /******************************************************************************* * * ipl2tp_api_tunnel_authentication_established - Verify the authentication method. * * Inform IPL2TP that the authentication method is installed so the establishment * of an outgoing tunnel can continue. This method must be invoked once the * IPL2TP_OUTGOING_AUTHENTICATION tunnel status code is being invoked, * for the tunnel to continue to connect. * * * SYNOPSIS * \cs * Ipl2tp_status ipl2tp_api_authentication_established(Ipl2tp_key *key); * \ce * * PARAMETERS * \is * \i 'key' Tunnel ID. * \ie * * RETURNS * \is * \i 'IPL2TP_STATUS_OK' if success. * \i 'IPL2TP_STATUS_ERROR' if error. * \ie * * * SEE ALSO * * ipl2tp_api_close(), ipl2tp_api_attribute_set(), ipl2tp_api_attribute_get(), * ipl2tp_api_session_attribute_get(), ipl2tp_api_session_attribute_set() * * ERRNO * None */ IP_EXTERN Ipl2tp_status ipl2tp_api_tunnel_authentication_established(Ipl2tp_key *key); #ifdef __cplusplus } #endif #endif /* **************************************************************************** * END OF FILE **************************************************************************** */