original files of m241

This commit is contained in:
neelimap
2026-07-30 11:19:44 +05:30
parent 170c2b3f3a
commit afc7070c1f
12254 changed files with 7655111 additions and 0 deletions
@@ -0,0 +1,174 @@
/*
******************************************************************************
* INTERPEAK API HEADER FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipnet_timeout.h,v $ $Revision: 1.24.10.1 $
* $Source: /home/interpeak/CVSRoot/ipnet2/src/ipnet_timeout.h,v $
* $Author: kenneth $ $Date: 2012-03-07 10:23:49 $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
******************************************************************************
*/
#ifndef IPNET_TIMEOUT_H
#define IPNET_TIMEOUT_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
* IPNET timeout machinery.
* Timeouts can not be scheduled from interrupt context.
* Timeout handlers is always run with the IPNET code lock taken.
*
* IPNET soft interrupt machinery.
* Soft timeouts should be scheduled by code running in interrupt context
* and have code that what to update the internal state of IPNET.
* Soft interrupt handlers is always run with the IPNET code lock taken.
* The only IPNET functions that can safly be called from interrupt context are:
* - ipnet_schedule_soft_interrupt()
* - ipcom_pkt_malloc()
* - ipcom_pkt_free()
*
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ipnet_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include <ipcom_type.h>
#include <ipcom_cstyle.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
/* Evalutates to the current system absolute time in seconds */
#define IPNET_SECONDS_ABS ipnet_sec_now()
/*
* set/get the timeout structure (if any) used for this fragment
*/
#define IPNET_PKT_GET_TMO_PTR(pkt) ((Ipnet_timeout **) &(pkt)->link_cookie)
#define IPNET_PKT_GET_TMO(pkt) ((Ipnet_timeout *) (pkt)->link_cookie)
#define IPNET_PKT_SET_TMO(pkt, timeo) ((pkt)->link_cookie = (Ip_ptrdiff_t) (timeo))
/*
* set/get the absolute time (in seconds) when this fragment times out.
*/
#define IPNET_PKT_GET_TIMEOUT(pkt) (IPNET_PKT_GET_TIMEOUT_ABS(pkt) - IPNET_SECONDS_ABS)
#define IPNET_PKT_GET_TIMEOUT_ABS(pkt) \
ipcom_pkt_get_int(pkt, IPNET_PKT_INFO_TIMEOUT, Ip_u32)
#define IPNET_PKT_SET_TIMEOUT_ABS(pkt, timeo) \
ipcom_pkt_set_int(pkt, IPNET_PKT_INFO_TIMEOUT, timeo, Ip_u32)
/*
* Evaluates to a pointer where the soft interrupt structure can be stored
* inside the packet
*/
#define IPNET_PKT_TO_SOFTIRQ_STRUCT(pkt) ((Ipnet_softirq *) ((pkt)->data))
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/* Signature of timeout handler */
typedef void (*Ipnet_timeout_handler)(void *cookie);
typedef struct Ipnet_timeout_struct
{
int pq_index; /* The index this timout has in the priority queue */
Ip_s64 msec; /* The absolute time when this timeout is triggered */
Ipnet_timeout_handler handler; /* The function that will be called when
the current time is equal to 'timeout_msec',
this member can be IP_NULL if no action should be taken */
void *cookie; /* The (user specified) argument to the handler */
struct Ipnet_timeout_struct **ptmo; /* Pointer to the location the caller has stored the
Ipnet_timeout handler, that location will be set to
IP_NULL when the timer expires or is cancled. */
}
Ipnet_timeout;
/* Signature of soft IRQ handler */
typedef void (*Ipnet_softirq_handler)(void *cookie);
typedef struct Ipnet_softirq_struct
{
struct Ipnet_softirq_struct *next; /* Points to the next soft interrupt */
volatile Ip_bool pending; /* IP_TRUE if this is currently in the list
of pending soft interrupts */
Ipnet_softirq_handler handler; /* The function that will handle this soft interrupt */
void *cookie; /* The argument to the handler */
}
Ipnet_softirq;
/*
****************************************************************************
* 6 FUNCTIONS
****************************************************************************
*/
IP_GLOBAL void ipnet_softirq_init(Ipnet_softirq *soft_irq);
IP_GLOBAL void ipnet_softirq_schedule(Ipnet_softirq *soft_irq,
Ipnet_softirq_handler handler,
void *cookie);
IP_GLOBAL void ipnet_timeout_cancel(Ipnet_timeout *tmo);
IP_GLOBAL int ipnet_timeout_schedule(Ip_s64 msec_to_timeout,
Ipnet_timeout_handler handler,
void *cookie,
Ipnet_timeout **ptmo);
IP_GLOBAL Ip_s64 ipnet_timeout_msec_until(Ipnet_timeout *tmo);
#ifdef IPNET_DEBUG
typedef int (*Ipnet_timeout_to_string_f)(void *tmo_elem, char *buf, Ip_size_t buf_len);
typedef struct Ipnet_cmd_tmo_handler_to_str_struct
{
Ipnet_timeout_handler key;
Ipnet_timeout_to_string_f to_str_func;
}
Ipnet_cmd_tmo_handler_to_str;
IP_GLOBAL void ipnet_timeout_to_string(Ipnet_timeout_handler handler,
Ipnet_timeout_to_string_f to_str);
#endif
#ifdef __cplusplus
}
#endif
#endif
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/