diff -ur a/luci/cluster/cluster_config-macros b/luci/cluster/cluster_config-macros --- a/luci/cluster/cluster_config-macros 2010-08-31 16:23:09.000000000 -0400 +++ b/luci/cluster/cluster_config-macros 2010-08-31 16:57:22.000000000 -0400 @@ -608,7 +608,14 @@ </tal:block> </td> </tr> - + <tr class="systemsTable" + tal:condition="python:os_version != 'rhel4'"> + <td class="systemsTable"> + <input type="radio" name="mcast" value="broadcast" + onclick="disable_mcast('mcast_address', 'mcast_interface')" + tal:attributes="checked python: clusterinfo['is_bcast'] == 'True'"/>Use broadcast + </td> + </tr> <tr class="systemsTable"> <td class="systemsTable"> Multicast address diff -ur a/luci/cluster/validate_config_multicast.js b/luci/cluster/validate_config_multicast.js --- a/luci/cluster/validate_config_multicast.js 2010-08-31 16:23:09.000000000 -0400 +++ b/luci/cluster/validate_config_multicast.js 2010-08-31 17:22:00.000000000 -0400 @@ -56,6 +56,8 @@ mcast = 0; else if (form.mcast.length > 1 && form.mcast[1].checked) mcast = 1; + else if (form.mcast[2].checked) + mcast = null; else { errors.push('An invalid value was given while specifying how the multicast address should be chosen.'); set_form_err(form.mcast[0]); diff -ur a/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py b/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py --- a/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2010-08-31 16:23:09.000000000 -0400 +++ b/luci/site/luci/Extensions/ClusterModel/ModelBuilder.py 2010-08-31 16:45:04.000000000 -0400 @@ -1020,6 +1020,25 @@ node.removeChild(node_child) break + def set_cluster_broadcast(self): + if self.del_cluster_multicast() is False: + return False + broadcast = self.CMAN_ptr.addAttribute('broadcast', 'yes') + + def del_cluster_broadcast(self): + if self.CMAN_ptr is None: + return False + self.CMAN_ptr.removeAttribute('broadcast') + self.isModified = True + + def get_cluster_broadcast(self): + if self.CMAN_ptr is None: + return False + broadcast = self.CMAN_ptr.getAttribute('broadcast') + if broadcast and broadcast.lower() in ('1', 'true', 'yes'): + return True + return False + def del_cluster_multicast(self): if self.CMAN_ptr is None: return False diff -ur a/luci/site/luci/Extensions/LuciClusterInfo.py b/luci/site/luci/Extensions/LuciClusterInfo.py --- a/luci/site/luci/Extensions/LuciClusterInfo.py 2010-08-31 16:23:09.000000000 -0400 +++ b/luci/site/luci/Extensions/LuciClusterInfo.py 2010-08-31 16:59:55.000000000 -0400 @@ -682,6 +682,10 @@ clumap['pfd'] = pfd clumap['skip_undefined'] = fdp.getSkipUndefined() + if model.get_cluster_broadcast() is True: + clumap['is_bcast'] = 'True' + else: + clumap['is_bcast'] = 'False' #------------- #if multicast multicast_url = '%stab=%s' % (prop_baseurl, PROP_MCAST_TAB) diff -ur a/luci/site/luci/Extensions/LuciValidation.py b/luci/site/luci/Extensions/LuciValidation.py --- a/luci/site/luci/Extensions/LuciValidation.py 2010-08-31 16:23:09.000000000 -0400 +++ b/luci/site/luci/Extensions/LuciValidation.py 2010-08-31 17:13:43.000000000 -0400 @@ -663,16 +663,21 @@ errors = list() try: mcast_val = form['mcast'].strip().lower() - if mcast_val != 'true' and mcast_val != 'false': + if mcast_val not in ('true', 'false', 'broadcast'): raise KeyError, mcast_val if mcast_val == 'true': mcast_manual = True - else: + elif mcast_val == 'false': mcast_manual = False + elif mcast_val == 'broadcast': + model.del_cluster_multicast() + model.set_cluster_broadcast() + return (True, {}) except KeyError, e: errors.append('An invalid multicast selection was made') return (False, {'errors': errors}) + model.del_cluster_broadcast() mcast_interface = None if form.has_key('mcast_interface'): mcast_interface = form['mcast_interface'].strip()