Add option to specify ip version

Default is ipv4.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
This commit is contained in:
Jan Friesse 2012-12-03 11:42:05 +01:00
parent 92e0f9c7bb
commit dd588d004e
5 changed files with 43 additions and 9 deletions

View File

@ -501,6 +501,14 @@ static int main_config_parser_cb(const char *path,
icmap_set_uint64(path, ull);
add_as_string = 0;
}
if (strcmp(path, "totem.ip_version") == 0) {
if ((strcmp(value, "ipv4") != 0) &&
(strcmp(value, "ipv6") != 0)) {
*error_string = "Invalid ip_version type";
return (0);
}
}
if (strcmp(path, "totem.crypto_type") == 0) {
if ((strcmp(value, "nss") != 0) &&
(strcmp(value, "aes256") != 0) &&

View File

@ -154,6 +154,8 @@ static corosync_timer_handle_t corosync_stats_timer_handle;
static const char *corosync_lock_file = LOCALSTATEDIR"/run/corosync.pid";
static int ip_version = AF_INET;
qb_loop_t *cs_poll_handle_get (void)
{
return (corosync_poll_handle);
@ -592,7 +594,7 @@ static void totem_dynamic_notify(
if (remove_old_member) {
log_printf(LOGSYS_LEVEL_DEBUG,
"removing dynamic member %s for ring %u", (char *)old_val.data, ring_no);
if (totemip_parse(&member, (char *)old_val.data, 0) == 0) {
if (totemip_parse(&member, (char *)old_val.data, ip_version) == 0) {
totempg_member_remove (&member, ring_no);
}
}
@ -600,7 +602,7 @@ static void totem_dynamic_notify(
if (add_new_member) {
log_printf(LOGSYS_LEVEL_DEBUG,
"adding dynamic member %s for ring %u", (char *)new_val.data, ring_no);
if (totemip_parse(&member, (char *)new_val.data, 0) == 0) {
if (totemip_parse(&member, (char *)new_val.data, ip_version) == 0) {
totempg_member_add (&member, ring_no);
}
}
@ -913,6 +915,7 @@ static void set_icmap_ro_keys_flag (void)
icmap_set_ro_access("totem.crypto_hash", CS_FALSE, CS_TRUE);
icmap_set_ro_access("totem.crypto_compat", CS_FALSE, CS_TRUE);
icmap_set_ro_access("totem.secauth", CS_FALSE, CS_TRUE);
icmap_set_ro_access("totem.ip_version", CS_FALSE, CS_TRUE);
icmap_set_ro_access("totem.rrp_mode", CS_FALSE, CS_TRUE);
icmap_set_ro_access("totem.netmtu", CS_FALSE, CS_TRUE);
icmap_set_ro_access("qb.ipc_type", CS_FALSE, CS_TRUE);
@ -1177,6 +1180,8 @@ int main (int argc, char **argv, char **envp)
corosync_exit_error (COROSYNC_DONE_MAINCONFIGREAD);
}
ip_version = totem_config.ip_version;
totem_config.totem_logging_configuration = totem_logging_configuration;
totem_config.totem_logging_configuration.log_subsys_id = _logsys_subsys_create("TOTEM", "totem");
totem_config.totem_logging_configuration.log_level_security = LOGSYS_LEVEL_WARNING;

View File

@ -210,6 +210,7 @@ static int get_cluster_mcast_addr (
const char *cluster_name,
const struct totem_ip_address *bindnet,
unsigned int ringnumber,
int ip_version,
struct totem_ip_address *res)
{
uint16_t clusterid;
@ -237,7 +238,7 @@ static int get_cluster_mcast_addr (
return (-1);
}
err = totemip_parse (res, addr, 0);
err = totemip_parse (res, addr, ip_version);
return (err);
}
@ -278,7 +279,7 @@ static int find_local_node_in_nodelist(struct totem_config *totem_config)
continue;
}
res = totemip_parse (&node_addr, node_addr_str, 0);
res = totemip_parse (&node_addr, node_addr_str, totem_config->ip_version);
free(node_addr_str);
if (res == -1) {
continue ;
@ -331,7 +332,7 @@ static void put_nodelist_members_to_config(struct totem_config *totem_config)
member_count = totem_config->interfaces[ringnumber].member_count;
res = totemip_parse(&totem_config->interfaces[ringnumber].member_list[member_count],
node_addr_str, 0);
node_addr_str, totem_config->ip_version);
if (res != -1) {
totem_config->interfaces[ringnumber].member_count++;
}
@ -379,7 +380,7 @@ static void config_convert_nodelist_to_interface(struct totem_config *totem_conf
continue ;
}
if (totemip_parse(&node_addr, node_addr_str, 0) == -1) {
if (totemip_parse(&node_addr, node_addr_str, totem_config->ip_version) == -1) {
free(node_addr_str);
continue ;
}
@ -490,6 +491,17 @@ extern int totem_config_read (
icmap_get_string("totem.cluster_name", &cluster_name);
totem_config->ip_version = AF_INET;
if (icmap_get_string("totem.ip_version", &str) == CS_OK) {
if (strcmp(str, "ipv4") == 0) {
totem_config->ip_version = AF_INET;
}
if (strcmp(str, "ipv6") == 0) {
totem_config->ip_version = AF_INET6;
}
free(str);
}
/*
* Get things that might change in the future
*/
@ -542,7 +554,7 @@ extern int totem_config_read (
*/
snprintf(tmp_key, ICMAP_KEYNAME_MAXLEN, "totem.interface.%u.mcastaddr", ringnumber);
if (icmap_get_string(tmp_key, &str) == CS_OK) {
res = totemip_parse (&totem_config->interfaces[ringnumber].mcast_addr, str, 0);
res = totemip_parse (&totem_config->interfaces[ringnumber].mcast_addr, str, totem_config->ip_version);
free(str);
} else {
/*
@ -552,6 +564,7 @@ extern int totem_config_read (
res = get_cluster_mcast_addr (cluster_name,
&totem_config->interfaces[ringnumber].bindnet,
ringnumber,
totem_config->ip_version,
&totem_config->interfaces[ringnumber].mcast_addr);
}
@ -562,7 +575,7 @@ extern int totem_config_read (
totem_config->broadcast_use = 1;
totemip_parse (
&totem_config->interfaces[ringnumber].mcast_addr,
"255.255.255.255", 0);
"255.255.255.255", totem_config->ip_version);
}
free(str);
}
@ -605,7 +618,7 @@ extern int totem_config_read (
if (icmap_get_string(member_iter_key, &str) == CS_OK) {
res = totemip_parse (&totem_config->interfaces[ringnumber].member_list[member_count++],
str, 0);
str, totem_config->ip_version);
}
}
icmap_iter_finalize(member_iter);

View File

@ -181,6 +181,8 @@ struct totem_config {
totem_transport_t transport_number;
unsigned int miss_count_const;
int ip_version;
};
#define TOTEM_CONFIGURATION_TYPE

View File

@ -287,6 +287,12 @@ from single-node membership to multiple nodes membership, other nodes
config_versions are collected. If current node config_version is not
equal to highest of collected versions, corosync is terminated.
.TP
ip_version
Specifies version of IP to use for communication. Value can be one of
ipv4 or ipv6. Default (if unspecified) is ipv4.
Within the
.B totem
directive, there are several configuration options which are used to control