This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
cluster: master - cman: Add broadcast option
- From: Christine Caulfield <chrissie at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Wed, 27 May 2009 13:20:02 +0000 (UTC)
- Subject: cluster: master - cman: Add broadcast option
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=ff00108e7d1ac7d8f5e211081a2e9ddc4670371d
Commit: ff00108e7d1ac7d8f5e211081a2e9ddc4670371d
Parent: bd6b6c98d717447b4f1cc6746cd19929bc8352fb
Author: Christine Caulfield <ccaulfie@redhat.com>
AuthorDate: Wed May 27 14:19:43 2009 +0100
Committer: Christine Caulfield <ccaulfie@redhat.com>
CommitterDate: Wed May 27 14:19:43 2009 +0100
cman: Add broadcast option
Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
---
cman/config/cman-preconfig.c | 27 ++++++++++++++++++++++-----
cman/services/cman/lib/libcman.c | 6 +++++-
2 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/cman/config/cman-preconfig.c b/cman/config/cman-preconfig.c
index 91a914b..2b98410 100644
--- a/cman/config/cman-preconfig.c
+++ b/cman/config/cman-preconfig.c
@@ -239,7 +239,7 @@ static int sum_expected(struct objdb_iface_ver0 *objdb)
return vote_sum;
}
-static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr, int portnum)
+static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr, int portnum, int broadcast)
{
hdb_handle_t totem_object_handle;
hdb_handle_t find_handle;
@@ -288,8 +288,12 @@ static int add_ifaddr(struct objdb_iface_ver0 *objdb, char *mcast, char *ifaddr,
objdb->object_key_create(interface_object_handle, "bindnetaddr", strlen("bindnetaddr"),
tmp, strlen(tmp)+1);
- objdb->object_key_create(interface_object_handle, "mcastaddr", strlen("mcastaddr"),
- mcast, strlen(mcast)+1);
+ if (broadcast)
+ objdb->object_key_create(interface_object_handle, "broadcast", strlen("broadcast"),
+ "yes", strlen("yes")+1);
+ else
+ objdb->object_key_create(interface_object_handle, "mcastaddr", strlen("mcastaddr"),
+ mcast, strlen(mcast)+1);
sprintf(tmp, "%d", portnum);
objdb->object_key_create(interface_object_handle, "mcastport", strlen("mcastport"),
@@ -532,6 +536,8 @@ static int get_nodename(struct objdb_iface_ver0 *objdb)
hdb_handle_t find_handle;
hdb_handle_t node_object_handle;
hdb_handle_t alt_object;
+ int broadcast = 0;
+ char *str;
int error;
if (!getenv("CMAN_NOCONFIG")) {
@@ -622,7 +628,18 @@ static int get_nodename(struct objdb_iface_ver0 *objdb)
objdb_get_int(objdb, object_handle, "port", &portnum, DEFAULT_PORT);
}
- if (add_ifaddr(objdb, mcast_name, nodename, portnum))
+ /* Check for broadcast */
+ if (!objdb_get_string(objdb, object_handle, "broadcast", &str)) {
+ if (strcmp(str, "yes") == 0) {
+ mcast_name = strdup("255.255.255.255");
+ if (!mcast_name)
+ return -1;
+ broadcast = 1;
+ }
+ free(str);
+ }
+
+ if (add_ifaddr(objdb, mcast_name, nodename, portnum, broadcast))
return -1;
/* Get all alternative node names */
@@ -643,7 +660,7 @@ static int get_nodename(struct objdb_iface_ver0 *objdb)
mcast = mcast_name;
}
- if (add_ifaddr(objdb, mcast, nodename, portnum))
+ if (add_ifaddr(objdb, mcast, nodename, portnum, broadcast))
return -1;
num_nodenames++;
diff --git a/cman/services/cman/lib/libcman.c b/cman/services/cman/lib/libcman.c
index d03238f..6381018 100644
--- a/cman/services/cman/lib/libcman.c
+++ b/cman/services/cman/lib/libcman.c
@@ -1245,7 +1245,11 @@ int cman_get_extra_info(cman_handle_t handle, cman_extra_info_t *info, int maxle
info->ei_num_addresses = 1;
ccs_handle = ccs_connect();
- if (!ccs_get(ccs_handle, "/totem/interface/@mcastaddr", &value)) {
+ if (!ccs_get(ccs_handle, "/totem/interface/@broadcast", &value)) {
+ strcpy(info->ei_addresses, "255.255.255.255");
+ free(value);
+ }
+ else if (!ccs_get(ccs_handle, "/totem/interface/@mcastaddr", &value)) {
strcpy(info->ei_addresses, value);
free(value);
}