aboutsummaryrefslogtreecommitdiffstats
path: root/src/pingu_iface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pingu_iface.h')
-rw-r--r--src/pingu_iface.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/pingu_iface.h b/src/pingu_iface.h
new file mode 100644
index 0000000..cab98fd
--- /dev/null
+++ b/src/pingu_iface.h
@@ -0,0 +1,62 @@
+#ifndef PINGU_IFACE_H
+#define PINGU_IFACE_H
+
+#include <netinet/in.h>
+#include <ev.h>
+
+#include "pingu_route.h"
+#include "sockaddr_util.h"
+#include "list.h"
+
+#define PINGU_ROUTE_TABLE_AUTO -1
+
+struct pingu_iface {
+ char name[32];
+ char *label;
+ char *gw_up_action;
+ char *gw_down_action;
+ int hosts_online;
+ int required_hosts_online;
+
+ int index;
+ int has_link;
+ int has_address;
+ int has_binding;
+ int has_route_rule;
+ int has_multipath;
+ int balance;
+ int balance_weight;
+ int fd;
+ union sockaddr_any primary_addr;
+ int route_table;
+ int rule_priority;
+ int fwmark;
+ struct list_head iface_list_entry;
+ struct list_head ping_list;
+ struct list_head route_list;
+ struct ev_io socket_watcher;
+};
+
+struct pingu_iface *pingu_iface_get_by_name(const char *name);
+struct pingu_iface *pingu_iface_get_by_index(int index);
+struct pingu_iface *pingu_iface_get_by_name_or_new(const char *name);
+int pingu_iface_bind_socket(struct pingu_iface *iface, int log_error);
+int pingu_iface_usable(struct pingu_iface *iface);
+int pingu_iface_init(struct ev_loop *loop);
+
+void pingu_iface_set_balance(struct pingu_iface *iface, int balance_weight);
+void pingu_iface_set_addr(struct pingu_iface *iface, int family,
+ void *data, int len);
+void pingu_iface_adjust_hosts_online(struct pingu_iface *iface, int adjustment);
+int pingu_iface_set_route_table(struct pingu_iface *iface, int table);
+
+int pingu_iface_gw_is_online(struct pingu_iface *iface);
+void pingu_iface_gw_action(struct pingu_iface *iface,
+ struct pingu_route *gw, int action);
+
+void pingu_iface_dump_status(int fd, char *filter);
+void pingu_iface_dump_pings(int fd, char *filter);
+void pingu_iface_dump_routes(int fd, char *filter);
+void pingu_iface_update_routes(struct pingu_iface *iface, int action);
+void pingu_iface_cleanup(struct ev_loop *loop);
+#endif