IIRC we added similar checks to cman when cman was configuring corosync.

It might make sense to just skim all over cman{pre,}config and verify
that we didn“t miss other sanity checks.

Fabio

On 11/10/2014 5:53 PM, 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