ACK

Chrissie

On 10/11/14 16:53, Jan Friesse wrote:
When using multiple interfaces, it's necessary to use different
multicast address/port pair for each interface to make
rrp work correctly. This is now checked in parser.

Signed-off-by: Jan Friesse <[email protected]>
---
  exec/totemconfig.c  |   19 ++++++++++++++++++-
  man/corosync.conf.5 |    4 ++++
  2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/exec/totemconfig.c b/exec/totemconfig.c
index cab21fb..5d6eebc 100644
--- a/exec/totemconfig.c
+++ b/exec/totemconfig.c
@@ -474,8 +474,9 @@ int totem_config_validate (
        static char local_error_reason[512];
        char parse_error[512];
        const char *error_reason = local_error_reason;
-       int i;
+       int i, j;
        unsigned int interface_max = INTERFACE_MAX;
+       unsigned int port1, port2;

        if (totem_config->interface_count == 0) {
                error_reason = "No interfaces defined";
@@ -535,6 +536,22 @@ int totem_config_validate (
                        error_reason =  "Not all bind address belong to the same IP 
family";
                        goto parse_error;
                }
+
+               /*
+                * Ensure mcast address/port differs
+                */
+               if (totem_config->transport_number == TOTEM_TRANSPORT_UDP) {
+                       for (j = i + 1; j < totem_config->interface_count; j++) 
{
+                               port1 = totem_config->interfaces[i].ip_port;
+                               port2 = totem_config->interfaces[j].ip_port;
+                               if 
(totemip_equal(&totem_config->interfaces[i].mcast_addr,
+                                   &totem_config->interfaces[j].mcast_addr) &&
+                                   (((port1 > port2 ? port1 : port2)  - (port1 < 
port2 ? port1 : port2)) <= 1)) {
+                                       error_reason = "Interfaces multicast 
address/port pair must differ";
+                                       goto parse_error;
+                               }
+                       }
+               }
        }

        if (totem_config->version != 2) {
diff --git a/man/corosync.conf.5 b/man/corosync.conf.5
index a2c8000..8bafae3 100644
--- a/man/corosync.conf.5
+++ b/man/corosync.conf.5
@@ -218,6 +218,10 @@ If only one interface directive is specified, none is 
automatically chosen.
  If multiple interface directives are specified, only active or passive may
  be chosen.

+When using multiple interfaces, make sure to use different multicast
+address/port (port for same address must differ by at least two) pair
+for each interface (this is checked by parser) to make rrp works.
+
  .TP
  netmtu
  This specifies the network maximum transmit unit.  To set this value beyond


_______________________________________________
discuss mailing list
[email protected]
http://lists.corosync.org/mailman/listinfo/discuss

Reply via email to