Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions ydb/library/actors/interconnect/interconnect_address.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@
#include <sys/stat.h>
#endif

#if defined(__APPLE__) || defined(_darwin_)
/* OSX seems not to define these. */
#ifndef s6_addr16
#define s6_addr16 __u6_addr.__u6_addr16
#endif
#ifndef s6_addr32
#define s6_addr32 __u6_addr.__u6_addr32
#endif
#endif

namespace NInterconnect {
TAddress::TAddress() {
memset(&Addr, 0, sizeof(Addr));
Expand Down Expand Up @@ -104,28 +114,30 @@ namespace NInterconnect {
return p ? TString(p) : TString();
}

TAddress::TV6Addr TAddress::GetV6CompatAddr() const {
switch (GetFamily()) {
#if not defined(_win32_)
TAddress::TV6Addr GetV6CompatAddr(const NInterconnect::TAddress& a) noexcept {
switch (a.GetFamily()) {
case AF_INET: {
TV6Addr addr;
TAddress::TV6Addr addr;
addr.s6_addr16[0] = 0;
addr.s6_addr16[1] = 0;
addr.s6_addr16[2] = 0;
addr.s6_addr16[3] = 0;
addr.s6_addr16[4] = 0;
addr.s6_addr16[5] = Max<ui16>();
addr.s6_addr16[6] = Max<ui16>();
addr.s6_addr32[3] = Addr.Ipv4.sin_addr.s_addr;
addr.s6_addr32[3] = a.Addr.Ipv4.sin_addr.s_addr;
return addr;
}
case AF_INET6:
return Addr.Ipv6.sin6_addr;
return a.Addr.Ipv6.sin6_addr;
default: {
TV6Addr addr;
TAddress::TV6Addr addr;
memset(&addr, 0, sizeof(addr));
return addr;
}
break;
}
}
#endif
}
8 changes: 5 additions & 3 deletions ydb/library/actors/interconnect/interconnect_address.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@

namespace NInterconnect {
class TAddress {
public:
union {
sockaddr Generic;
sockaddr_in Ipv4;
sockaddr_in6 Ipv6;
} Addr;

public:
using TV6Addr = in6_addr;
TAddress();
TAddress(const char* addr, ui16 port);
Expand Down Expand Up @@ -44,7 +44,9 @@ namespace NInterconnect {
res.Addr.Ipv6.sin6_addr = in6addr_any;
return res;
}

TV6Addr GetV6CompatAddr() const;
};

#if not defined(_win32_)
TAddress::TV6Addr GetV6CompatAddr(const TAddress& a) noexcept;
#endif
}
2 changes: 1 addition & 1 deletion ydb/library/actors/interconnect/rdma/ut/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ std::tuple<THolder<NActors::TTestActorRuntimeBase>, TRdmaCtx*> PrepareTestRuntim
TString ip = env ?: defIp;

NInterconnect::TAddress address(ip, 7777);
auto ctx = NInterconnect::NRdma::NLinkMgr::GetCtx(address.GetV6CompatAddr());
auto ctx = NInterconnect::NRdma::NLinkMgr::GetCtx(GetV6CompatAddr(address));
RDMA_UT_EXPECT_TRUE(ctx);
Cerr << "Using verbs context: " << *ctx << ", on addr: " << ip << Endl;

Expand Down
Loading