Files
2026-07-30 11:19:44 +05:30

349 lines
10 KiB
C

/*
******************************************************************************
* HEADER FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipnet_ctrl.h,v $ $Revision: 1.23 $
* $Source: /home/interpeak/CVSRoot/ipnet2/include/ipnet_ctrl.h,v $
* $Author: kenneth $ $Date: 2010-10-06 19:33:35 $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
******************************************************************************
*/
#ifndef IPNET_CTRL_H
#define IPNET_CTRL_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "ipnet_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include "ipnet.h"
#ifdef IPTCP
#include "iptcp.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
/*
*===========================================================================
* User library support
*===========================================================================
*/
#if !defined(IPCOM_KERNEL) && defined(IPCOM_USRLIB)
#define ipnet_ctrl ipnet_ctrl_usr
#endif
/*
*===========================================================================
* IPNET_CTRL_
*===========================================================================
*/
#define IPNET_CTRL_SOCK_BASE 0x0800
#define IPNET_CTRL_NC_ENTRY_BASE 0x1000
#define IPNET_CTRL_PREFIX_ENTRY_BASE 0x4000
#define IPNET_CTRL_ROUTER_ENTRY_BASE 0x8000
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/*
*===========================================================================
* ipnet tag
*===========================================================================
*/
struct Ipnet_tag
{
Ip_u16 type; /* Tag type (IPNET_CTRL_xxx value) */
Ip_u16 size; /* The size of the tag in octets */
};
/*
*===========================================================================
* sock tag
*===========================================================================
*/
struct Ipnet_tag_sock_data
{
struct Ipnet_tag hdr;
/* The filedescriptor for the socket */
int fd;
Ip_pid_t pid;
Ip_u16 vr_index;
int domain;
int type;
int protocol;
int snd_bytes;
int rcv_bytes;
#ifdef IPTCP
/* Only valid if protocol is IP_IPPROTO_TCP */
Iptcp_state_t tcp_state;
#endif
/* Source and destination addresses */
union
{
struct Ip_sockaddr addr;
struct Ip_sockaddr_in in_addr;
struct Ip_sockaddr_in6 in6_addr;
} saddr;
union
{
struct Ip_sockaddr addr;
struct Ip_sockaddr_in in_addr;
struct Ip_sockaddr_in6 in6_addr;
} daddr;
#ifdef IPSCTP
void *priv_data;
#endif
};
/* Start a new enumeration of socket data */
#define IPNET_CTRL_NEW_ENUM_SOCK_DATA (IPNET_CTRL_SOCK_BASE | 1)
/* Continue enumeration of socket data */
#define IPNET_CTRL_CONT_ENUM_SOCK_DATA (IPNET_CTRL_SOCK_BASE | 2)
/*
*===========================================================================
* ip6 addr tag
*===========================================================================
*/
#ifdef IPCOM_USE_INET6
/*
*===========================================================================
* ip6 nc tag
*===========================================================================
*/
struct Ipnet_tag_nc_entry
{
struct Ipnet_tag hdr;
/*
* F1: Filled by caller
* F2: Filled by caller for ADD, by callee for GET and unused for
* DEL
*/
/* F1: Virtual router to use (0 = default) */
Ip_u16 vr_index;
/*
* F1: Interface index. Can be 0 in ADD to let the stack select
* the interface.
*/
Ip_u32 ifindex;
/* F1: A IPv6 address */
struct Ip_sockaddr_in6 addr;
/* F2: State */
Ipnet_nd_state_t state;
/* F2: Is this a router */
Ip_bool is_router;
/* F2: Will this node answers to solicitations to this entry */
Ip_bool is_publ;
/*
* F2: Number of seconds before the entry expires (or
* IPNET_INFINTE)
*/
Ip_u32 expires_sec;
/* F2: Link address */
struct Ip_sockaddr_dl link_addr;
};
/* Get information about a neighbor cache entry */
#define IPNET_CTRL_GET_NC_ENTRY (IPNET_CTRL_NC_ENTRY_BASE | 1)
/* Add neighbor cache entry */
#define IPNET_CTRL_ADD_NC_ENTRY (IPNET_CTRL_NC_ENTRY_BASE | 3)
/* Delete neighbor cache entry */
#define IPNET_CTRL_DEL_NC_ENTRY (IPNET_CTRL_NC_ENTRY_BASE | 4)
/*
*===========================================================================
* ip6 dc tag
*===========================================================================
*/
struct Ipnet_tag_dc_entry
{
struct Ipnet_tag hdr;
/* Filled by callee for ENUM */
/* Number of seconds before the entry expires (or IPNET_INFINTE) */
Ip_u32 expires_sec;
/* Path MTU to this destination */
Ip_u32 path_mtu;
/* The final destination address */
struct Ip_in6_addr dst_addr;
/* The first hop address (is always a neighbor) */
struct Ip_in6_addr next_hop_addr;
};
/*
*===========================================================================
* ip6 router tag
*===========================================================================
*/
struct Ipnet_tag_router_entry
{
struct Ipnet_tag hdr;
/* Filled by caller */
/* Virtual router to use (0 = default) */
Ip_u16 vr_index;
/* Filled by callee for GET and ignored for DEL and ENUM */
/* Interface index */
Ip_u32 ifindex;
/* Filled by callee for GET and ignored for DEL */
/* Number of seconds before the entry expires (or IPNET_INFINTE) */
Ip_u32 expires_sec;
/* Filled by caller for DEL and by callee for GET */
/* The router address (is a direct neighbor) */
struct Ip_in6_addr addr;
};
/* Start a new enumeration of default router entries */
#define IPNET_CTRL_NEW_ENUM_ROUTER_ENTRY (IPNET_CTRL_ROUTER_ENTRY_BASE | 1)
/* Continue enumeration of enumeration of default router entries */
#define IPNET_CTRL_CONT_ENUM_ROUTER_ENTRY (IPNET_CTRL_ROUTER_ENTRY_BASE | 2)
/* Delete router entry */
#define IPNET_CTRL_DEL_ROUTER_ENTRY (IPNET_CTRL_ROUTER_ENTRY_BASE | 3)
/*
*===========================================================================
* ip6 prefix tag
*===========================================================================
*/
/* IPNET_CTRL_[ENUM|ADD|DEL]_PREFIX */
struct Ipnet_tag_prefix_entry
{
struct Ipnet_tag hdr;
/* Filled by caller */
/* Virtual router to use (0 = default) */
Ip_u16 vr_index;
/* Filled by caller for SET, by callee for ENUM and ignored for DEL */
/* Interface name */
Ip_u32 ifindex;
/* Number of seconds before the entry expires (or IPNET_INFINTE) */
Ip_u32 expires_sec;
/* Filled by caller for SET and DEL and by callee for ENUM */
/* Valid bits in prefix */
int bits;
/* A IPv6 address */
struct Ip_sockaddr_in6 prefix;
};
/* Start a new enumeration of address prefixes entries */
#define IPNET_CTRL_NEW_ENUM_PREFIX_ENTRY (IPNET_CTRL_PREFIX_ENTRY_BASE | 1)
/* Continue enumeration of address prefixes entries */
#define IPNET_CTRL_CONT_ENUM_PREFIX_ENTRY (IPNET_CTRL_PREFIX_ENTRY_BASE | 2)
#endif /* IPCOM_USE_INET6 */
/*
****************************************************************************
* 6 PROTOTYPES
****************************************************************************
*/
/*
*===========================================================================
* ipnet_ctrl_islocked
*===========================================================================
* Description: SNMP helper function to access ndp tables.
* Code semaphore must be locked.
* Parameters: tag - The data to set or get.
* Returns: 0 = succcess, -1 = error
* (get error code from ipcom_errno)
*
*/
#if defined(IPCOM_USE_MIB2) && defined(IPCOM_USE_INET6)
IP_GLOBAL int ipnet_ctrl_islocked(struct Ipnet_tag *tag);
#endif
/*
*===========================================================================
* ipnet_ctrl
*===========================================================================
* Description: Returns, sets or deletes addresses, socket data, etc. in IPNET.
* Parameters: tag - Pointer to a tag, the memory area must be initialized
* to zero before excecuting a GET for the first time.
* The content returned must be passed if a list of values should
* be returned. tag->hdr.type must be on of the IPNET_CTRL_xxx
* values defined below.
* Returns: 0 >= success (IPNET_CTRL_SUCCESS or IPNET_CTRL_ENUM_DONE)
* -1 = error (get errorcode from IPNET_P_GET_ERRNO()).
*
*/
IP_PUBLIC int ipnet_ctrl(struct Ipnet_tag *tag);
/* ipnet_ctrl() return values */
#define IPNET_CTRL_SUCCESS 0 /* Success */
#define IPNET_CTRL_ENUM_DONE 1 /* Success, enumerated past last element */
#ifdef __cplusplus
}
#endif
#endif
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/