Files
vxWorks/h/tipc/tipc.h
2025-08-20 18:25:46 +08:00

685 lines
21 KiB
C

/* ------------------------------------------------------------------------
*
* tipc.h
*
* Short description: TIPC header file
*
* ------------------------------------------------------------------------
*
* Copyright (c) 2003, Ericsson Research Canada
* Copyright (c) 2004, 2005 Wind River Systems, Inc.
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* Neither the names of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* ------------------------------------------------------------------------
*
* Created 2003-10-20 by Jon Maloy
*
* ------------------------------------------------------------------------
*
* Revision history:
* ----------------
*
* PA1 2003-10-20 Jon Maloy Created.
*
* ------------------------------------------------------------------------
* modification history
* --------------------
* 01j,12may05,als update AF_TIPC to avoid conflict with AF_ATM
* 01i,08apr05,als consolidate copyright info; fix compiler inlining warnings
* 01h,08feb05,bwa added shared memory address type.
* 01g,15dec04,als add support for poll()-like events
* 01f,25oct04,als fix comment
* 01e,05oct04,als Fix misleading comment
* 01d,14sep04,als name table display enhancements
* 01c,03sep04,als incorporated code inspection feedback
* 01b,07aug04,p_r code update
* 01a,30jun04,als Ported to VxWorks
*
*/
#ifndef __NET_TIPC_H_
#define __NET_TIPC_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <vxWorks.h>
#include <sys/socket.h>
/* Scalar data types used by TIPC (WRS) */
typedef unsigned char __u8, unchar;
typedef char __s8;
typedef unsigned short __u16;
typedef short __s16;
typedef unsigned int __u32, uint;
typedef int __s32;
/*
* TIPC addressing primitives
*
* (Uses macros rather than inline functions to avoid compiler warnings)
*/
struct tipc_portid {
__u32 ref;
__u32 node;
};
struct tipc_name {
__u32 type;
__u32 instance;
};
struct tipc_name_seq {
__u32 type;
__u32 lower;
__u32 upper;
};
#define tipc_addr(Z,C,N) (((Z)<<24)|((C)<<12)|(N))
#define tipc_zone(A) ((A)>> 24)
#define tipc_cluster(A) (((A) >> 12) & 0xfff)
#define tipc_node(A) ((A) & 0xfff)
/*
* Binding scopes for port names and port name sequences:
*/
#define TIPC_ZONE_SCOPE 1
#define TIPC_CLUSTER_SCOPE 2
#define TIPC_NODE_SCOPE 3
/*
* Message importance levels:
*/
#define TIPC_LOW_IMPORTANCE 0 /* default importance level */
#define TIPC_NORMAL_IMPORTANCE 1 /* actually means "medium importance" */
#define TIPC_HIGH_IMPORTANCE 2
#define TIPC_NON_REJECTABLE 3
/*
* Topology event values:
*/
#define TIPC_PUBLISHED 1
#define TIPC_WITHDRAWN 2
#define TIPC_SUBSCR_TIMEOUT 3
/*
* Msg rejection/connection shutdown reasons:
*/
#define TIPC_CONN_SHUTDOWN 0x0010
#define TIPC_ERR_NO_NAME 0x1000
#define TIPC_ERR_NO_PORT 0x2000
#define TIPC_ERR_NO_NODE 0x4000
#define TIPC_ERR_OVERLOAD 0x8000
#define TIPC_MAX_MSG_SIZE 66000
#define TIPC_MAX_SECTION_COUNT 128
/*
* Socket interface:
* -----------------
*/
#ifndef AF_TIPC
#define AF_TIPC 33
#endif
#define TIPC_ADDR_NAMESEQ 1
#define TIPC_ADDR_MCAST 1
#define TIPC_ADDR_NAME 2
#define TIPC_ADDR_ID 3
struct sockaddr_tipc {
unsigned char addrlen; /* 16 (WRS only) */
unsigned char family; /* AF_TIPC */
unsigned char addrtype; /* TIPC_ADDR_xxx */
unsigned char scope; /* used with bind */
union {
struct tipc_portid id; /* if TIPC_ADDR_ID */
struct tipc_name_seq nameseq; /* if TIPC_ADDR_NAMESEQ/_MCAST */
struct { /* if TIPC_ADDR_NAME */
struct tipc_name name;
__u32 domain; /* used with connect, sendto */
} name;
} addr;
};
/*
* Poll events from TIPC sockets. May be combined with
* previously defined reject/shutdown reasons
*/
#define TIPC_MSG_PENDING 0x0041 /* POLLRDNORM|POLLIN */
#define TIPC_UNDELIVERED_MSG 0x0049 /* POLLRDNORM|POLLERR|POLLIN */
#define TIPC_CONN_ABORT 0x0018 /* POLLHUP|POLLERR */
#define TIPC_TOPOLOGY_EVENT 0x0800
/*
* Parameters for getsockopt() and setsockopt():
*/
#define SOL_TIPC 50
#define IMPORTANCE_OPTION 127 /* Default: LOW_IMPORTANCE */
#define UNRELIABLE_OPTION 128 /* Default: reliable,no args */
#define O_NONBLOCK_OPTION 129 /* Default: blocking read */
#define CONN_ACK_TIMEOUT 130 /* Default: 8000 ms */
#define TIPC_POLLEVENTS 131 /* Get/clear poll() events (get only) */
/*
* TIPC topology services definitions.
*
* Subscriptions fire repeatedly on any event until cancelled or
* until the timeout expires. Need not be cancelled after timeout.
*
* Details about a fired/expired subscription MUST be obtained
* using the GET_EVENT command or BLOCK_GET_EVENT command (WRS only).
*
* Availability of nodes is obtained by using the special "type" 0:
* e.g.<type,lower,upper> == <0,tipc_addr(z,c,0),tipc_addr(z,c,0xfff)>
*/
struct tipc_subscr {
struct tipc_name_seq seq;
__u32 timeout; /* [ms] */
__u32 ref;
__u32 all; /* All events, or available/unavailable */
char usr_handle[8];
};
#define TIPC_SUBSCRIBE 300 /* ioctl(tipc_subscr*) */
#define TIPC_UNSUBSCRIBE 301 /* ioctl(tipc_subscr.ref) */
#define TIPC_WAIT_FOREVER ~0
struct tipc_event {
__u32 event;
__u32 found_lower;
__u32 found_upper;
struct tipc_portid port;
struct tipc_subscr s;
};
#define TIPC_GET_EVENT 173 /* ioctl(tipc_event*) */
#define TIPC_BLOCK_GET_EVENT 182 /* ioctl(tipc_event*) (WRS only) */
/*
* Blocking subscription for availability of port name.
* No cancelling needed.
*/
struct tipc_block_subscr{
struct tipc_name name;
unsigned int timeout;
int is_published; /* Return value */
};
#define TIPC_BLOCK_SUBSCRIBE 175 /* Takes tipc_block_subscr* */
/*
* More ioctls:
*/
#define TIPC_OWN_NODE 177 /* Takes __u32* */
#define TIPC_UNBIND 178 /* Takes tipc_name_seq* or zero */
#if 0 /* NOT SUPPORTED BY WRS */
#define TIPC_CONNECT 179 /* Local connect. Takes sockaddr_tipc* */
#define TIPC_DISCONNECT 180 /* Local disconnect. */
#endif
#define TIPC_GET_DEST_ADDR 181 /* Destination of received msg.
Takes sockaddr_tipc* */
#if 0 /* NOT SUPPORTED BY WRS */
/*
* Flag for SOCK_SEQPACKET/recv(): return and consume pending
* message if it fits into the buffer. Otherwise put pending msg
* length into the first four bytes of buffer and return 0
*/
#define MSG_PEEP 0x8000
#endif
/*
* Port interface:
* --------------
*/
__u32 tipc_own_node(void);
/*
* Return codes:
*/
#define TIPC_OK 0
#define TIPC_FAILURE -22
#define TIPC_CONGESTION -2
struct tipc_msg_section {
unsigned char const *data;
unsigned int size;
};
#define TIPC_NOT_RUNNING 0
#define TIPC_NODE_MODE 1
#define TIPC_NET_MODE 2
typedef void (*tipc_mode_event) (void *usr_handle,
int mode,
__u32 addr);
int tipc_attach(unsigned int *userref,
tipc_mode_event, void *usr_handle);
void tipc_detach(unsigned int userref);
int tipc_get_mode(void);
typedef void (*tipc_conn_shutdown_event) (void *usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
int reason,
void **buf);
typedef void (*tipc_msg_err_event) (void * usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
struct tipc_portid const *attmpt_destid,
int reason,
void **buf);
typedef void (*tipc_named_msg_err_event) (void * usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
struct tipc_name_seq const *attmpt_dest,
int reason,
void **buf);
typedef void (*tipc_msg_event) (void * usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
struct tipc_portid const *origin,
unsigned int importance,
void **buf);
typedef void (*tipc_named_msg_event) (void *usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
struct tipc_portid const *orig,
struct tipc_name_seq const *dest,
unsigned int importance,
void **buf);
typedef void (*tipc_conn_msg_event) (void *usr_handle,
__u32 portref,
unsigned char const *data,
unsigned int size,
void **buf);
typedef void (*tipc_continue_event) (void *usr_handle, __u32 portref);
int tipc_createport(unsigned int tipc_user,
void * usr_handle,
unsigned int importance,
tipc_msg_err_event error_cb,
tipc_named_msg_err_event named_error_cb,
tipc_conn_shutdown_event conn_error_cb,
tipc_msg_event message_cb,
tipc_named_msg_event named_message_cb,
tipc_conn_msg_event conn_message_cb,
tipc_continue_event continue_event_cb,/* May be zero */
__u32 *portref);
int tipc_deleteport(__u32 portref);
int tipc_ownidentity(__u32 portref, struct tipc_portid *port);
int tipc_portimportance(__u32 portref, unsigned int *importance);
int tipc_set_portimportance(__u32 portref,
unsigned int importance);
int tipc_set_unreliable(__u32 portref);
int tipc_publish(__u32 portref,
unsigned int scope,
struct tipc_name_seq const *);
int tipc_withdraw(__u32 portref,
struct tipc_name_seq const *); /* 0: all */
int tipc_connect2port(__u32 portref,
struct tipc_portid const *port);
int tipc_disconnect(__u32 portref);
int tipc_shutdown(__u32 ref); /* Sends SHUTDOWN msg */
int tipc_isconnected(__u32 portref, int *isconnected);
int tipc_peer(__u32 portref, struct tipc_portid *peer);
int tipc_ref_valid(__u32 portref);
int tipc_send(__u32 portref,
unsigned int section_count,
struct tipc_msg_section const *msg);
int tipc_send_buf(__u32 ref,
void *buf,
uint size);
int tipc_send2name(__u32 portref,
struct tipc_name const *name,
__u32 domain, /* 0:own zone */
unsigned int section_count,
struct tipc_msg_section const *msg);
int tipc_send_buf2name(__u32 ref,
struct tipc_name const *name,
__u32 domain,
void *buf,
uint size);
int tipc_send2port(__u32 portref,
struct tipc_portid const *dest,
unsigned int section_count,
struct tipc_msg_section const *msg);
int tipc_send_buf2port(__u32 ref,
struct tipc_portid const *dest,
void *buf,
uint size);
int tipc_forward2name(__u32 portref,
struct tipc_name const *name,
__u32 domain, /*0: own zone */
unsigned int section_count,
struct tipc_msg_section const *msg,
struct tipc_portid const *origin,
unsigned int importance);
int tipc_forward2port(__u32 portref,
struct tipc_portid const *dest,
unsigned int section_count,
struct tipc_msg_section const *msg,
struct tipc_portid const *origin,
unsigned int importance);
int
tipc_multicast(__u32 portref,
struct tipc_name_seq const *seq,
__u32 domain, /* 0:own zone */
unsigned int section_count,
struct tipc_msg_section const *msg);
int
tipc_multicast_buf(__u32 portref,
struct tipc_name_seq const *seq,
__u32 domain, /* 0:own zone */
void *buf,
uint size);
/*
* Subscriptions:
*/
typedef void (*tipc_subscr_event) (void *usr_handle,
__u32 subscr_ref,
unsigned int event,
unsigned int type,
unsigned int found_lower,
unsigned int found_upper);
int tipc_subscribe(__u32 user,
void *usr_handle,
unsigned int type,
unsigned int lower,
unsigned int upper,
unsigned int timeout,
unsigned int all,
tipc_subscr_event event_cb,
__u32 * ref);
int tipc_unsubscribe(__u32 subscr_ref);
int tipc_ispublished(struct tipc_name const *name);
unsigned int tipc_available_nodes(const __u32 scope);
/*
* Build interface: (WRS only)
* ---------------
*/
struct tipc_media_descr {
int type; /* media type identifier */
VOIDFUNCPTR start; /* media initialization routine */
VOIDFUNCPTR stop; /* media termination routine */
char * name; /* prefix string ("xyz:") */
int priority; /* default priority */
};
/*
* Management interface:
* --------------------
*
* Integers and addresses below are in network byte order.
* Character arrays are zero-terminated strings.
* Send with size = sizeof(struct tipc_command_msg)
*/
#define TIPC_MAGIC 0x54495043
#define MAX_BEARER_NAME 48
#define MAX_LINK_NAME 72
#define ETH_ADDR 0
#define SOCKADDR_IPV4 1
#define SOCK_DESCR 2
#define SM_ADDR 3
struct tipc_media_addr {
__u32 type;
union{
struct {
__u16 sin_family;
__u16 sin_port;
struct {
__u32 s_addr;
}sin_addr;
char pad[4];
}addr_in;
__u8 eth_addr[6];
__u16 sock_descr;
__u32 sm; /* 0-20, 0xbbbbbbbb broadcast, WRS-specific */
}dev_addr;
};
struct tipc_enable_bearer_argv {
__u32 priority; /* Range [1,31]. Override per link */
__u32 detect_scope;
char name[MAX_BEARER_NAME]; /* Format <media:bearer>\0 */
};
struct tipc_create_link_argv {
__u32 domain;
struct tipc_media_addr peer_addr;
char bearer_name[MAX_BEARER_NAME];
};
struct tipc_config_link_argv {
__u32 value; /* priority/tolerance/window */
char name[MAX_LINK_NAME];
};
struct tipc_get_name_table_argv {
__u32 depth; /* 1:type, 2:+port name, 3:+port id, 4+:+debug info */
__u32 type; /* 0:all types, unless lowbound or upbound nonzero */
__u32 lowbound; /* low=0,up=0:all instances, low>0,up=0:low only */
__u32 upbound; /* low>0,up>=low:from low to up, low>0,up<low: error */
};
/*
* Command Group 1:
* Read-only or non-intrusive commands: May be called from
* anywhere by using port name <0,address>. May also be called
* via the mangement connection.
*/
#define TIPC_GET_PORT_STATISTICS 100u /* arg: port ref */
#define TIPC_RESET_PORT_STATISTICS 101u /* arg: port ref */
#define TIPC_GET_NODES 102u /* arg: domain */
#define TIPC_GET_LINKS 103u /* arg: domain */
#define TIPC_GET_ROUTES 104u /* arg: domain */
#define TIPC_GET_LINK_STATISTICS 105u /* arg: link name */
#define TIPC_RESET_LINK_STATISTICS 106u /* arg: link name */
#define TIPC_GET_PEER_ADDRESS 107u /* arg: link name */
#define TIPC_GET_NAME_TABLE 108u /* tipc_get_name_table_argv */
#define TIPC_GET_BEARERS 109u /* no arg */
#define TIPC_GET_MEDIA 110u /* no arg */
#define TIPC_GET_PORTS 111u /* no arg */
/*
* Command Group 2:
* "Risky" commands: The first call must be an TIPC_ESTABLISH,
* sent to <0,address> as above. Upon receiving the confirmation
* the new connection is used for subsequent commands.
* There may only exist one such connection per node at any
* time, so by holding on this connection the manager process
* can exclude other users from changing the configuration values.
* The commands return an empty (result_len == 0) confirmation
* message when successful.
*/
#define TIPC_ESTABLISH 200u /* Send first. No arg */
#define TIPC_CREATE_LINK 201u /* tipc_create_link_argv */
#define TIPC_REMOVE_LINK 202u /* arg: link name */
#define TIPC_BLOCK_LINK 203u /* arg: link name */
#define TIPC_UNBLOCK_LINK 204u /* arg: link name */
#define TIPC_SET_LINK_TOLERANCE 205u /* tipc_config_link_argv */
#define TIPC_SET_LINK_PRIORITY 206u /* tipc_config_link_argv */
#define TIPC_SET_LINK_WINDOW 207u /* tipc_config_link_argv */
#define TIPC_ENABLE_BEARER 208u /* arg: tipc_enable_bearer_argv */
#define TIPC_DISABLE_BEARER 209u /* arg: bearer name */
/*
* Command Group 3:
* Subscriptions: Establishes a connection associated to
* the subscription, confirmed by an empty response message.
* Thereafter a message is received each time the subsription fires.
* Sending any message over the connection or deleting the
* socket/port causes the subscription to be cancelled.
* Timed-out subscriptions also abort the connection.
* Link events are associated with a link name string.
*/
#define TIPC_NAME_SUBSCRIBE 300u
#define TIPC_LINK_SUBSCRIBE 302u
/*
* Command Group 4:
* ioctls which can be done on any socket:
*/
#define TIPC_SET_OWN_NODE 400u /* arg: __u32 */
#define TIPC_ENABLE_REMOTE_MNG 401u /* no argument */
#define TIPC_DISABLE_REMOTE_MNG 402u /* no argument */
#define TIPC_SET_MAX_PORTS 403u /* arg: integer */
#define TIPC_GET_MAX_PORTS 404u /* no argument */
#define TIPC_SET_MAX_PUBLICATIONS 405u /* arg: integer */
#define TIPC_GET_MAX_PUBLICATIONS 406u /* no argument */
#define TIPC_SET_MAX_SUBSCRIPTIONS 407u /* arg: integer */
#define TIPC_GET_MAX_SUBSCRIPTIONS 408u /* no argument */
#define TIPC_SET_MAX_ZONES 409u /* arg: integer */
#define TIPC_GET_MAX_ZONES 410u /* no argument */
#define TIPC_SET_MAX_CLUSTERS 411u /* arg: integer */
#define TIPC_GET_MAX_CLUSTERS 412u /* no argument */
#define TIPC_SET_MAX_NODES 413u /* arg: integer */
#define TIPC_GET_MAX_NODES 414u /* no argument */
#define TIPC_SET_MAX_SLAVES 415u /* arg: integer */
#define TIPC_GET_MAX_SLAVES 416u /* no argument */
#define TIPC_SET_NET_ID 417u /* arg: integer */
#define TIPC_GET_NET_ID 418u /* no argument */
#define TIPC_SET_BCAST_THRESHOLD 419u /* arg: integer */
#define TIPC_GET_BCAST_THRESHOLD 420u /* no argument */
struct tipc_cmd_msg {
__u32 magic;
__u32 cmd;
char usr_handle[8];
union {
__u32 port_ref;
__u32 domain;
struct tipc_create_link_argv create_link;
struct tipc_config_link_argv config_link;
char link_name[72];
struct tipc_enable_bearer_argv enable_bearer;
char bearer_name[32];
struct tipc_get_name_table_argv get_name_table;
struct tipc_subscr subscr;
} argv;
};
#define VAR_ARRAY_SIZE 1
struct tipc_node_info {
int up;
__u32 addr;
};
struct tipc_route_info {
__u32 dest;
__u32 router;
};
struct tipc_link_info {
__u32 up;
__u32 dest;
char str[MAX_LINK_NAME];
};
struct tipc_cmd_result_msg {
__u32 cmd; /* The original command */
char usr_handle[8];
int retval;
__u32 remains; /* If more messages to follow */
__u32 result_len; /* In this message */
union {
struct tipc_media_addr peer_address;
struct tipc_event event;
struct tipc_node_info nodes[VAR_ARRAY_SIZE];
struct tipc_route_info routes[VAR_ARRAY_SIZE];
struct tipc_link_info links[VAR_ARRAY_SIZE];
char str[VAR_ARRAY_SIZE];
} result;
};
#endif