MCPcopy Create free account
hub / github.com/catboost/catboost / ConnectPeer

Method ConnectPeer

library/cpp/netliba/v12/ib_cs.cpp:700–746  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

698 return rv;
699 }
700 IIBPeer* ConnectPeer(const TIBConnectInfo& info, const TUdpAddress& peerAddr, const TUdpAddress& myAddr) override {
701 for (auto& channel : Channels) {
702 TIntrusivePtr<TIBPeer> peer = channel.second;
703 if (peer->PeerAddress == peerAddr) {
704 return peer.Get();
705 }
706 }
707 TIntrusivePtr<TRCQueuePair> rcQP;
708 rcQP = new TRCQueuePair(Port->GetCtx(), CQ, BP.GetSRQ(), QP_SEND_QUEUE_SIZE);
709
710 int qpn = rcQP->GetQPN();
711 Y_ASSERT(Channels.find(qpn) == Channels.end());
712 TIntrusivePtr<TIBPeer>& peer = Channels[qpn];
713 peer = new TIBPeer(peerAddr, rcQP);
714
715 TCmdHandshake handshake;
716 handshake.Command = CMD_HANDSHAKE;
717 handshake.PSN = rcQP->GetPSN();
718 handshake.QPN = rcQP->GetQPN();
719 handshake.SocketId = info.SocketId;
720 handshake.MyAddress = myAddr;
721
722 TIntrusivePtr<TAddressHandle> serverAH;
723 if (info.LID != 0) {
724 serverAH = new TAddressHandle(Port, info.LID, CONNECT_SL);
725 } else {
726 TUdpAddress local = myAddr;
727 local.Port = 0;
728 TUdpAddress remote = peerAddr;
729 remote.Port = 0;
730 //printf("local Addr %s\n", GetAddressAsString(local).c_str());
731 //printf("remote Addr %s\n", GetAddressAsString(remote).c_str());
732 sockaddr_in6 remoteAddr;
733 GetWinsockAddrForMLNX(&remoteAddr, remote);
734 sockaddr_in6 localAddr;
735 GetWinsockAddrForMLNX(&localAddr, local);
736 // CRAP - somehow prevent connecting machines from different RoCE isles
737 serverAH = new TAddressHandle(Port, (sockaddr&)remoteAddr, (sockaddr&)localAddr, CONNECT_SL);
738 if (!serverAH->IsValid()) {
739 return nullptr;
740 }
741 }
742 BP.PostSend(WelcomeQP, serverAH, info.QPN, WELCOME_QKEY, &handshake, sizeof(handshake));
743 //printf("send handshake\n");
744
745 return peer.Get();
746 }
747 const TIBConnectInfo& GetConnectInfo() override {
748 return ConnectInfo;
749 }

Callers 1

ProcessPingPacketMethod · 0.45

Calls 10

GetWinsockAddrForMLNXFunction · 0.85
GetMethod · 0.45
GetCtxMethod · 0.45
GetSRQMethod · 0.45
GetQPNMethod · 0.45
findMethod · 0.45
endMethod · 0.45
GetPSNMethod · 0.45
IsValidMethod · 0.45
PostSendMethod · 0.45

Tested by

no test coverage detected