Skip to content

Commit

Permalink
vrrp: dont try to load ip_vs module when not needed
Browse files Browse the repository at this point in the history
Add some logic around to not load ip_vs module when VRRP conf
dont need it (eg: lvs_sync_daemon_interface").
  • Loading branch information
acassen committed Jan 28, 2014
1 parent bcd86e6 commit 6d88c3e
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 15 deletions.
1 change: 1 addition & 0 deletions keepalived/include/vrrp.h
Expand Up @@ -238,6 +238,7 @@ extern void vrrp_state_goto_master(vrrp_t *);
extern void vrrp_state_leave_master(vrrp_t *);
extern int vrrp_ipsecah_len(void);
extern int vrrp_complete_init(void);
extern int vrrp_ipvs_needed(void);
extern void shutdown_vrrp_instances(void);
extern void clear_diff_vrrp(void);
extern void clear_diff_script(void);
Expand Down
19 changes: 19 additions & 0 deletions keepalived/vrrp/vrrp.c
Expand Up @@ -1262,6 +1262,25 @@ vrrp_complete_init(void)
return 1;
}

int
vrrp_ipvs_needed(void)
{
vrrp_t *vrrp;
element e;

if (!vrrp_data)
return 0;

for (e = LIST_HEAD(vrrp_data->vrrp); e; ELEMENT_NEXT(e)) {
vrrp = ELEMENT_DATA(e);
if (vrrp->lvs_syncd_if) {
return 1;
}
}

return 0;
}

/* Try to find a VRRP instance */
static vrrp_t *
vrrp_exist(vrrp_t * old_vrrp)
Expand Down
39 changes: 24 additions & 15 deletions keepalived/vrrp/vrrp_daemon.c
Expand Up @@ -75,17 +75,19 @@ stop_vrrp(void)
/* Stop daemon */
pidfile_rm(vrrp_pidfile);

#ifdef _WITH_LVS_
if (vrrp_ipvs_needed()) {
/* Clean ipvs related */
ipvs_stop();
}
#endif

/* Clean data */
free_global_data(global_data);
free_vrrp_sockpool(vrrp_data);
free_vrrp_data(vrrp_data);
free_vrrp_buffer();

#ifdef _WITH_LVS_
/* Clean ipvs related */
ipvs_stop();
#endif

#ifdef _DEBUG_
keepalived_free_final("VRRP Child process");
#endif
Expand All @@ -112,10 +114,6 @@ start_vrrp(void)
vrrp_snmp_agent_init();
#endif

#ifdef _WITH_LVS_
/* Initialize ipvs related */
ipvs_start();
#endif
/* Parse configuration file */
global_data = alloc_global_data();
vrrp_data = alloc_vrrp_data();
Expand All @@ -126,6 +124,13 @@ start_vrrp(void)
return;
}

#ifdef _WITH_LVS_
if (vrrp_ipvs_needed()) {
/* Initialize ipvs related */
ipvs_start();
}
#endif

if (reload) {
clear_diff_saddresses();
clear_diff_sroutes();
Expand All @@ -135,7 +140,9 @@ start_vrrp(void)

/* Complete VRRP initialization */
if (!vrrp_complete_init()) {
stop_vrrp();
if (vrrp_ipvs_needed()) {
stop_vrrp();
}
return;
}

Expand Down Expand Up @@ -207,15 +214,17 @@ reload_vrrp_thread(thread_t * thread)
gratuitous_arp_close();
ndisc_close();

#ifdef _WITH_LVS_
if (vrrp_ipvs_needed()) {
/* Clean ipvs related */
ipvs_stop();
}
#endif

/* Save previous conf data */
old_vrrp_data = vrrp_data;
vrrp_data = NULL;

#ifdef _WITH_LVS_
/* Clean ipvs related */
ipvs_stop();
#endif

/* Reload the conf */
mem_allocated = 0;
vrrp_signal_init();
Expand Down

0 comments on commit 6d88c3e

Please sign in to comment.