|
|
9efc89 |
diff -Naur a/keepalived/vrrp/vrrp_ipset.c b/keepalived/vrrp/vrrp_ipset.c
|
|
|
9efc89 |
--- a/keepalived/vrrp/vrrp_ipset.c 2020-03-30 11:16:29.420721279 -0500
|
|
|
9efc89 |
+++ b/keepalived/vrrp/vrrp_ipset.c 2020-03-30 11:16:57.188181698 -0500
|
|
|
9efc89 |
@@ -52,11 +52,11 @@
|
|
|
9efc89 |
#include <dlfcn.h>
|
|
|
9efc89 |
|
|
|
9efc89 |
/* The addresses of the functions we want */
|
|
|
9efc89 |
-struct ipset_session* (*ipset_session_init_addr)(ipset_outfn outfn);
|
|
|
9efc89 |
+struct ipset_session* (*ipset_session_init_addr)(ipset_print_outfn outfn, const void *p);
|
|
|
9efc89 |
int (*ipset_session_fini_addr)(struct ipset_session *session);
|
|
|
9efc89 |
struct ipset_data* (*ipset_session_data_addr)(const struct ipset_session *session);
|
|
|
9efc89 |
const char* (*ipset_session_error_addr)(const struct ipset_session *session);
|
|
|
9efc89 |
-int (*ipset_envopt_parse_addr)(struct ipset_session *session, int env, const char *str);
|
|
|
9efc89 |
+void (*ipset_envopt_set_addr)(struct ipset_session *session, int env);
|
|
|
9efc89 |
const struct ipset_type* (*ipset_type_get_addr)(struct ipset_session *session, enum ipset_cmd cmd);
|
|
|
9efc89 |
int (*ipset_data_set_addr)(struct ipset_data *data, enum ipset_opt opt, const void *value);
|
|
|
9efc89 |
int (*ipset_cmd_addr)(struct ipset_session *session, enum ipset_cmd cmd, uint32_t lineno);
|
|
|
9efc89 |
@@ -66,8 +66,7 @@
|
|
|
9efc89 |
#define ipset_session_init (*ipset_session_init_addr)
|
|
|
9efc89 |
#define ipset_session_fini (*ipset_session_fini_addr)
|
|
|
9efc89 |
#define ipset_session_data (*ipset_session_data_addr)
|
|
|
9efc89 |
-#define ipset_session_error (*ipset_session_error_addr)
|
|
|
9efc89 |
-#define ipset_envopt_parse (*ipset_envopt_parse_addr)
|
|
|
9efc89 |
+#define ipset_envopt_set (*ipset_envopt_set_addr)
|
|
|
9efc89 |
#define ipset_type_get (*ipset_type_get_addr)
|
|
|
9efc89 |
#define ipset_data_set (*ipset_data_set_addr)
|
|
|
9efc89 |
/* Unfortunately ipset_cmd conflicts with struct ipset_cmd */
|
|
|
9efc89 |
@@ -79,6 +78,21 @@
|
|
|
9efc89 |
#define ipset_cmd1 ipset_cmd
|
|
|
9efc89 |
#endif
|
|
|
9efc89 |
|
|
|
9efc89 |
+static int
|
|
|
9efc89 |
+__attribute__ ((format(printf, 3, 4)))
|
|
|
9efc89 |
+ipset_printf(__attribute ((__unused__)) struct ipset_session *session, void *p, const char *fmt, ...)
|
|
|
9efc89 |
+{
|
|
|
9efc89 |
+ va_list args;
|
|
|
9efc89 |
+
|
|
|
9efc89 |
+ log_message(LOG_INFO, "libipset message from %s", (const char *)p);
|
|
|
9efc89 |
+
|
|
|
9efc89 |
+ va_start(args, fmt);
|
|
|
9efc89 |
+ vlog_message(LOG_INFO, fmt, args);
|
|
|
9efc89 |
+ va_end(args);
|
|
|
9efc89 |
+
|
|
|
9efc89 |
+ return 0;
|
|
|
9efc89 |
+}
|
|
|
9efc89 |
+
|
|
|
9efc89 |
static bool
|
|
|
9efc89 |
do_ipset_cmd(struct ipset_session* session, enum ipset_cmd cmd, const char *setname,
|
|
|
9efc89 |
const ip_address_t *addr, uint32_t timeout, const char* iface)
|
|
|
9efc89 |
@@ -152,7 +166,7 @@
|
|
|
9efc89 |
{
|
|
|
9efc89 |
struct ipset_session *session;
|
|
|
9efc89 |
|
|
|
9efc89 |
- session = ipset_session_init(printf);
|
|
|
9efc89 |
+ session = ipset_session_init(ipset_printf, "create_sets");
|
|
|
9efc89 |
if (!session) {
|
|
|
9efc89 |
log_message(LOG_INFO, "Cannot initialize ipset session.");
|
|
|
9efc89 |
return false;
|
|
|
9efc89 |
@@ -161,7 +175,7 @@
|
|
|
9efc89 |
/* If we aren't reloading, don't worry if sets already exists. With the
|
|
|
9efc89 |
* IPSET_ENV_EXIST option set, any existing entries in the set are removed. */
|
|
|
9efc89 |
if (!reload)
|
|
|
9efc89 |
- ipset_envopt_parse(session, IPSET_ENV_EXIST, NULL);
|
|
|
9efc89 |
+ ipset_envopt_set(session, IPSET_ENV_EXIST);
|
|
|
9efc89 |
|
|
|
9efc89 |
if (block_ipv4) {
|
|
|
9efc89 |
if (!reload || !has_ipset_setname(session, addr4))
|
|
|
9efc89 |
@@ -242,8 +256,7 @@
|
|
|
9efc89 |
if (!(ipset_session_init_addr = dlsym(libipset_handle, "ipset_session_init")) ||
|
|
|
9efc89 |
!(ipset_session_fini_addr = dlsym(libipset_handle, "ipset_session_fini")) ||
|
|
|
9efc89 |
!(ipset_session_data_addr = dlsym(libipset_handle,"ipset_session_data")) ||
|
|
|
9efc89 |
- !(ipset_session_error_addr = dlsym(libipset_handle,"ipset_session_error")) ||
|
|
|
9efc89 |
- !(ipset_envopt_parse_addr = dlsym(libipset_handle,"ipset_envopt_parse")) ||
|
|
|
9efc89 |
+ !(ipset_envopt_set_addr = dlsym(libipset_handle,"ipset_envopt_set")) ||
|
|
|
9efc89 |
!(ipset_type_get_addr = dlsym(libipset_handle,"ipset_type_get")) ||
|
|
|
9efc89 |
!(ipset_data_set_addr = dlsym(libipset_handle,"ipset_data_set")) ||
|
|
|
9efc89 |
!(ipset_cmd_addr = dlsym(libipset_handle,"ipset_cmd")) ||
|
|
|
9efc89 |
@@ -275,7 +288,7 @@
|
|
|
9efc89 |
return true;
|
|
|
9efc89 |
#endif
|
|
|
9efc89 |
|
|
|
9efc89 |
- session = ipset_session_init(printf);
|
|
|
9efc89 |
+ session = ipset_session_init(ipset_printf, "remove_ipsets");
|
|
|
9efc89 |
if (!session) {
|
|
|
9efc89 |
log_message(LOG_INFO, "Cannot initialize ipset session.");
|
|
|
9efc89 |
return false;
|
|
|
9efc89 |
@@ -301,7 +314,7 @@
|
|
|
9efc89 |
|
|
|
9efc89 |
struct ipset_session* ipset_session_start(void)
|
|
|
9efc89 |
{
|
|
|
9efc89 |
- return ipset_session_init(NULL);
|
|
|
9efc89 |
+ return ipset_session_init(ipset_printf, "session_start");
|
|
|
9efc89 |
}
|
|
|
9efc89 |
|
|
|
9efc89 |
void ipset_session_end(struct ipset_session* session)
|