original files of m241
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
* HEADER FILE
|
||||
*
|
||||
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipmpls_netlink.h,v $ $Revision: 1.2 $
|
||||
* $Source:
|
||||
* $Author: jonas $ $Date: 2006-06-01 11:58:53 $
|
||||
* $State: Exp $ $Locker: $
|
||||
*
|
||||
* INTERPEAK_COPYRIGHT_STRING
|
||||
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef IPMPLS_NETLINK_H
|
||||
#define IPMPLS_NETLINK_H
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 1 DESCRIPTION
|
||||
****************************************************************************
|
||||
* This is the IPMPLS header file for the Linux compatible NETLINK interface
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 2 CONFIGURATION
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 3 INCLUDE FILES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
#include "ipmpls.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 4 DEFINES
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* IPMPLS_NETLINK_XXX
|
||||
*===========================================================================
|
||||
*/
|
||||
|
||||
#define IPMPLS_NETLINK_ROUTE 0 /* Routing/device hook */
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* IPMPLS_RTN_XXX
|
||||
*===========================================================================
|
||||
* IPMPLS message sub types for NETLINK RULE messages
|
||||
*/
|
||||
#define IPMPLS_RTN_ILM 1
|
||||
#define IPMPLS_RTN_NHLFE 2
|
||||
#define IPMPLS_RTN_XC 3
|
||||
#define IPMPLS_RTN_LABELSPACE 4
|
||||
#define IPMPLS_RTN_ILMFLUSH 5
|
||||
#define IPMPLS_RTN_NHLFEFLUSH 6
|
||||
#define IPMPLS_RTN_TUNNEL 7
|
||||
|
||||
#define IPMPLS_RTN_MAX 8
|
||||
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* IPMPLS_RTA_XXX
|
||||
*===========================================================================
|
||||
* IPMPLS route message attribute values
|
||||
*/
|
||||
#define IPMPLS_RTA_ILM 1
|
||||
#define IPMPLS_RTA_NHLFE 2
|
||||
#define IPMPLS_RTA_XC 3
|
||||
#define IPMPLS_RTA_LABELSPACE 4
|
||||
#define IPMPLS_RTA_INSTR 5
|
||||
#define IPMPLS_RTA_TUNNEL_NAME 7
|
||||
#define IPMPLS_RTA_TUNNEL_DATA 8
|
||||
#define IPMPLS_RTA_VR 9
|
||||
#define IPMPLS_RTA_COOKIE 10
|
||||
|
||||
#define IPMPLS_RTA_MAX IPMPLS_RTA_COOKIE
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* 5 TYPES
|
||||
****************************************************************************
|
||||
*/
|
||||
/*
|
||||
*===========================================================================
|
||||
* ipmpls_nlmsghdr
|
||||
*===========================================================================
|
||||
*/
|
||||
struct Ipmpls_nlmsghdr
|
||||
{
|
||||
Ip_u32 nlmsg_len; /* Length of message including header */
|
||||
Ip_u16 nlmsg_type; /* Message content */
|
||||
Ip_u16 nlmsg_flags; /* Additional flags */
|
||||
Ip_u32 nlmsg_seq; /* Sequence number */
|
||||
Ip_pid_t nlmsg_pid; /* Sending process id */
|
||||
};
|
||||
|
||||
/* Flags values */
|
||||
#define IPMPLS_NLM_F_REQUEST 1 /* It is request message */
|
||||
#define IPMPLS_NLM_F_MULTI 2 /* Multipart message, terminated by NLMSG_DONE */
|
||||
#define IPMPLS_NLM_F_ACK 4 /* Reply with ack, with zero or error code */
|
||||
#define IPMPLS_NLM_F_ECHO 8 /* Echo this request */
|
||||
#define IPMPLS_NLM_F_ROOT 0x100 /* Specify tree root */
|
||||
|
||||
/* Modifiers to GET request */
|
||||
#define IPMPLS_NLM_F_ROOT 0x100 /* Specify tree root */
|
||||
#define IPMPLS_NLM_F_MATCH 0x200 /* Return all matching */
|
||||
#define IPMPLS_NLM_F_ATOMIC 0x400 /* Atomic GET */
|
||||
#define IPMPLS_NLM_F_DUMP (IPMPLS_NLM_F_ROOT | IPMPLS_NLM_F_MATCH)
|
||||
|
||||
/* Modifiers to NEW request */
|
||||
#define IPMPLS_NLM_F_REPLACE 0x100 /* Override existing */
|
||||
#define IPMPLS_NLM_F_EXCL 0x200 /* Do not touch, if it exists */
|
||||
#define IPMPLS_NLM_F_CREATE 0x400 /* Create, if it does not exist */
|
||||
#define IPMPLS_NLM_F_APPEND 0x800 /* Add to end of list */
|
||||
|
||||
#define IPMPLS_NLMSG_ALIGNTO 4
|
||||
#define IPMPLS_NLMSG_ALIGN(len) (((len)+IPMPLS_NLMSG_ALIGNTO-1) & ~(IPMPLS_NLMSG_ALIGNTO-1))
|
||||
#define IPMPLS_NLMSG_LENGTH(len) ((len)+IPMPLS_NLMSG_ALIGN(sizeof(struct Ipmpls_nlmsghdr)))
|
||||
#define IPMPLS_NLMSG_SPACE(len) IPMPLS_NLMSG_ALIGN(IPMPLS_NLMSG_LENGTH(len))
|
||||
#define IPMPLS_NLMSG_DATA(nlh) ((void*)(((char*)nlh) + IPMPLS_NLMSG_LENGTH(0)))
|
||||
#define IPMPLS_NLMSG_NEXT(nlh,len) ((len) -= IPMPLS_NLMSG_ALIGN((nlh)->nlmsg_len), \
|
||||
(struct Ipmpls_nlmsghdr*)(((char*)(nlh)) + IPMPLS_NLMSG_ALIGN((nlh)->nlmsg_len)))
|
||||
#define IPMPLS_NLMSG_OK(nlh,len) ((len) > 0 \
|
||||
&& (nlh)->nlmsg_len >= sizeof(struct Ipmpls_nlmsghdr) \
|
||||
&& (nlh)->nlmsg_len <= (len))
|
||||
#define IPMPLS_NLMSG_PAYLOAD(nlh,len) ((nlh)->nlmsg_len - IPMPLS_NLMSG_SPACE((len)))
|
||||
|
||||
#define IPMPLS_NLMSG_NOOP 0x1 /* Nothing */
|
||||
#define IPMPLS_NLMSG_ERROR 0x2 /* Error */
|
||||
#define IPMPLS_NLMSG_DONE 0x3 /* End of a dump */
|
||||
#define IPMPLS_NLMSG_OVERRUN 0x4 /* Data lost */
|
||||
|
||||
#define IPMPLS_RTM_NEWRULE 32
|
||||
#define IPMPLS_RTM_DELRULE 33
|
||||
#define IPMPLS_RTM_GETRULE 34
|
||||
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* ipmpls_netlink_callback
|
||||
*===========================================================================
|
||||
*/
|
||||
struct Ipmpls_netlink_callback
|
||||
{
|
||||
Ip_u8 *buf;
|
||||
struct Ipmpls_nlmsghdr *nlh;
|
||||
int (*dump)(Ip_u8 *buf, Ip_size_t len, struct Ipmpls_netlink_callback *cb);
|
||||
int (*done)(struct Ipmpls_netlink_callback *cb);
|
||||
int family;
|
||||
Ip_ptrdiff_t args[4];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* ipmpls_rtattr
|
||||
*===========================================================================
|
||||
*/
|
||||
struct Ipmpls_rtattr
|
||||
{
|
||||
Ip_u16 rta_len;
|
||||
Ip_u16 rta_type;
|
||||
};
|
||||
|
||||
#define IPMPLS_RTA_ALIGNTO 4
|
||||
|
||||
#define IPMPLS_RTA_ALIGN(len) (((len)+IPMPLS_RTA_ALIGNTO-1) & ~(IPMPLS_RTA_ALIGNTO-1))
|
||||
#define IPMPLS_RTA_OK(rta,len) ((len) > 0 \
|
||||
&& (rta)->rta_len >= sizeof(struct Ipmpls_rtattr) \
|
||||
&& (rta)->rta_len <= (len))
|
||||
#define IPMPLS_RTA_NEXT(rta,attrlen) \
|
||||
((attrlen) -= IPMPLS_RTA_ALIGN((rta)->rta_len), \
|
||||
(struct Ipmpls_rtattr *)(((char *)(rta)) + IPMPLS_RTA_ALIGN((rta)->rta_len)))
|
||||
|
||||
#define IPMPLS_RTA_LENGTH(len) (IPMPLS_RTA_ALIGN(sizeof(struct Ipmpls_rtattr)) + (len))
|
||||
#define IPMPLS_RTA_SPACE(len) IPMPLS_RTA_ALIGN(IPMPLS_RTA_LENGTH(len))
|
||||
#define IPMPLS_RTA_DATA(rta) ((void*)(((char*)(rta)) + IPMPLS_RTA_LENGTH(0)))
|
||||
#define IPMPLS_RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - IPMPLS_RTA_LENGTH(0))
|
||||
|
||||
|
||||
/*
|
||||
*===========================================================================
|
||||
* ipmpls_rtmsg
|
||||
*===========================================================================
|
||||
*/
|
||||
struct Ipmpls_rtmsg
|
||||
{
|
||||
Ip_u8 rtm_family;
|
||||
Ip_u8 rtm_dst_len;
|
||||
Ip_u8 rtm_src_len;
|
||||
Ip_u8 rtm_tos;
|
||||
|
||||
Ip_u8 rtm_table;
|
||||
Ip_u8 rtm_protocol;
|
||||
Ip_u8 rtm_scope;
|
||||
Ip_u8 rtm_type;
|
||||
|
||||
Ip_u32 rtm_flags;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define IPMPLS_RTM_RTA(r) ((struct Ipmpls_rtattr *)(((char *)(r)) + IPMPLS_NLMSG_ALIGN(sizeof(struct Ipmpls_rtmsg))))
|
||||
#define IPMPLS_RTM_PAYLOAD(n) IPMPLS_NLMSG_PAYLOAD(n,sizeof(struct Ipmpls_rtmsg))
|
||||
|
||||
|
||||
IP_PUBLIC void ipcom_netlink_post(int unit, void *data, Ip_size_t len, int msg_group, Ip_u16 vr);
|
||||
|
||||
IP_PUBLIC int ipmpls_netlink_rtm_new(Ip_u8 *data, Ip_size_t len, struct Ipmpls_nlmsghdr *nlh, void *arg, int vr);
|
||||
IP_PUBLIC int ipmpls_netlink_rtm_del(Ip_u8 *data, Ip_size_t len, struct Ipmpls_nlmsghdr *nlh, void *arg, int vr);
|
||||
IP_PUBLIC int ipmpls_netlink_rtm_get(Ip_u8 *data, Ip_size_t len, struct Ipmpls_nlmsghdr *nlh,
|
||||
void *arg, void **out_msg, int s_vr);
|
||||
IP_PUBLIC int ipmpls_netlink_rtm_dump(Ip_u8 *data, Ip_size_t len, struct Ipmpls_netlink_callback *cb, int vr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* IPMPL_NETLINK_H */
|
||||
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
* END OF FILE
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user