Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
COAP_RECOVERY(3)		 libcoap Manual 		COAP_RECOVERY(3)

NAME
     coap_recovery,	    coap_session_set_ack_random_factor,        coap_ses-
     sion_get_ack_random_factor,     coap_session_set_ack_timeout,     coap_ses-
     sion_get_ack_timeout,	coap_session_set_default_leisure,      coap_ses-
     sion_get_default_leisure,	   coap_session_set_max_payloads,      coap_ses-
     sion_get_max_payloads,	 coap_session_set_max_retransmit,      coap_ses-
     sion_get_max_retransmit,	coap_session_set_non_max_retransmit,   coap_ses-
     sion_get_non_max_retransmit,	   coap_session_set_non_receive_timeout,
     coap_session_get_non_receive_timeout,	   coap_session_set_non_timeout,
     coap_session_get_non_timeout,	 coap_session_set_nstart,      coap_ses-
     sion_get_nstart,	coap_session_set_probing_rate,	  coap_session_get_prob-
     ing_rate, coap_debug_set_packet_loss - Work with CoAP packet transmissions

SYNOPSIS
     #include <coap3/coap.h>

     void	coap_session_set_ack_random_factor(coap_session_t      *session,
     coap_fixed_point_t value);

     coap_fixed_point_t coap_session_get_ack_random_factor( const coap_session_t
     *session);

     void	  coap_session_set_ack_timeout(coap_session_t	       *session,
     coap_fixed_point_t value);

     coap_fixed_point_t coap_session_get_ack_timeout( const coap_session_t *ses-
     sion);

     void	 coap_session_set_default_leisure(coap_session_t       *session,
     coap_fixed_point_t value);

     coap_fixed_point_t coap_session_get_default_leisure(  const  coap_session_t
     *session);

     void    coap_session_set_max_payloads(coap_session_t   *session,	uint16_t
     value);

     uint16_t coap_session_get_max_payloads(const coap_session_t *session);

     void  coap_session_set_max_retransmit(coap_session_t   *session,	uint16_t
     value);

     uint16_t coap_session_get_max_retransmit(const coap_session_t *session);

     void  coap_session_set_non_max_retransmit(coap_session_t *session, uint16_t
     value);

     uint16_t  coap_session_get_non_max_retransmit(const  coap_session_t   *ses-
     sion);

     void      coap_session_set_non_receive_timeout(coap_session_t     *session,
     coap_fixed_point_t value);

     coap_fixed_point_t  coap_session_get_non_receive_timeout(	const  coap_ses-
     sion_t *session);

     void	   coap_session_set_non_timeout(coap_session_t	       *session,
     coap_fixed_point_t value);

     coap_fixed_point_t coap_session_get_non_timeout( const coap_session_t *ses-
     sion);

     void coap_session_set_nstart(coap_session_t *session, uint16_t value);

     uint16_t coap_session_get_nstart(const coap_session_t *session);

     void   coap_session_set_probing_rate(coap_session_t   *session,	uint32_t
     value);

     uint32_t coap_session_get_probing_rate(const coap_session_t *session);

     int coap_debug_set_packet_loss(const char *loss_level);

     For   specific   (D)TLS   library	 support,   link   with  -lcoap-3-notls,
     -lcoap-3-gnutls, -lcoap-3-openssl,  -lcoap-3-mbedtls,  -lcoap-3-wolfssl  or
     -lcoap-3-tinydtls.  Otherwise, link with -lcoap-3 to get the default (D)TLS
     library support.

DESCRIPTION
     There is CoAP Confirmable	message  transmission  recovery  as  defined  in
     RFC7252,  as  well CoAP Non-Confirmable split into blocks message transmis-
     sion recovery support as defined in RFC9177.

     For CoAP Confirmable messages, it is possible to define the  retry  counts,
     repeat  rate  etc.  for error recovery. Further information can be found in
     "RFC7272 4.2. Messages Transmitted Reliably", with the default  values  de-
     fined in "RFC7272 4.8. Transmission Parameters".

     It  is  not recommended that the suggested default setting are changed, but
     there may be some special requirements that need different values	and  the
     consequences of changing these values is fully understood.

     Some  of  the  parameters or return values are in fixed point format as de-
     fined by the coap_fixed_point_t structure as below

	 typedef struct coap_fixed_point_t {
	   uint16_t integer_part;    /* Integer part of fixed point variable */
	   uint16_t fractional_part; /* Fractional part of fixed point variable
					1/1000 (3 points) precision */
	 } coap_fixed_point_t;

     The CoAP Confirmable message retry rules are (with the  default  values  to
     compute the time)

	 1st retransmit after 1 * ack_timeout * ack_random factor (3 seconds)
	 2nd retransmit after 2 * ack_timeout * ack_random factor (6 seconds)
	 3rd retransmit after 3 * ack_timeout * ack_random factor (12 seconds)
	 4th retransmit after 4 * ack_timeout * ack_random factor (24 seconds)
	 5th retransmit after 5 * ack_timeout * ack_random factor (48 seconds)

	 As max_retransmit (by default) is 4, then the 5th retransmit does not get sent,
	 but at that point COAP_NACK_TOO_MANY_RETRIES gets raised in the nack_handler
	 (if defined). Note that the sum of the seconds is 93 matching
	 "https://rfc-editor.org/rfc/rfc7252#section-4.8.2[RFC7252 4.8.2.
	 MAX_TRANSMIT_WAIT]".

     It should be noted that these retries are separate from the DTLS or TLS en-
     crypted  session  setup  retry  timeouts.	For DTLS, the initial requesting
     packet will get sent max_retransmit times before reporting failure. For TLS
     the initial TCP connection will timeout before reporting failure.

     For CoAP Non-Confirmable messages with RFC9177 enabled at both  ends  of  a
     session,  it is possible to define the retry counts etc. for data recovery.
     Further information can be found in "RFC9177 7.2. Non-confirmable (NON)".

     It is also possible to set up packet  losses,  for  both  confirmable,  and
     non-confirmable messages. This can be used for stress testing packet trans-
     mission recovery as well as application handling of lossy networks.

FUNCTIONS
     The  following functions reflect the RFC7252 and RFC9177 uppercase names in
     lowercase following the  coap_session_set_  or  coap_session_get_	function
     prefix.

     Function: coap_session_set_ack_random_factor()

     The  coap_session_set_ack_random_factor()	function updates the session ack
     random wait factor, used to randomize re-transmissions, with the new value.
     The default value is 1.5 (RFC7252).

     Function: coap_session_get_ack_random_factor()

     The coap_session_get_ack_random_factor() function returns the current  ses-
     sion ack random wait factor (RFC7252).

     Function: coap_session_set_ack_timeout()

     The coap_session_set_ack_timeout() function updates the session initial ack
     or response timeout with the new value. The default value is 2.0 (RFC7252).

     Function: coap_session_get_ack_timeout()

     The  coap_session_get_ack_timeout()  function  returns  the current session
     initial ack or response timeout (RFC7252).

     Function: coap_session_set_default_leisure()

     The coap_session_set_default_leisure() function updates the session default
     leisure time with the new value. The default value is 5.0 (RFC7252).

     Function: coap_session_get_default_leisure()

     The coap_session_get_default_leisure() function returns the current session
     default leisure time (RFC7252).

     Function: coap_session_set_max_payloads()

     The coap_session_set_max_payloads() function updates  the	session  maximum
     payloads count with the new value. The default value is 10 (RFC9177).

     NOTE: Both ends of the session must have the same maximum payloads value to
     minimize any recovery times.

     Function: coap_session_get_max_payloads()

     The  coap_session_get_max_payloads()  function  returns the current session
     maximum payloads count (RFC9177).

     Function: coap_session_set_max_retransmit()

     The coap_session_set_max_retransmit() function updates the session  maximum
     retransmit count with the new value. The default value is 4 (RFC7252).

     Function: coap_session_get_max_retransmit()

     The  coap_session_get_max_retransmit() function returns the current session
     maximum retransmit count (RFC7252).

     Function: coap_session_set_non_max_retransmit()

     The coap_session_set_non_max_retransmit() function updates the session max-
     imum non retransmit count with the  new  value.  The  default  value  is  4
     (RFC9177).

     Function: coap_session_get_non_max_retransmit()

     The coap_session_get_non_max_retransmit() function returns the current ses-
     sion maximum non retransmit count (RFC9177).

     Function: coap_session_set_non_receive_timeout()

     The coap_session_set_non_receive_timeout() function updates the session non
     receive timeout with the new value. The default value is 4.0 (RFC9177).

     Function: coap_session_get_non_receive_timeout()

     The  coap_session_get_non_receive_timeout()  function  returns  the current
     session non receive timeout (RFC9177).

     Function: coap_session_set_non_timeout()

     The coap_session_set_non_timeout() function updates the session non timeout
     with the new value. The default value is 2.0 (RFC9177).

     Function: coap_session_get_non_timeout()

     The coap_session_get_non_timeout() function returns the current session non
     timeout (RFC9177).

     Function: coap_session_set_nstart()

     The coap_session_set_nstart() function updates the session nstart with  the
     new value. The default value is 1 (RFC7252).

     Function: coap_session_set_probing_rate()

     The  coap_session_get_nstart()  function returns the current session nstart
     value (RFC7252).

     Function: coap_session_set_probing_rate()

     The coap_session_set_probing_rate() function updates  the	session  probing
     rate with the new value. The default value is 1 byte per second (RFC7252).

     Function: coap_session_get_probing_rate()

     The  coap_session_get_probing_rate()  function  returns the current session
     probing rate value (RFC7252).

     Function: coap_debug_set_packet_loss()

     The coap_debug_set_packet_loss() function is uses to set  the  packet  loss
     levels as defined in loss_level. loss_level can be set as a percentage from
     "0%" to "100%". Alternatively, it is possible to specify which packets of a
     packet  sequence  are dropped. A definition of "1,5-9,11-20,101" means that
     packets 1, 5 through 9, 11 through 20 and 101 will get dropped.  A  maximum
     of  10  different	packet sets is supported. The packet count is reset to 0
     when coap_debug_set_packet_loss() is called. To remove any  packet  losses,
     set the loss_level to "0%".

RETURN VALUES
     coap_session_get_ack_random_factor(),	 coap_session_get_ack_timeout(),
     coap_session_get_default_leisure(),	coap_session_get_max_payloads(),
     coap_session_get_max_retransmit(),   coap_session_get_non_max_retransmit(),
     coap_session_get_non_receive_timeout(),	 coap_session_get_non_timeout(),
     coap_session_get_nstart()	and coap_session_get_probing_rate() return their
     respective current values.

     coap_debug_set_packet_loss() returns 0 if loss_level does	not  parse  cor-
     rectly, otherwise 1 if successful.

TESTING
     The  libcoap  RFC7252  recovery/re-transmit  logic  will only work for con-
     firmable requests or if RFC9177  support  is  enabled  for  non-confirmable
     large body transmissions that need to span multiple packets.

     To  see what is happening (other than by sniffing the network traffic), the
     logging level needs to be set to COAP_LOG_DEBUG  in  the  client  by  using
     coap_set_log_level(COAP_LOG_DEBUG) and coap_dtls_set_log_level(COAP_LOG_DE-
     BUG).

     The  server can either be stopped, or if packet loss levels are set to 100%
     by using coap_debug_set_packet_loss("100%") when receiving the  client  re-
     quests.

     NOTE:  If	the  server  end of the connection is returning ICMP unreachable
     packets after being turned off, you will get a debug message  of  the  form
     "coap_network_read:  unreachable",  so libcoap will stop doing the retries.
     If this is the case, then you need to make use of (on the server)	coap_de-
     bug_set_packet_loss("100%")  or  put  in  some packet filtering to drop the
     packets.

     For confirmable transmissions, the client should then restart  transmitting
     the requests based on the ack_timeout, ack_random_factor and max_retransmit
     values.	The    client's    nack_handler    will    get	  called    with
     COAP_NACK_TOO_MANY_RETRIES when the confirmable request cannot be	success-
     fully transmitted.

     For  non-confirmable  block  transmissions  (RFC9177  enabled),  the client
     should then restart transmitting the missing requests based on the max_pay-
     loads, non_timeout, non_receive_timeout, and non_max_retransmit values. The
     client's nack_handler will get called with COAP_NACK_TOO_MANY_RETRIES  when
     the non-confirmable large body request cannot be successfully transmitted.

FURTHER INFORMATION
     See

     "RFC7252: The Constrained Application Protocol (CoAP)"

     "RFC9177:	Constrained  Application Protocol (CoAP) Block-Wise Transfer Op-
     tions Supporting Robust Transmission"

     for further information.

BUGS
     Please raise an issue on GitHub  at  https://github.com/obgm/libcoap/issues
     to report any bugs.

     Please  raise  a  Pull Request at https://github.com/obgm/libcoap/pulls for
     any fixes.

AUTHORS
     The libcoap project <libcoap-developers@lists.sourceforge.net>

coap_recovery 4.3.5		   08/02/2026			COAP_RECOVERY(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=coap_session_get_non_timeout&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help