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