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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel