ACK On 12/3/2012 12:13 PM, Jan Friesse wrote: > Default is ipv4. > > Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx> > --- > exec/coroparse.c | 8 ++++++++ > exec/main.c | 9 +++++++-- > exec/totemconfig.c | 27 ++++++++++++++++++++------- > include/corosync/totem/totem.h | 2 ++ > man/corosync.conf.5 | 6 ++++++ > 5 files changed, 43 insertions(+), 9 deletions(-) > > diff --git a/exec/coroparse.c b/exec/coroparse.c > index fceafa8..d5a50bb 100644 > --- a/exec/coroparse.c > +++ b/exec/coroparse.c > @@ -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) && > diff --git a/exec/main.c b/exec/main.c > index 7d74bf3..abd8fbd 100644 > --- a/exec/main.c > +++ b/exec/main.c > @@ -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; > diff --git a/exec/totemconfig.c b/exec/totemconfig.c > index e1badad..fc833f5 100644 > --- a/exec/totemconfig.c > +++ b/exec/totemconfig.c > @@ -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); > diff --git a/include/corosync/totem/totem.h b/include/corosync/totem/totem.h > index 384d5b0..7ef8652 100644 > --- a/include/corosync/totem/totem.h > +++ b/include/corosync/totem/totem.h > @@ -181,6 +181,8 @@ struct totem_config { > totem_transport_t transport_number; > > unsigned int miss_count_const; > + > + int ip_version; > }; > > #define TOTEM_CONFIGURATION_TYPE > diff --git a/man/corosync.conf.5 b/man/corosync.conf.5 > index 8c353ec..43a339b 100644 > --- a/man/corosync.conf.5 > +++ b/man/corosync.conf.5 > @@ -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 > _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss