Skip to content

Commit

Permalink
keepalived: fix laddr/blklst/tunnel group problem in check_data
Browse files Browse the repository at this point in the history
  * dump ladr/blklst group correctly
  * add the missing tunnel group support
  • Loading branch information
ywc689 committed Apr 10, 2020
1 parent 99b4722 commit b8f8db6
Showing 1 changed file with 102 additions and 8 deletions.
110 changes: 102 additions & 8 deletions tools/keepalived/keepalived/check/check_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ alloc_ssl(void)
{
return (ssl_data_t *) MALLOC(sizeof(ssl_data_t));
}

void
free_ssl(void)
{
Expand All @@ -71,10 +72,16 @@ free_ssl(void)
FREE(ssl);
check_data->ssl = NULL;
}

static void
dump_ssl(FILE *fp)
{
ssl_data_t *ssl = check_data->ssl;
ssl_data_t *ssl;

if (!check_data || !check_data->ssl)
return;

ssl = check_data->ssl;

if (!ssl->password && !ssl->cafile && !ssl->certfile && !ssl->keyfile) {
conf_write(fp, " Using autogen SSL context");
Expand All @@ -101,6 +108,7 @@ free_vsg(void *data)
free_list(&vsg->vfwmark);
FREE(vsg);
}

static void
dump_vsg(FILE *fp, const void *data)
{
Expand All @@ -111,11 +119,13 @@ dump_vsg(FILE *fp, const void *data)
dump_list(fp, vsg->addr_range);
dump_list(fp, vsg->vfwmark);
}

static void
free_vsg_entry(void *data)
{
FREE(data);
}

static void
dump_vsg_entry(FILE *fp, const void *data)
{
Expand Down Expand Up @@ -147,6 +157,7 @@ dump_vsg_entry(FILE *fp, const void *data)
}
conf_write(fp, " reloaded = %s", vsg_entry->reloaded ? "True" : "False");
}

void
alloc_vsg(const char *gname)
{
Expand All @@ -159,6 +170,7 @@ alloc_vsg(const char *gname)

list_add(check_data->vs_group, new);
}

void
alloc_vsg_entry(const vector_t *strvec)
{
Expand Down Expand Up @@ -308,7 +320,6 @@ dump_forwarding_method(FILE *fp, const char *prefix, const real_server_t *rs)
conf_write(fp, "default forwarding method = SNAT");
break;
}

}

static void
Expand Down Expand Up @@ -430,7 +441,7 @@ dump_vs(FILE *fp, const void *data)

conf_write(fp, " SYN proxy is %s", vs->syn_proxy ? "ON" : "OFF");

switch (vs->hash_target) {
switch (vs->hash_target) {
case IP_VS_SVC_F_SIP_HASH:
conf_write(fp, " hash target = sip");
break;
Expand Down Expand Up @@ -490,7 +501,7 @@ alloc_vs(const char *param1, const char *param2)
new->af = new->addr.ss_family;
#ifndef LIBIPVS_USE_NL
if (new->af != AF_INET && new->af != AF_INET6) {
report_config_error(CONFIG_GENERAL_ERROR, "IPVS with IPv4 & IPv6 is supported only by this build");
report_config_error(CONFIG_GENERAL_ERROR, "This IPVS build supports IPv4 and IPv6 only.");
FREE(new);
skip_block(true);
return;
Expand Down Expand Up @@ -546,15 +557,17 @@ dump_laddr_group(FILE *fp, const void *data)
{
const local_addr_group *laddr_group = data;

log_message(LOG_INFO, " local IP address group = %s", laddr_group->gname);
conf_write(fp, " local IP address group = %s", laddr_group->gname);
dump_list(fp, laddr_group->addr_ip);
dump_list(fp, laddr_group->range);
}

static void
free_laddr_entry(void *data)
{
FREE(data);
}

static void
dump_laddr_entry(FILE *fp, const void *data)
{
Expand All @@ -568,6 +581,7 @@ dump_laddr_entry(FILE *fp, const void *data)
conf_write(fp, " IP = %s"
, inet_sockaddrtos(&laddr_entry->addr));
}

void
alloc_laddr_group(char *gname)
{
Expand All @@ -582,6 +596,7 @@ alloc_laddr_group(char *gname)

list_add(check_data->laddr_group, new);
}

void
alloc_laddr_entry(const vector_t *strvec)
{
Expand Down Expand Up @@ -621,7 +636,7 @@ dump_blklst_group(FILE *fp, const void *data)
{
const blklst_addr_group *blklst_group = data;

log_message(LOG_INFO, " blacllist IP address group = %s", blklst_group->gname);
conf_write(fp, " blacllist IP address group = %s", blklst_group->gname);
dump_list(fp, blklst_group->addr_ip);
dump_list(fp, blklst_group->range);
}
Expand Down Expand Up @@ -683,6 +698,78 @@ alloc_blklst_entry(const vector_t *strvec)
log_message(LOG_INFO, "invalid: blacklist IP address range %d", new->range);
}

static void
free_tunnel_group(void *data)
{
tunnel_group *group = data;
if (!group)
return;

FREE_PTR(group->gname);
free_list(&group->tunnel_entry);
FREE(group);
}

static void
dump_tunnel_group(FILE *fp, const void *data)
{
const tunnel_group *group = data;
if (!group)
return;

conf_write(fp, "tunnel group = %s", group->gname);
dump_list(fp, group->tunnel_entry);
}

static void
free_tunnel_entry(void *data)
{
if (!data)
return;

FREE(data);
}

static void
dump_tunnel_entry(FILE *fp, const void *data)
{
const tunnel_entry *entry = data;
if (!entry)
return;

conf_write(fp, "tunnel name = %s, local_ip = %s, remote_ip = %s,"
" kind = %s, dev = %s",
entry->ifname,
inet_sockaddrtos(&entry->local),
inet_sockaddrtos(&entry->remote),
entry->kind,
entry->link);
}

void alloc_tunnel(char *gname)
{
int size = strlen(gname);
tunnel_group *new;

new = (tunnel_group *) MALLOC(sizeof(tunnel_group));
new->gname = (char *) MALLOC(size + 1);
memcpy(new->gname, gname, size);
new->tunnel_entry = alloc_list(free_tunnel_entry, dump_tunnel_entry);
list_add(check_data->tunnel_group, new);
}

void alloc_tunnel_entry(char *name)
{
tunnel_group *gtunnel = LIST_TAIL_DATA(check_data->tunnel_group);
tunnel_entry *new;

new = (tunnel_entry *) MALLOC(sizeof(tunnel_entry));
strncpy(new->ifname, name, sizeof(new->ifname) - 1);

if (gtunnel->tunnel_entry)
list_add(gtunnel->tunnel_entry, new);
}

/* Sorry server facility functions */
void
alloc_ssvr(const char *ip, const char *port)
Expand Down Expand Up @@ -801,7 +888,7 @@ alloc_rs(const char *ip, const char *port)

#ifndef LIBIPVS_USE_NL
if (new->addr.ss_family != AF_INET && new->addr.ss_family != AF_INET6) {
report_config_error(CONFIG_GENERAL_ERROR, "IPVS does with IPv4 & ipV6 is supported only in this build - skipping %s/%s", ip, port);
report_config_error(CONFIG_GENERAL_ERROR, "This IPVS build supports IPv4 and IPv6 only - skipping %s/%s", ip, port);
skip_block(true);
FREE(new);
return;
Expand All @@ -810,7 +897,7 @@ alloc_rs(const char *ip, const char *port)
#if !HAVE_DECL_IPVS_DEST_ATTR_ADDR_FAMILY
if (vs->af != AF_UNSPEC && new->addr.ss_family != vs->af) {
if (!(new->addr.ss_family == AF_INET && vs->af == AF_INET6)) {
report_config_error(CONFIG_GENERAL_ERROR, "Your dpvs with NAT4to4 or NAT6to6 or NAT6to4 is supported only by this build");
report_config_error(CONFIG_GENERAL_ERROR, "This IPVS build supports NAT ipv4-to-ipv4, ipv6-to-ipv6, and ipv6-to-ipv4 only.");
skip_block(true);
FREE(new);
return;
Expand Down Expand Up @@ -885,6 +972,7 @@ alloc_check_data(void)
#endif
new->laddr_group = alloc_list(free_laddr_group, dump_laddr_group);
new->blklst_group = alloc_list(free_blklst_group, dump_blklst_group);
new->tunnel_group = alloc_list(free_tunnel_group, dump_tunnel_group);

return new;
}
Expand All @@ -901,6 +989,7 @@ free_check_data(check_data_t *data)
#endif
free_list(&data->laddr_group);
free_list(&data->blklst_group);
free_list(&data->tunnel_group);
FREE(data);
}

Expand All @@ -923,6 +1012,11 @@ dump_check_data(FILE *fp, check_data_t *data)
dump_list(fp, data->vs_group);
dump_list(fp, data->vs);
}
if (!LIST_ISEMPTY(data->tunnel_group)) {
conf_write(fp, "------< Tunnel definitions >------");
dump_list(fp, data->tunnel_group);
}

dump_checkers_queue(fp);

#ifdef _WITH_BFD_
Expand Down

0 comments on commit b8f8db6

Please sign in to comment.