aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Hugne <erik.hugne@ericsson.com>2014-06-16 15:08:16 +0200
committerJiri Pirko <jiri@resnulli.us>2014-06-16 15:32:28 +0200
commit86a90e26124d58df2204fde0ab238bf2ed2cbd69 (patch)
tree663efef7877005680789b7aa3edb9c5ef519d65f
parent9d439d5cf52056aa22c8aacdec72a88f6d0fd383 (diff)
downloadlibteam-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.ac34
-rw-r--r--include/Makefile.am2
-rw-r--r--include/linux/tipc.h232
-rw-r--r--teamd/Makefile.am14
-rw-r--r--teamd/teamd_link_watch.c4
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)