diff options
author | Erik Hugne <erik.hugne@ericsson.com> | 2014-06-16 15:08:16 +0200 |
---|---|---|
committer | Jiri Pirko <jiri@resnulli.us> | 2014-06-16 15:32:28 +0200 |
commit | 86a90e26124d58df2204fde0ab238bf2ed2cbd69 (patch) | |
tree | 663efef7877005680789b7aa3edb9c5ef519d65f | |
parent | 9d439d5cf52056aa22c8aacdec72a88f6d0fd383 (diff) | |
download | libteam-86a90e26124d58df2204fde0ab238bf2ed2cbd69.tar.gz |
teamd: add tipc.h kernel header
This ensures a smooth compile on non-supportive systems. We remove
the configure-time TIPC check since passing tipc.h with the library
makes this redundant.
Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
-rw-r--r-- | configure.ac | 34 | ||||
-rw-r--r-- | include/Makefile.am | 2 | ||||
-rw-r--r-- | include/linux/tipc.h | 232 | ||||
-rw-r--r-- | teamd/Makefile.am | 14 | ||||
-rw-r--r-- | teamd/teamd_link_watch.c | 4 |
5 files changed, 238 insertions, 48 deletions
diff --git a/configure.ac b/configure.ac index 5af8bf7..f2b269c 100644 --- a/configure.ac +++ b/configure.ac @@ -101,40 +101,6 @@ AC_ARG_ENABLE([zmq], fi fi -AC_MSG_CHECKING([if TIPC is available and supports link state supervision]) -AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - #include <stdlib.h> - #include <string.h> - #include <errno.h> - #include <sys/socket.h> - #include <sys/ioctl.h> - #include <netinet/in.h> - #include <linux/tipc.h> - ]],[[ - #ifndef TIPC_LINK_STATE - #error TIPC link state monitoring is not available for your kernel - #endif - int sd = 0; - struct tipc_sioc_ln_req lnr = { 0 }; - - if ((sd = socket(AF_TIPC, SOCK_SEQPACKET, 0)) == -1) { - return errno; - } - lnr.peer = 0; - lnr.bearer_id = 0; - if ((ioctl(sd, SIOCGETLINKNAME, &lnr) < 0) < 0) { - return errno; - } - ]])], - [teamd_tipc_support=yes], - [teamd_tipc_support=no]) -AC_MSG_RESULT([$teamd_tipc_support]) -if test "x$teamd_tipc_support" = "xyes"; then - AC_DEFINE(TEAMD_ENABLE_TIPC, 1, [TIPC support enabled]) -fi -AM_CONDITIONAL(TEAMD_ENABLE_TIPC, test "x$teamd_tipc_support" = "xyes") - AC_CONFIG_FILES([Makefile include/Makefile \ libteam/Makefile \ diff --git a/include/Makefile.am b/include/Makefile.am index 6f9887d..1959d86 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -6,4 +6,4 @@ nobase_libteaminclude_HEADERS = team.h libteamdctlincludedir = $(includedir) nobase_libteamdctlinclude_HEADERS = teamdctl.h -noinst_HEADERS = linux/if_team.h linux/filter.h private/list.h private/misc.h +noinst_HEADERS = linux/if_team.h linux/filter.h linux/tipc.h private/list.h private/misc.h diff --git a/include/linux/tipc.h b/include/linux/tipc.h new file mode 100644 index 0000000..ebd3b63 --- /dev/null +++ b/include/linux/tipc.h @@ -0,0 +1,232 @@ +/* + * include/uapi/linux/tipc.h: Header for TIPC socket interface + * + * Copyright (c) 2003-2006, Ericsson AB + * Copyright (c) 2005, 2010-2011, Wind River Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. 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. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * 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. + */ + +#ifndef _LINUX_TIPC_H_ +#define _LINUX_TIPC_H_ + +#include <linux/types.h> +#include <linux/sockios.h> + +/* + * TIPC addressing primitives + */ + +struct tipc_portid { + __u32 ref; + __u32 node; +}; + +struct tipc_name { + __u32 type; + __u32 instance; +}; + +struct tipc_name_seq { + __u32 type; + __u32 lower; + __u32 upper; +}; + +static __inline__ __u32 tipc_addr(unsigned int zone, + unsigned int cluster, + unsigned int node) +{ + return (zone << 24) | (cluster << 12) | node; +} + +static __inline__ unsigned int tipc_zone(__u32 addr) +{ + return addr >> 24; +} + +static __inline__ unsigned int tipc_cluster(__u32 addr) +{ + return (addr >> 12) & 0xfff; +} + +static __inline__ unsigned int tipc_node(__u32 addr) +{ + return addr & 0xfff; +} + +/* + * Application-accessible port name types + */ + +#define TIPC_CFG_SRV 0 /* configuration service name type */ +#define TIPC_TOP_SRV 1 /* topology service name type */ +#define TIPC_LINK_STATE 2 /* link state name type */ +#define TIPC_RESERVED_TYPES 64 /* lowest user-publishable name type */ + +/* + * Publication scopes when binding port names and port name sequences + */ + +#define TIPC_ZONE_SCOPE 1 +#define TIPC_CLUSTER_SCOPE 2 +#define TIPC_NODE_SCOPE 3 + +/* + * Limiting values for messages + */ + +#define TIPC_MAX_USER_MSG_SIZE 66000U + +/* + * Message importance levels + */ + +#define TIPC_LOW_IMPORTANCE 0 +#define TIPC_MEDIUM_IMPORTANCE 1 +#define TIPC_HIGH_IMPORTANCE 2 +#define TIPC_CRITICAL_IMPORTANCE 3 + +/* + * Msg rejection/connection shutdown reasons + */ + +#define TIPC_OK 0 +#define TIPC_ERR_NO_NAME 1 +#define TIPC_ERR_NO_PORT 2 +#define TIPC_ERR_NO_NODE 3 +#define TIPC_ERR_OVERLOAD 4 +#define TIPC_CONN_SHUTDOWN 5 + +/* + * TIPC topology subscription service definitions + */ + +#define TIPC_SUB_PORTS 0x01 /* filter for port availability */ +#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ +#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */ + +#define TIPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */ + +struct tipc_subscr { + struct tipc_name_seq seq; /* name sequence of interest */ + __u32 timeout; /* subscription duration (in ms) */ + __u32 filter; /* bitmask of filter options */ + char usr_handle[8]; /* available for subscriber use */ +}; + +#define TIPC_PUBLISHED 1 /* publication event */ +#define TIPC_WITHDRAWN 2 /* withdraw event */ +#define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ + +struct tipc_event { + __u32 event; /* event type */ + __u32 found_lower; /* matching name seq instances */ + __u32 found_upper; /* " " " " */ + struct tipc_portid port; /* associated port */ + struct tipc_subscr s; /* associated subscription */ +}; + +/* + * Socket API + */ + +#ifndef AF_TIPC +#define AF_TIPC 30 +#endif + +#ifndef PF_TIPC +#define PF_TIPC AF_TIPC +#endif + +#ifndef SOL_TIPC +#define SOL_TIPC 271 +#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 short family; + unsigned char addrtype; + signed char scope; + union { + struct tipc_portid id; + struct tipc_name_seq nameseq; + struct { + struct tipc_name name; + __u32 domain; + } name; + } addr; +}; + +/* + * Ancillary data objects supported by recvmsg() + */ + +#define TIPC_ERRINFO 1 /* error info */ +#define TIPC_RETDATA 2 /* returned data */ +#define TIPC_DESTNAME 3 /* destination name */ + +/* + * TIPC-specific socket option values + */ + +#define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ +#define TIPC_SRC_DROPPABLE 128 /* Default: based on socket type */ +#define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ +#define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ +#define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ +#define TIPC_SOCK_RECVQ_DEPTH 132 /* Default: none (read only) */ + +/* + * Maximum sizes of TIPC bearer-related names (including terminating NULL) + * The string formatting for each name element is: + * media: media + * interface: media:interface name + * link: Z.C.N:interface-Z.C.N:interface + * + */ + +#define TIPC_MAX_MEDIA_NAME 16 +#define TIPC_MAX_IF_NAME 16 +#define TIPC_MAX_BEARER_NAME 32 +#define TIPC_MAX_LINK_NAME 60 + +#define SIOCGETLINKNAME SIOCPROTOPRIVATE + +struct tipc_sioc_ln_req { + __u32 peer; + __u32 bearer_id; + char linkname[TIPC_MAX_LINK_NAME]; +}; +#endif diff --git a/teamd/Makefile.am b/teamd/Makefile.am index 5819fa0..b81ed59 100644 --- a/teamd/Makefile.am +++ b/teamd/Makefile.am @@ -15,15 +15,11 @@ teamd_SOURCES=teamd.c teamd_common.c teamd_json.c teamd_config.c teamd_state.c \ teamd_workq.c teamd_events.c teamd_per_port.c \ teamd_option_watch.c teamd_ifinfo_watch.c teamd_lw_ethtool.c \ teamd_lw_psr.c teamd_lw_arp_ping.c teamd_lw_nsna_ping.c \ - teamd_link_watch.c teamd_ctl.c teamd_dbus.c teamd_zmq.c \ - teamd_usock.c teamd_phys_port_check.c teamd_bpf_chef.c \ - teamd_hash_func.c teamd_balancer.c teamd_runner_basic_ones.c \ - teamd_runner_activebackup.c teamd_runner_loadbalance.c \ - teamd_runner_lacp.c - -if TEAMD_ENABLE_TIPC -teamd_SOURCES+=teamd_lw_tipc.c -endif + teamd_lw_tipc.c teamd_link_watch.c teamd_ctl.c teamd_dbus.c \ + teamd_zmq.c teamd_usock.c teamd_phys_port_check.c \ + teamd_bpf_chef.c teamd_hash_func.c teamd_balancer.c \ + teamd_runner_basic_ones.c teamd_runner_activebackup.c \ + teamd_runner_loadbalance.c teamd_runner_lacp.c EXTRA_DIST = example_configs dbus redhat diff --git a/teamd/teamd_link_watch.c b/teamd/teamd_link_watch.c index f565138..55d81a9 100644 --- a/teamd/teamd_link_watch.c +++ b/teamd/teamd_link_watch.c @@ -36,9 +36,7 @@ extern const struct teamd_link_watch teamd_link_watch_ethtool; extern const struct teamd_link_watch teamd_link_watch_arp_ping; extern const struct teamd_link_watch teamd_link_watch_nsnap; -#ifdef TEAMD_ENABLE_TIPC extern const struct teamd_link_watch teamd_link_watch_tipc; -#endif int __set_sockaddr(struct sockaddr *sa, socklen_t sa_len, sa_family_t family, const char *hostname) @@ -102,9 +100,7 @@ static const struct teamd_link_watch *teamd_link_watch_list[] = { &teamd_link_watch_ethtool, &teamd_link_watch_arp_ping, &teamd_link_watch_nsnap, -#ifdef TEAMD_ENABLE_TIPC &teamd_link_watch_tipc, -#endif }; #define TEAMD_LINK_WATCH_LIST_SIZE ARRAY_SIZE(teamd_link_watch_list) |