summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2009-01-17 18:03:52 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2009-01-17 18:03:52 +0100
commit7ae054f8aae252ee9c57e26327675e466fc1d15d (patch)
tree8014a333b430477e336afd4621f49097c8d17435 /include
parentd581381870486687586dea4ebf4b7065ae408cd0 (diff)
src: support for redundant dedicated links
This patch adds support for redundant dedicated links. You can add a pool of dedicated links that can be used if the current active fails. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include')
-rw-r--r--include/conntrackd.h10
-rw-r--r--include/mcast.h28
-rw-r--r--include/netlink.h1
-rw-r--r--include/network.h6
4 files changed, 37 insertions, 8 deletions
diff --git a/include/conntrackd.h b/include/conntrackd.h
index 3637e2c..ab5d825 100644
--- a/include/conntrackd.h
+++ b/include/conntrackd.h
@@ -29,6 +29,7 @@
#define STATS_NETWORK 28 /* extended network stats */
#define STATS_CACHE 29 /* extended cache stats */
#define STATS_RUNTIME 30 /* extended runtime stats */
+#define STATS_MULTICAST 31 /* multicast network stats */
#define DEFAULT_CONFIGFILE "/etc/conntrackd/conntrackd.conf"
#define DEFAULT_LOCKFILE "/var/lock/conntrackd.lock"
@@ -66,7 +67,9 @@ struct ct_conf {
int syslog_facility;
char lockfile[FILENAME_MAXLEN];
int hashsize; /* hashtable size */
- struct mcast_conf mcast; /* multicast settings */
+ int mcast_links;
+ int mcast_default_link;
+ struct mcast_conf mcast[MCAST_LINKS_MAX];
struct local_conf local; /* unix socket facilities */
int limit;
int refresh;
@@ -148,8 +151,9 @@ struct ct_sync_state {
struct cache *internal; /* internal events cache (netlink) */
struct cache *external; /* external events cache (mcast) */
- struct mcast_sock *mcast_server; /* multicast socket: incoming */
- struct mcast_sock *mcast_client; /* multicast socket: outgoing */
+ struct mcast_sock_multi *mcast_server; /* multicast incoming */
+ struct mcast_sock_multi *mcast_client; /* multicast outgoing */
+ struct nlif_handle *mcast_iface;
struct queue *tx_queue;
struct sync_mode *sync; /* sync mode */
diff --git a/include/mcast.h b/include/mcast.h
index 7c4b1d6..623f390 100644
--- a/include/mcast.h
+++ b/include/mcast.h
@@ -19,6 +19,7 @@ struct mcast_conf {
unsigned int interface_index6;
} ifa;
int mtu;
+ int interface_idx;
int sndbuf;
int rcvbuf;
char iface[IFNAMSIZ];
@@ -37,19 +38,42 @@ struct mcast_sock {
struct sockaddr_in6 ipv6;
} addr;
socklen_t sockaddr_len;
+ int interface_idx;
struct mcast_stats stats;
};
+#define MCAST_LINKS_MAX 4
+
+struct mcast_sock_multi {
+ int num_links;
+ int max_mtu;
+ struct mcast_sock *current_link;
+ struct mcast_sock *multi[MCAST_LINKS_MAX];
+};
+
struct mcast_sock *mcast_server_create(struct mcast_conf *conf);
void mcast_server_destroy(struct mcast_sock *m);
+struct mcast_sock_multi *mcast_server_create_multi(struct mcast_conf *conf, int conf_len);
+void mcast_server_destroy_multi(struct mcast_sock_multi *m);
struct mcast_sock *mcast_client_create(struct mcast_conf *conf);
void mcast_client_destroy(struct mcast_sock *m);
+struct mcast_sock_multi *mcast_client_create_multi(struct mcast_conf *conf, int conf_len);
+void mcast_client_destroy_multi(struct mcast_sock_multi*m);
ssize_t mcast_send(struct mcast_sock *m, void *data, int size);
ssize_t mcast_recv(struct mcast_sock *m, void *data, int size);
-struct mcast_stats *mcast_get_stats(struct mcast_sock *m);
-void mcast_dump_stats(int fd, struct mcast_sock *s, struct mcast_sock *r);
+int mcast_get_fd(struct mcast_sock *m);
+int mcast_get_ifidx(struct mcast_sock_multi *m, int i);
+int mcast_get_current_ifidx(struct mcast_sock_multi *m);
+
+struct mcast_sock *mcast_get_current_link(struct mcast_sock_multi *m);
+void mcast_set_current_link(struct mcast_sock_multi *m, int i);
+
+void mcast_dump_stats(int fd, const struct mcast_sock_multi *s, const struct mcast_sock_multi *r);
+
+struct nlif_handle;
+void mcast_dump_stats_extended(int fd, const struct mcast_sock_multi *s, const struct mcast_sock_multi *r, const struct nlif_handle *h);
#endif
diff --git a/include/netlink.h b/include/netlink.h
index 5feb3e9..4bc5ee4 100644
--- a/include/netlink.h
+++ b/include/netlink.h
@@ -10,6 +10,7 @@ struct nfct_handle *nl_init_event_handler(void);
struct nfct_handle *nl_init_dump_handler(void);
struct nfct_handle *nl_init_request_handler(void);
struct nfct_handle *nl_init_overrun_handler(void);
+struct nlif_handle *nl_init_interface_handler(void);
int nl_overrun_request_resync(struct nfct_handle *h);
void nl_resize_socket_buffer(struct nfct_handle *h);
diff --git a/include/network.h b/include/network.h
index f02d920..740e762 100644
--- a/include/network.h
+++ b/include/network.h
@@ -76,7 +76,7 @@ enum {
__hdr; \
})
-struct mcast_sock;
+struct mcast_sock_multi;
enum {
SEQ_UNKNOWN,
@@ -94,8 +94,8 @@ struct mcast_conf;
int mcast_buffered_init(int mtu);
void mcast_buffered_destroy(void);
-int mcast_buffered_send_netmsg(struct mcast_sock *m, const struct nethdr *net);
-ssize_t mcast_buffered_pending_netmsg(struct mcast_sock *m);
+int mcast_buffered_send_netmsg(struct mcast_sock_multi *m, const struct nethdr *net);
+ssize_t mcast_buffered_pending_netmsg(struct mcast_sock_multi *m);
#define IS_DATA(x) (x->type <= NET_T_STATE_MAX && \
(x->flags & ~(NET_F_HELLO | NET_F_HELLO_BACK)) == 0)