Hi!

I have not investigated if a similar problem exists with IPv6 addresses. 
If you have time, please go ahead and try it!

thanks,

Anders Widell

On 08/05/2016 06:38 AM, A V Mahesh wrote:
> Hi Anders Widell,
>
> Did you verified IP6 or you want me to test ?
>
> -AVM
>
>
> On 8/4/2016 2:22 PM, Anders Widell wrote:
>> osaf/services/infrastructure/dtms/dtm/dtm_read_config.c |  36 
>> +++++++++++++++-
>>   1 files changed, 32 insertions(+), 4 deletions(-)
>>
>>
>> The IPv4 broadcast address is sometimes not configured when running 
>> in some
>> container environments (e.g. docker). In these cases, derive the 
>> broadcast
>> address from the IPv4 address and netmask.
>>
>> diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c 
>> b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
>> --- a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
>> +++ b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
>> @@ -15,10 +15,15 @@
>>    *
>>    */
>>   +#include <arpa/inet.h>
>> +#include <ifaddrs.h>
>> +#include <inttypes.h>
>>   #include <net/if.h>
>> -#include <arpa/inet.h>
>> +#include <netinet/in.h>
>> +#include <netinet/ip.h>
>> +#include <sys/socket.h>
>>   #include <configmake.h>
>> -#include <ifaddrs.h>
>> +#include "logtrace.h"
>>   #include "ncs_main_papi.h"
>>   #include "dtm.h"
>>   #include "dtm_socket.h"
>> @@ -162,8 +167,31 @@ char *dtm_validate_listening_ip_addr(DTM
>>                     //Bcast  Address
>>                   if (if_addr->ifa_addr->sa_family == AF_INET) {
>> -                    tmp = &((struct sockaddr_in 
>> *)if_addr->ifa_broadaddr)->sin_addr;
>> - inet_ntop(if_addr->ifa_addr->sa_family, tmp, 
>> config->bcast_addr,sizeof(buf));
>> +                    struct in_addr addr =
>> +                        ((struct sockaddr_in*) if_addr->
>> +                         ifa_addr)->sin_addr;
>> +                    struct in_addr netmask =
>> +                        ((struct sockaddr_in*) if_addr->
>> +                         ifa_netmask)->sin_addr;
>> +                    struct in_addr broadaddr =
>> +                        ((struct sockaddr_in*) if_addr->
>> +                         ifa_broadaddr)->sin_addr;
>> +                    TRACE("DTM: addr=0x%" PRIx32,
>> +                          ntohl(addr.s_addr));
>> +                    TRACE("DTM: netmask=0x%" PRIx32,
>> +                          ntohl(netmask.s_addr));
>> +                    TRACE("DTM: broadaddr=0x%" PRIx32,
>> +                          ntohl(broadaddr.s_addr));
>> +                    if (broadaddr.s_addr == addr.s_addr ||
>> +                        broadaddr.s_addr ==
>> +                        htonl(INADDR_ANY)) {
>> +                        broadaddr.s_addr = addr.s_addr |
>> +                            ~netmask.s_addr;
>> +                    }
>> + inet_ntop(if_addr->ifa_addr->sa_family,
>> +                          &broadaddr,
>> +                          config->bcast_addr,
>> +                          sizeof(buf));
>>                   } else if (if_addr->ifa_addr->sa_family == AF_INET6) {
>>                       struct sockaddr_in6 *addr = (struct 
>> sockaddr_in6 *)if_addr->ifa_addr;
>>                       memset(config->bcast_addr, 0, INET6_ADDRSTRLEN);
>


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to