Skip to content

Commit

Permalink
Merge pull request iqiyi#552 from ytwang0320/kp2019
Browse files Browse the repository at this point in the history
real and virtual servers always have the same port
  • Loading branch information
ywc689 authored Apr 9, 2020
2 parents 8ebd758 + 38ee979 commit e796782
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
13 changes: 8 additions & 5 deletions tools/keepalived/keepalived/check/check_data.c
Original file line number Diff line number Diff line change
Expand Up @@ -1205,24 +1205,24 @@ bool validate_check_config(void)
if (vs->vsg) {
if (!LIST_ISEMPTY(vs->vsg->vfwmark)) {
LIST_FOREACH(vs->rs, rs, e1) {
if (rs->forwarding_method == IP_VS_CONN_F_MASQ)
if (rs->forwarding_method == IP_VS_CONN_F_MASQ || rs->forwarding_method == IP_VS_CONN_F_FULLNAT)
continue;
if (inet_sockaddrport(&rs->addr))
log_message(LOG_INFO, "WARNING - fwmark virtual server %s, real server %s has port specified - port will be ignored", FMT_VS(vs), FMT_RS(rs, vs));
}
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ &&
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ && vs->s_svr->forwarding_method != IP_VS_CONN_F_FULLNAT &&
inet_sockaddrport(&vs->s_svr->addr))
log_message(LOG_INFO, "WARNING - fwmark virtual server %s, sorry server has port specified - port will be ignored", FMT_VS(vs));
}
LIST_FOREACH(vs->vsg->addr_range, vsge, e1) {
LIST_FOREACH(vs->rs, rs, e2) {
if (rs->forwarding_method == IP_VS_CONN_F_MASQ)
if (rs->forwarding_method == IP_VS_CONN_F_MASQ || rs->forwarding_method == IP_VS_CONN_F_FULLNAT)
continue;
if (inet_sockaddrport(&rs->addr) &&
inet_sockaddrport(&vsge->addr) != inet_sockaddrport(&rs->addr))
report_config_error(CONFIG_GENERAL_ERROR, "virtual server %s:[%s] and real server %s ports don't match", FMT_VS(vs), format_vsge(vsge), FMT_RS(rs, vs));
}
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ &&
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ && vs->s_svr->forwarding_method != IP_VS_CONN_F_FULLNAT &&
inet_sockaddrport(&vs->s_svr->addr) &&
inet_sockaddrport(&vsge->addr) != inet_sockaddrport(&vs->s_svr->addr))
log_message(LOG_INFO, "WARNING - virtual server %s, sorry server has port specified - port will be ignored", FMT_VS(vs));
Expand All @@ -1236,6 +1236,9 @@ bool validate_check_config(void)
continue;
}

if (rs->forwarding_method == IP_VS_CONN_F_FULLNAT)
continue;

if (vs->vfwmark) {
if (inet_sockaddrport(&rs->addr)) {
report_config_error(CONFIG_GENERAL_ERROR, "WARNING - fwmark virtual server %s, real server %s has port specified - clearing", FMT_VS(vs), FMT_RS(rs, vs));
Expand All @@ -1252,7 +1255,7 @@ bool validate_check_config(void)
}

/* Check any sorry server */
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ) {
if (vs->s_svr && vs->s_svr->forwarding_method != IP_VS_CONN_F_MASQ && vs->s_svr->forwarding_method != IP_VS_CONN_F_FULLNAT) {
if (vs->vfwmark) {
if (inet_sockaddrport(&vs->s_svr->addr)) {
log_message(LOG_INFO, "WARNING - virtual server %s, sorry server has port specified - clearing", FMT_VS(vs));
Expand Down
14 changes: 10 additions & 4 deletions tools/keepalived/keepalived/check/ipvswrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ ipvs_change_needed(int cmd, virtual_server_group_entry_t *vsge, virtual_server_t
vs->service_type == IPPROTO_TCP ? vsge->tcp_alive :
vs->service_type == IPPROTO_UDP ? vsge->udp_alive : vsge->sctp_alive;

return (count == 1);
return (count == 0);
}
else if (cmd == IP_VS_SO_SET_ADDDEST)
return !rs->alive;
Expand All @@ -399,9 +399,9 @@ ipvs_change_needed(int cmd, virtual_server_group_entry_t *vsge, virtual_server_t
static void
ipvs_set_vsge_alive_state(int cmd, virtual_server_group_entry_t *vsge, virtual_server_t *vs)
{
if (cmd == IP_VS_SO_SET_ADD)
if (cmd == IP_VS_SO_SET_ADDDEST)
set_vsge_alive(vsge, vs);
else if (cmd == IP_VS_SO_SET_DEL)
else if (cmd == IP_VS_SO_SET_DELDEST)
unset_vsge_alive(vsge, vs);
}

Expand All @@ -417,6 +417,8 @@ ipvs_group_cmd(int cmd, ipvs_service_t *srule, ipvs_dest_t *drule, virtual_serve
return 0;
/* visit addr_ip list */
LIST_FOREACH(vsg->addr_range, vsg_entry, e) {
if (cmd == IP_VS_SO_SET_ADD && reload && vsg_entry->reloaded)
continue;
if (ipvs_change_needed(cmd, vsg_entry, vs, rs)) {
srule->user.port = inet_sockaddrport(&vsg_entry->addr);
if (vsg_entry->range) {
Expand All @@ -433,13 +435,17 @@ ipvs_group_cmd(int cmd, ipvs_service_t *srule, ipvs_dest_t *drule, virtual_serve
return -1;
}
}
ipvs_set_vsge_alive_state(cmd, vsg_entry, vs);
if (cmd == IP_VS_SO_SET_ADDDEST || cmd == IP_VS_SO_SET_DELDEST)
ipvs_set_vsge_alive_state(cmd, vsg_entry, vs);
}

/* visit vfwmark list */
memset(&srule->nf_addr, 0, sizeof(srule->nf_addr));
srule->user.port = 0;
LIST_FOREACH(vsg->vfwmark, vsg_entry, e) {
if (cmd == IP_VS_SO_SET_ADD && reload && vsg_entry->reloaded)
continue;

srule->user.fwmark = vsg_entry->vfwmark;

/* Talk to the IPVS channel */
Expand Down

0 comments on commit e796782

Please sign in to comment.