IPVS: Add {sysctl_sync_threshold,period}()
In preparation for not including sysctl_sync_threshold in struct netns_ipvs when CONFIG_SYCTL is not defined. Signed-off-by: Simon Horman <horms@verge.net.au>
This commit is contained in:
@@ -909,6 +909,35 @@ struct netns_ipvs {
|
|||||||
struct net *net; /* Needed by timer routines */
|
struct net *net; /* Needed by timer routines */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define DEFAULT_SYNC_THRESHOLD 3
|
||||||
|
#define DEFAULT_SYNC_PERIOD 50
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYSCTL
|
||||||
|
|
||||||
|
static inline int sysctl_sync_threshold(struct netns_ipvs *ipvs)
|
||||||
|
{
|
||||||
|
return ipvs->sysctl_sync_threshold[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int sysctl_sync_period(struct netns_ipvs *ipvs)
|
||||||
|
{
|
||||||
|
return ipvs->sysctl_sync_threshold[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline int sysctl_sync_threshold(struct netns_ipvs *ipvs)
|
||||||
|
{
|
||||||
|
return DEFAULT_SYNC_THRESHOLD;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int sysctl_sync_period(struct netns_ipvs *ipvs)
|
||||||
|
{
|
||||||
|
return DEFAULT_SYNC_PERIOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IPVS core functions
|
* IPVS core functions
|
||||||
* (from ip_vs_core.c)
|
* (from ip_vs_core.c)
|
||||||
|
@@ -1613,15 +1613,15 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (cp->flags & IP_VS_CONN_F_ONE_PACKET)
|
if (cp->flags & IP_VS_CONN_F_ONE_PACKET)
|
||||||
pkts = ipvs->sysctl_sync_threshold[0];
|
pkts = sysctl_sync_threshold(ipvs);
|
||||||
else
|
else
|
||||||
pkts = atomic_add_return(1, &cp->in_pkts);
|
pkts = atomic_add_return(1, &cp->in_pkts);
|
||||||
|
|
||||||
if ((ipvs->sync_state & IP_VS_STATE_MASTER) &&
|
if ((ipvs->sync_state & IP_VS_STATE_MASTER) &&
|
||||||
cp->protocol == IPPROTO_SCTP) {
|
cp->protocol == IPPROTO_SCTP) {
|
||||||
if ((cp->state == IP_VS_SCTP_S_ESTABLISHED &&
|
if ((cp->state == IP_VS_SCTP_S_ESTABLISHED &&
|
||||||
(pkts % ipvs->sysctl_sync_threshold[1]
|
(pkts % sysctl_sync_period(ipvs)
|
||||||
== ipvs->sysctl_sync_threshold[0])) ||
|
== sysctl_sync_threshold(ipvs))) ||
|
||||||
(cp->old_state != cp->state &&
|
(cp->old_state != cp->state &&
|
||||||
((cp->state == IP_VS_SCTP_S_CLOSED) ||
|
((cp->state == IP_VS_SCTP_S_CLOSED) ||
|
||||||
(cp->state == IP_VS_SCTP_S_SHUT_ACK_CLI) ||
|
(cp->state == IP_VS_SCTP_S_SHUT_ACK_CLI) ||
|
||||||
@@ -1635,8 +1635,8 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
|
|||||||
else if ((ipvs->sync_state & IP_VS_STATE_MASTER) &&
|
else if ((ipvs->sync_state & IP_VS_STATE_MASTER) &&
|
||||||
(((cp->protocol != IPPROTO_TCP ||
|
(((cp->protocol != IPPROTO_TCP ||
|
||||||
cp->state == IP_VS_TCP_S_ESTABLISHED) &&
|
cp->state == IP_VS_TCP_S_ESTABLISHED) &&
|
||||||
(pkts % ipvs->sysctl_sync_threshold[1]
|
(pkts % sysctl_sync_period(ipvs)
|
||||||
== ipvs->sysctl_sync_threshold[0])) ||
|
== sysctl_sync_threshold(ipvs))) ||
|
||||||
((cp->protocol == IPPROTO_TCP) && (cp->old_state != cp->state) &&
|
((cp->protocol == IPPROTO_TCP) && (cp->old_state != cp->state) &&
|
||||||
((cp->state == IP_VS_TCP_S_FIN_WAIT) ||
|
((cp->state == IP_VS_TCP_S_FIN_WAIT) ||
|
||||||
(cp->state == IP_VS_TCP_S_CLOSE) ||
|
(cp->state == IP_VS_TCP_S_CLOSE) ||
|
||||||
|
@@ -3569,8 +3569,8 @@ int __net_init __ip_vs_control_init(struct net *net)
|
|||||||
tbl[idx++].data = &ipvs->sysctl_cache_bypass;
|
tbl[idx++].data = &ipvs->sysctl_cache_bypass;
|
||||||
tbl[idx++].data = &ipvs->sysctl_expire_nodest_conn;
|
tbl[idx++].data = &ipvs->sysctl_expire_nodest_conn;
|
||||||
tbl[idx++].data = &ipvs->sysctl_expire_quiescent_template;
|
tbl[idx++].data = &ipvs->sysctl_expire_quiescent_template;
|
||||||
ipvs->sysctl_sync_threshold[0] = 3;
|
ipvs->sysctl_sync_threshold[0] = DEFAULT_SYNC_THRESHOLD;
|
||||||
ipvs->sysctl_sync_threshold[1] = 50;
|
ipvs->sysctl_sync_threshold[1] = DEFAULT_SYNC_PERIOD;
|
||||||
tbl[idx].data = &ipvs->sysctl_sync_threshold;
|
tbl[idx].data = &ipvs->sysctl_sync_threshold;
|
||||||
tbl[idx++].maxlen = sizeof(ipvs->sysctl_sync_threshold);
|
tbl[idx++].maxlen = sizeof(ipvs->sysctl_sync_threshold);
|
||||||
tbl[idx++].data = &ipvs->sysctl_nat_icmp_send;
|
tbl[idx++].data = &ipvs->sysctl_nat_icmp_send;
|
||||||
|
@@ -650,7 +650,7 @@ control:
|
|||||||
if (cp->flags & IP_VS_CONN_F_TEMPLATE) {
|
if (cp->flags & IP_VS_CONN_F_TEMPLATE) {
|
||||||
int pkts = atomic_add_return(1, &cp->in_pkts);
|
int pkts = atomic_add_return(1, &cp->in_pkts);
|
||||||
|
|
||||||
if (pkts % ipvs->sysctl_sync_threshold[1] != 1)
|
if (pkts % sysctl_sync_period(ipvs) != 1)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
goto sloop;
|
goto sloop;
|
||||||
@@ -794,7 +794,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
|
|||||||
|
|
||||||
if (opt)
|
if (opt)
|
||||||
memcpy(&cp->in_seq, opt, sizeof(*opt));
|
memcpy(&cp->in_seq, opt, sizeof(*opt));
|
||||||
atomic_set(&cp->in_pkts, ipvs->sysctl_sync_threshold[0]);
|
atomic_set(&cp->in_pkts, sysctl_sync_threshold(ipvs));
|
||||||
cp->state = state;
|
cp->state = state;
|
||||||
cp->old_state = cp->state;
|
cp->old_state = cp->state;
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user