mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-08-15 07:40:55 +00:00
Add cluster_name option
Option is used for automatic generating of multicast address. If both cluster_name and mcastaddr options are specified, mcastaddr takes precedence. Signed-off-by: Jan Friesse <jfriesse@redhat.com> Reviewed-by: Steven Dake <sdake@redhat.com>
This commit is contained in:
parent
74619e9550
commit
07e58e111a
@ -158,6 +158,55 @@ static void totem_get_crypto_type(struct totem_config *totem_config)
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t generate_cluster_id (const char *cluster_name)
|
||||
{
|
||||
int i;
|
||||
int value = 0;
|
||||
|
||||
for (i = 0; i < strlen(cluster_name); i++) {
|
||||
value <<= 1;
|
||||
value += cluster_name[i];
|
||||
}
|
||||
|
||||
return (value & 0xFFFF);
|
||||
}
|
||||
|
||||
static int get_cluster_mcast_addr (
|
||||
const char *cluster_name,
|
||||
const struct totem_ip_address *bindnet,
|
||||
unsigned int ringnumber,
|
||||
struct totem_ip_address *res)
|
||||
{
|
||||
uint16_t clusterid;
|
||||
char addr[INET6_ADDRSTRLEN + 1];
|
||||
int err;
|
||||
|
||||
if (cluster_name == NULL) {
|
||||
return (-1);
|
||||
}
|
||||
|
||||
clusterid = generate_cluster_id(cluster_name) + ringnumber;
|
||||
memset (res, 0, sizeof(res));
|
||||
|
||||
switch (bindnet->family) {
|
||||
case AF_INET:
|
||||
snprintf(addr, sizeof(addr), "239.192.%d.%d", clusterid >> 8, clusterid % 0xFF);
|
||||
break;
|
||||
case AF_INET6:
|
||||
snprintf(addr, sizeof(addr), "ff15::%x", clusterid);
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* Unknown family
|
||||
*/
|
||||
return (-1);
|
||||
}
|
||||
|
||||
err = totemip_parse (res, addr, 0);
|
||||
|
||||
return (err);
|
||||
}
|
||||
|
||||
extern int totem_config_read (
|
||||
struct totem_config *totem_config,
|
||||
const char **error_string)
|
||||
@ -172,6 +221,7 @@ extern int totem_config_read (
|
||||
char ringnumber_key[ICMAP_KEYNAME_MAXLEN];
|
||||
char tmp_key[ICMAP_KEYNAME_MAXLEN];
|
||||
uint8_t u8;
|
||||
char *cluster_name = NULL;
|
||||
|
||||
memset (totem_config, 0, sizeof (struct totem_config));
|
||||
totem_config->interfaces = malloc (sizeof (struct totem_interface) * INTERFACE_MAX);
|
||||
@ -225,6 +275,8 @@ extern int totem_config_read (
|
||||
|
||||
icmap_get_uint32("totem.netmtu", &totem_config->net_mtu);
|
||||
|
||||
icmap_get_string("totem.cluster_name", &cluster_name);
|
||||
|
||||
/*
|
||||
* Get things that might change in the future
|
||||
*/
|
||||
@ -261,6 +313,15 @@ extern int totem_config_read (
|
||||
if (icmap_get_string(tmp_key, &str) == CS_OK) {
|
||||
res = totemip_parse (&totem_config->interfaces[ringnumber].mcast_addr, str, 0);
|
||||
free(str);
|
||||
} else {
|
||||
/*
|
||||
* User not specified address -> autogenerate one from cluster_name key
|
||||
* (if available)
|
||||
*/
|
||||
res = get_cluster_mcast_addr (cluster_name,
|
||||
&totem_config->interfaces[ringnumber].bindnet,
|
||||
ringnumber,
|
||||
&totem_config->interfaces[ringnumber].mcast_addr);
|
||||
}
|
||||
|
||||
totem_config->broadcast_use = 0;
|
||||
@ -319,6 +380,8 @@ extern int totem_config_read (
|
||||
free(str);
|
||||
}
|
||||
|
||||
free(cluster_name);
|
||||
|
||||
add_totem_config_notification(totem_config);
|
||||
|
||||
return 0;
|
||||
|
@ -117,6 +117,9 @@ multicast address.
|
||||
This may also be an IPV6 multicast address, in which case IPV6 networking
|
||||
will be used. If IPv6 networking is used, the nodeid field must be specified.
|
||||
|
||||
It's not needed to use this option if cluster_name option is used. If both options
|
||||
are used, mcastaddr has higher priority.
|
||||
|
||||
.TP
|
||||
mcastport
|
||||
This specifies the UDP port number. It is possible to use the same multicast
|
||||
@ -269,6 +272,11 @@ deployment.
|
||||
|
||||
The default is udp. The transport type can also be set to udpu or iba.
|
||||
|
||||
.TP
|
||||
cluster_name
|
||||
This specifies the name of cluster and it's used for automatic generating
|
||||
of multicast address.
|
||||
|
||||
Within the
|
||||
.B totem
|
||||
directive, there are several configuration options which are used to control
|
||||
|
Loading…
Reference in New Issue
Block a user