Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 619c1517 authored by Patrick McHardy's avatar Patrick McHardy
Browse files
parents 1f2d9c9d 6c8f7949
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -836,8 +836,6 @@ struct netns_ipvs {
	int			num_services;    /* no of virtual services */

	rwlock_t		rs_lock;         /* real services table */
	/* semaphore for IPVS sockopts. And, [gs]etsockopt may sleep. */
	struct lock_class_key	ctl_key;	/* ctl_mutex debuging */
	/* Trash for destinations */
	struct list_head	dest_trash;
	/* Service counters */
@@ -1089,19 +1087,19 @@ ip_vs_control_add(struct ip_vs_conn *cp, struct ip_vs_conn *ctl_cp)
/*
 * IPVS netns init & cleanup functions
 */
extern int __ip_vs_estimator_init(struct net *net);
extern int __ip_vs_control_init(struct net *net);
extern int __ip_vs_protocol_init(struct net *net);
extern int __ip_vs_app_init(struct net *net);
extern int __ip_vs_conn_init(struct net *net);
extern int __ip_vs_sync_init(struct net *net);
extern void __ip_vs_conn_cleanup(struct net *net);
extern void __ip_vs_app_cleanup(struct net *net);
extern void __ip_vs_protocol_cleanup(struct net *net);
extern void __ip_vs_control_cleanup(struct net *net);
extern void __ip_vs_estimator_cleanup(struct net *net);
extern void __ip_vs_sync_cleanup(struct net *net);
extern void __ip_vs_service_cleanup(struct net *net);
extern int ip_vs_estimator_net_init(struct net *net);
extern int ip_vs_control_net_init(struct net *net);
extern int ip_vs_protocol_net_init(struct net *net);
extern int ip_vs_app_net_init(struct net *net);
extern int ip_vs_conn_net_init(struct net *net);
extern int ip_vs_sync_net_init(struct net *net);
extern void ip_vs_conn_net_cleanup(struct net *net);
extern void ip_vs_app_net_cleanup(struct net *net);
extern void ip_vs_protocol_net_cleanup(struct net *net);
extern void ip_vs_control_net_cleanup(struct net *net);
extern void ip_vs_estimator_net_cleanup(struct net *net);
extern void ip_vs_sync_net_cleanup(struct net *net);
extern void ip_vs_service_net_cleanup(struct net *net);

/*
 *      IPVS application functions
@@ -1119,8 +1117,6 @@ extern void ip_vs_app_inc_put(struct ip_vs_app *inc);

extern int ip_vs_app_pkt_out(struct ip_vs_conn *, struct sk_buff *skb);
extern int ip_vs_app_pkt_in(struct ip_vs_conn *, struct sk_buff *skb);
extern int ip_vs_app_init(void);
extern void ip_vs_app_cleanup(void);

void ip_vs_bind_pe(struct ip_vs_service *svc, struct ip_vs_pe *pe);
void ip_vs_unbind_pe(struct ip_vs_service *svc);
@@ -1223,15 +1219,11 @@ extern int start_sync_thread(struct net *net, int state, char *mcast_ifn,
			     __u8 syncid);
extern int stop_sync_thread(struct net *net, int state);
extern void ip_vs_sync_conn(struct net *net, struct ip_vs_conn *cp);
extern int ip_vs_sync_init(void);
extern void ip_vs_sync_cleanup(void);


/*
 *      IPVS rate estimator prototypes (from ip_vs_est.c)
 */
extern int ip_vs_estimator_init(void);
extern void ip_vs_estimator_cleanup(void);
extern void ip_vs_start_estimator(struct net *net, struct ip_vs_stats *stats);
extern void ip_vs_stop_estimator(struct net *net, struct ip_vs_stats *stats);
extern void ip_vs_zero_estimator(struct ip_vs_stats *stats);
+2 −12
Original line number Diff line number Diff line
@@ -576,7 +576,7 @@ static const struct file_operations ip_vs_app_fops = {
};
#endif

int __net_init __ip_vs_app_init(struct net *net)
int __net_init ip_vs_app_net_init(struct net *net)
{
	struct netns_ipvs *ipvs = net_ipvs(net);

@@ -585,17 +585,7 @@ int __net_init __ip_vs_app_init(struct net *net)
	return 0;
}

void __net_exit __ip_vs_app_cleanup(struct net *net)
void __net_exit ip_vs_app_net_cleanup(struct net *net)
{
	proc_net_remove(net, "ip_vs_app");
}

int __init ip_vs_app_init(void)
{
	return 0;
}


void ip_vs_app_cleanup(void)
{
}
+2 −2
Original line number Diff line number Diff line
@@ -1247,7 +1247,7 @@ static void ip_vs_conn_flush(struct net *net)
/*
 * per netns init and exit
 */
int __net_init __ip_vs_conn_init(struct net *net)
int __net_init ip_vs_conn_net_init(struct net *net)
{
	struct netns_ipvs *ipvs = net_ipvs(net);

@@ -1258,7 +1258,7 @@ int __net_init __ip_vs_conn_init(struct net *net)
	return 0;
}

void __net_exit __ip_vs_conn_cleanup(struct net *net)
void __net_exit ip_vs_conn_net_cleanup(struct net *net)
{
	/* flush all the connection entries first */
	ip_vs_conn_flush(net);
+25 −46
Original line number Diff line number Diff line
@@ -1891,22 +1891,22 @@ static int __net_init __ip_vs_init(struct net *net)
	atomic_inc(&ipvs_netns_cnt);
	net->ipvs = ipvs;

	if (__ip_vs_estimator_init(net) < 0)
	if (ip_vs_estimator_net_init(net) < 0)
		goto estimator_fail;

	if (__ip_vs_control_init(net) < 0)
	if (ip_vs_control_net_init(net) < 0)
		goto control_fail;

	if (__ip_vs_protocol_init(net) < 0)
	if (ip_vs_protocol_net_init(net) < 0)
		goto protocol_fail;

	if (__ip_vs_app_init(net) < 0)
	if (ip_vs_app_net_init(net) < 0)
		goto app_fail;

	if (__ip_vs_conn_init(net) < 0)
	if (ip_vs_conn_net_init(net) < 0)
		goto conn_fail;

	if (__ip_vs_sync_init(net) < 0)
	if (ip_vs_sync_net_init(net) < 0)
		goto sync_fail;

	printk(KERN_INFO "IPVS: Creating netns size=%zu id=%d\n",
@@ -1917,27 +1917,27 @@ static int __net_init __ip_vs_init(struct net *net)
 */

sync_fail:
	__ip_vs_conn_cleanup(net);
	ip_vs_conn_net_cleanup(net);
conn_fail:
	__ip_vs_app_cleanup(net);
	ip_vs_app_net_cleanup(net);
app_fail:
	__ip_vs_protocol_cleanup(net);
	ip_vs_protocol_net_cleanup(net);
protocol_fail:
	__ip_vs_control_cleanup(net);
	ip_vs_control_net_cleanup(net);
control_fail:
	__ip_vs_estimator_cleanup(net);
	ip_vs_estimator_net_cleanup(net);
estimator_fail:
	return -ENOMEM;
}

static void __net_exit __ip_vs_cleanup(struct net *net)
{
	__ip_vs_service_cleanup(net);	/* ip_vs_flush() with locks */
	__ip_vs_conn_cleanup(net);
	__ip_vs_app_cleanup(net);
	__ip_vs_protocol_cleanup(net);
	__ip_vs_control_cleanup(net);
	__ip_vs_estimator_cleanup(net);
	ip_vs_service_net_cleanup(net);	/* ip_vs_flush() with locks */
	ip_vs_conn_net_cleanup(net);
	ip_vs_app_net_cleanup(net);
	ip_vs_protocol_net_cleanup(net);
	ip_vs_control_net_cleanup(net);
	ip_vs_estimator_net_cleanup(net);
	IP_VS_DBG(2, "ipvs netns %d released\n", net_ipvs(net)->gen);
}

@@ -1945,7 +1945,7 @@ static void __net_exit __ip_vs_dev_cleanup(struct net *net)
{
	EnterFunction(2);
	net_ipvs(net)->enable = 0;	/* Disable packet reception */
	__ip_vs_sync_cleanup(net);
	ip_vs_sync_net_cleanup(net);
	LeaveFunction(2);
}

@@ -1967,36 +1967,23 @@ static int __init ip_vs_init(void)
{
	int ret;

	ip_vs_estimator_init();
	ret = ip_vs_control_init();
	if (ret < 0) {
		pr_err("can't setup control.\n");
		goto cleanup_estimator;
		goto exit;
	}

	ip_vs_protocol_init();

	ret = ip_vs_app_init();
	if (ret < 0) {
		pr_err("can't setup application helper.\n");
		goto cleanup_protocol;
	}

	ret = ip_vs_conn_init();
	if (ret < 0) {
		pr_err("can't setup connection table.\n");
		goto cleanup_app;
	}

	ret = ip_vs_sync_init();
	if (ret < 0) {
		pr_err("can't setup sync data.\n");
		goto cleanup_conn;
		goto cleanup_protocol;
	}

	ret = register_pernet_subsys(&ipvs_core_ops);	/* Alloc ip_vs struct */
	if (ret < 0)
		goto cleanup_sync;
		goto cleanup_conn;

	ret = register_pernet_device(&ipvs_core_dev_ops);
	if (ret < 0)
@@ -2016,17 +2003,12 @@ static int __init ip_vs_init(void)
	unregister_pernet_device(&ipvs_core_dev_ops);
cleanup_sub:
	unregister_pernet_subsys(&ipvs_core_ops);
cleanup_sync:
	ip_vs_sync_cleanup();
cleanup_conn:
	ip_vs_conn_cleanup();
  cleanup_app:
	ip_vs_app_cleanup();
cleanup_protocol:
	ip_vs_protocol_cleanup();
	ip_vs_control_cleanup();
  cleanup_estimator:
	ip_vs_estimator_cleanup();
exit:
	return ret;
}

@@ -2035,12 +2017,9 @@ static void __exit ip_vs_cleanup(void)
	nf_unregister_hooks(ip_vs_ops, ARRAY_SIZE(ip_vs_ops));
	unregister_pernet_device(&ipvs_core_dev_ops);
	unregister_pernet_subsys(&ipvs_core_ops);	/* free ip_vs struct */
	ip_vs_sync_cleanup();
	ip_vs_conn_cleanup();
	ip_vs_app_cleanup();
	ip_vs_protocol_cleanup();
	ip_vs_control_cleanup();
	ip_vs_estimator_cleanup();
	pr_info("ipvs unloaded.\n");
}

+14 −14
Original line number Diff line number Diff line
@@ -1483,7 +1483,7 @@ static int ip_vs_flush(struct net *net)
 *	Delete service by {netns} in the service table.
 *	Called by __ip_vs_cleanup()
 */
void __ip_vs_service_cleanup(struct net *net)
void ip_vs_service_net_cleanup(struct net *net)
{
	EnterFunction(2);
	/* Check for "full" addressed entries */
@@ -1662,7 +1662,7 @@ proc_do_sync_mode(ctl_table *table, int write,
/*
 *	IPVS sysctl table (under the /proc/sys/net/ipv4/vs/)
 *	Do not change order or insert new entries without
 *	align with netns init in __ip_vs_control_init()
 *	align with netns init in ip_vs_control_net_init()
 */

static struct ctl_table vs_vars[] = {
@@ -3595,7 +3595,7 @@ static void ip_vs_genl_unregister(void)
 * per netns intit/exit func.
 */
#ifdef CONFIG_SYSCTL
int __net_init __ip_vs_control_init_sysctl(struct net *net)
int __net_init ip_vs_control_net_init_sysctl(struct net *net)
{
	int idx;
	struct netns_ipvs *ipvs = net_ipvs(net);
@@ -3654,7 +3654,7 @@ int __net_init __ip_vs_control_init_sysctl(struct net *net)
	return 0;
}

void __net_init __ip_vs_control_cleanup_sysctl(struct net *net)
void __net_init ip_vs_control_net_cleanup_sysctl(struct net *net)
{
	struct netns_ipvs *ipvs = net_ipvs(net);

@@ -3665,8 +3665,8 @@ void __net_init __ip_vs_control_cleanup_sysctl(struct net *net)

#else

int __net_init __ip_vs_control_init_sysctl(struct net *net) { return 0; }
void __net_init __ip_vs_control_cleanup_sysctl(struct net *net) { }
int __net_init ip_vs_control_net_init_sysctl(struct net *net) { return 0; }
void __net_init ip_vs_control_net_cleanup_sysctl(struct net *net) { }

#endif

@@ -3674,7 +3674,7 @@ static struct notifier_block ip_vs_dst_notifier = {
	.notifier_call = ip_vs_dst_event,
};

int __net_init __ip_vs_control_init(struct net *net)
int __net_init ip_vs_control_net_init(struct net *net)
{
	int idx;
	struct netns_ipvs *ipvs = net_ipvs(net);
@@ -3702,7 +3702,7 @@ int __net_init __ip_vs_control_init(struct net *net)
	proc_net_fops_create(net, "ip_vs_stats_percpu", 0,
			     &ip_vs_stats_percpu_fops);

	if (__ip_vs_control_init_sysctl(net))
	if (ip_vs_control_net_init_sysctl(net))
		goto err;

	return 0;
@@ -3712,13 +3712,13 @@ int __net_init __ip_vs_control_init(struct net *net)
	return -ENOMEM;
}

void __net_exit __ip_vs_control_cleanup(struct net *net)
void __net_exit ip_vs_control_net_cleanup(struct net *net)
{
	struct netns_ipvs *ipvs = net_ipvs(net);

	ip_vs_trash_cleanup(net);
	ip_vs_stop_estimator(net, &ipvs->tot_stats);
	__ip_vs_control_cleanup_sysctl(net);
	ip_vs_control_net_cleanup_sysctl(net);
	proc_net_remove(net, "ip_vs_stats_percpu");
	proc_net_remove(net, "ip_vs_stats");
	proc_net_remove(net, "ip_vs");
Loading