336
332
PeerReadDataAllocator.free(this->_state);
338
334
if (_cache_req_hdr_heap_handle) {
339
xfree(_cache_req_hdr_heap_handle);
335
ats_free(_cache_req_hdr_heap_handle);
340
336
_cache_req_hdr_heap_handle = NULL;
342
338
if (_cache_resp_hdr_heap_handle) {
343
xfree(_cache_resp_hdr_heap_handle);
339
ats_free(_cache_resp_hdr_heap_handle);
344
340
_cache_resp_hdr_heap_handle = NULL;
400
396
ICPPeerReadCont::StaleCheck(int event, Event * e)
398
ip_port_text_buffer ipb;
402
399
NOWARN_UNUSED(e);
403
400
ink_release_assert(mutex->thread_holding == this_ethread());
405
Debug("icp-stale", "Stale check res=%d for id=%d, [%s] from [%s:%d]",
402
Debug("icp-stale", "Stale check res=%d for id=%d, [%s] from [%s]",
406
403
event, _state->_rICPmsg->h.requestno,
407
_state->_rICPmsg->un.query.URL, inet_ntoa(_state->_sender.sin_addr), ntohs(_state->_sender.sin_port));
404
_state->_rICPmsg->un.query.URL, ats_ip_nptop(&_state->_sender, ipb, sizeof(ipb)));
410
407
case ICP_STALE_OBJECT:
434
431
ICPPeerReadCont::ICPPeerQueryEvent(int event, Event * e)
433
ip_port_text_buffer ipb;
436
434
NOWARN_UNUSED(e);
437
Debug("icp", "Remote Query lookup res=%d for id=%d, [%s] from [%s:%d]",
435
Debug("icp", "Remote Query lookup res=%d for id=%d, [%s] from [%s]",
438
436
event, _state->_rICPmsg->h.requestno,
439
_state->_rICPmsg->un.query.URL, inet_ntoa(_state->_sender.sin_addr), ntohs(_state->_sender.sin_port));
437
_state->_rICPmsg->un.query.URL, ats_ip_nptop(&_state->_sender, ipb, sizeof(ipb)));
440
438
if (pluginFreshnessCalcFunc) {
442
440
case CACHE_EVENT_OPEN_READ:
476
475
_state->_cachelookupURL.create(NULL);
477
476
const char *qurl = (const char *) _state->_rICPmsg->un.query.URL;
478
477
_state->_cachelookupURL.parse(qurl, strlen(qurl));
479
Debug("icp", "Remote Query for id=%d, [%s] from [%s:%d]",
478
Debug("icp", "Remote Query for id=%d, [%s] from [%s]",
480
479
_state->_rICPmsg->h.requestno,
481
_state->_rICPmsg->un.query.URL, inet_ntoa(_state->_sender.sin_addr), ntohs(_state->_sender.sin_port));
480
_state->_rICPmsg->un.query.URL,
481
ats_ip_nptop(&_state->_sender, ipb, sizeof(ipb))
483
484
SET_HANDLER((ICPPeerReadContHandler) & ICPPeerReadCont::ICPPeerQueryEvent);
484
485
if (_state->_rICPmsg->un.query.URL && *_state->_rICPmsg->un.query.URL) {
718
719
int icp_reply_port = cfg->ICPDefaultReplyPort();
719
720
if (!icp_reply_port) {
720
icp_reply_port = ntohs(s->_peer->fromaddr.sin_port);
721
icp_reply_port = ntohs(ats_ip_port_cast(&s->_peer->fromaddr));
722
PeerConfigData *Pcfg = NEW(new PeerConfigData(PeerConfigData::CTYPE_SIBLING,
723
&s->_peer->fromaddr.sin_addr, 0,
723
PeerConfigData *Pcfg = NEW(new PeerConfigData(
724
PeerConfigData::CTYPE_SIBLING,
725
IpAddr(s->_peer->fromaddr),
725
729
ParentSiblingPeer *P = NEW(new ParentSiblingPeer(PEER_SIBLING, Pcfg, _ICPpr, true));
726
730
status = _ICPpr->AddPeer(P);
727
731
ink_release_assert(status);
728
732
status = _ICPpr->AddPeerToSendList(P);
729
733
ink_release_assert(status);
731
P->GetChan()->setRemote(P->GetIP()->s_addr, P->GetPort());
735
P->GetChan()->setRemote(P->GetIP());
733
737
// coverity[uninit_use_in_call]
734
Note("ICP Peer added ip=%u.%u.%u.%u port=%d", PRINT_IP(P->GetIP()->s_addr), P->GetPort());
738
Note("ICP Peer added ip=%s", ats_ip_nptop(P->GetIP(), ipb, sizeof(ipb)));
735
739
from = s->_peer->fromaddr;
739
743
// Sender does not exist in ICP configuration, terminate
741
745
ICP_INCREMENT_DYN_STAT(invalid_sender_stat);
742
Debug("icp", "Received msg from invalid sender [%s:%d]",
743
inet_ntoa(s->_peer->fromaddr.sin_addr), ntohs(s->_peer->fromaddr.sin_port));
746
Debug("icp", "Received msg from invalid sender [%s]",
747
ats_ip_nptop(&s->_peer->fromaddr, ipb, sizeof(ipb)));
745
749
s->_peer->buf = NULL;
746
750
s->_next_state = READ_NOT_ACTIVE;
762
766
if ((s->_rICPmsg->h.version != ICP_VERSION_2)
763
767
&& (s->_rICPmsg->h.version != ICP_VERSION_3)) {
764
768
ICP_INCREMENT_DYN_STAT(read_not_v2_icp_stat);
765
Debug("icp", "Received (v=%d) !v2 && !v3 msg from sender [%s:%d]",
766
(uint32_t) s->_rICPmsg->h.version, inet_ntoa(from.sin_addr), ntohs(from.sin_port));
769
Debug("icp", "Received (v=%d) !v2 && !v3 msg from sender [%s]",
770
(uint32_t) s->_rICPmsg->h.version, ats_ip_nptop(&from, ipb, sizeof(ipb)));
768
772
s->_rICPmsg = NULL;
790
794
// We have a response message for an ICP query.
791
Debug("icp", "Response for Id=%d, from [%s:%d]",
792
s->_rICPmsg->h.requestno, inet_ntoa(s->_sender.sin_addr), ntohs(s->_sender.sin_port));
795
Debug("icp", "Response for Id=%d, from [%s]",
796
s->_rICPmsg->h.requestno, ats_ip_nptop(&s->_sender, ipb, sizeof(ipb)));
793
797
ICP_INCREMENT_DYN_STAT(icp_remote_responses_stat);
794
798
s->_next_state = GET_ICP_REQUEST;
795
799
RECORD_ICP_STATE_CHANGE(s, 0, GET_ICP_REQUEST);
796
800
break; // move to next_state
799
#if !defined(_WIN32) && !defined(__GNUC__)
803
#if !defined(__GNUC__)
800
804
_end_case_process_data_read: // fix DEC warnings
802
806
ink_release_assert(0); // Should never happen
810
814
if (s->_queryResult == CACHE_EVENT_LOOKUP) {
811
815
// Use the received ICP data buffer for the response message
812
Debug("icp", "Sending ICP_OP_HIT for id=%d, [%s] to [%s:%d]",
813
s->_rICPmsg->h.requestno, data, inet_ntoa(s->_sender.sin_addr), ntohs(s->_sender.sin_port));
816
Debug("icp", "Sending ICP_OP_HIT for id=%d, [%.*s] to [%s]",
817
s->_rICPmsg->h.requestno, datalen, (const char *)data, ats_ip_nptop(&s->_sender, ipb, sizeof(ipb)));
814
818
ICP_INCREMENT_DYN_STAT(icp_cache_lookup_success_stat);
815
819
status = ICPRequestCont::BuildICPMsg(ICP_OP_HIT,
816
820
s->_rICPmsg->h.requestno, 0 /* optflags */ , 0 /* optdata */ ,
818
822
data, datalen, &s->_mhdr, s->_iov, s->_rICPmsg);
819
823
} else if (s->_queryResult == CACHE_EVENT_LOOKUP_FAILED) {
820
824
// Use the received ICP data buffer for response message
821
Debug("icp", "Sending ICP_OP_MISS for id=%d, [%s] to [%s:%d]",
822
s->_rICPmsg->h.requestno, data, inet_ntoa(s->_sender.sin_addr), ntohs(s->_sender.sin_port));
825
Debug("icp", "Sending ICP_OP_MISS for id=%d, [%.*s] to [%s]",
826
s->_rICPmsg->h.requestno, datalen, (const char *)data, ats_ip_nptop(&s->_sender, ipb, sizeof(ipb)));
823
827
ICP_INCREMENT_DYN_STAT(icp_cache_lookup_fail_stat);
824
828
status = ICPRequestCont::BuildICPMsg(ICP_OP_MISS,
825
829
s->_rICPmsg->h.requestno, 0 /* optflags */ , 0 /* optdata */ ,
872
876
} else if (a == ACTION_IO_ERROR) {
873
877
// Partial write.
874
878
ICP_INCREMENT_DYN_STAT(query_response_partial_write_stat);
876
*(uint32_t *) & x = (uint32_t) s->_sender.sin_addr.s_addr;
877
879
// coverity[uninit_use_in_call]
878
Debug("icp_warn", "ICP response send, sent=%d res=%d, ip=%d.%d.%d.%d",
879
ntohs(s->_rICPmsg->h.msglen), -1, x[0], x[1], x[2], x[3]);
880
Debug("icp_warn", "ICP response send, sent=%d res=%d, ip=%s",
881
ntohs(s->_rICPmsg->h.msglen), -1, ats_ip_ntop(&s->_sender, ipb, sizeof(ipb)));
880
882
s->_next_state = READ_NOT_ACTIVE;
881
883
RECORD_ICP_STATE_CHANGE(s, 0, READ_NOT_ACTIVE);
898
900
if (len == (int)ntohs(s->_rICPmsg->h.msglen)) {
899
901
ICP_INCREMENT_DYN_STAT(query_response_write_stat);
900
s->_peer->LogSendMsg(s->_rICPmsg, &s->_sender); // log query reply
902
s->_peer->LogSendMsg(s->_rICPmsg, &s->_sender.sa); // log query reply
902
904
// Partial write.
903
905
ICP_INCREMENT_DYN_STAT(query_response_partial_write_stat);
905
*(uint32_t *) & x = (uint32_t) s->_sender.sin_addr.s_addr;
906
906
// coverity[uninit_use_in_call]
907
Debug("icp_warn", "ICP response send, sent=%d res=%d, ip=%d.%d.%d.%d",
908
ntohs(s->_rICPmsg->h.msglen), len, x[0], x[1], x[2], x[3]);
907
Debug("icp_warn", "ICP response send, sent=%d res=%d, ip=%s",
908
ntohs(s->_rICPmsg->h.msglen), len, ats_ip_ntop(&s->_sender, ipb, sizeof(ipb)));
910
910
// Processing complete, perform completion actions
911
911
s->_next_state = READ_NOT_ACTIVE;
942
942
Debug("icp", "No ICP Request for Id=%d", s->_rICPmsg->h.requestno);
943
943
ICP_INCREMENT_DYN_STAT(no_icp_request_for_response_stat);
944
Peer *p = _ICPpr->FindPeer(&s->_sender.sin_addr,
945
ntohs(s->_sender.sin_port));
944
Peer *p = _ICPpr->FindPeer(s->_sender);
946
945
p->LogRecvMsg(s->_rICPmsg, 0);
947
946
s->_next_state = READ_NOT_ACTIVE;
948
947
RECORD_ICP_STATE_CHANGE(s, 0, READ_NOT_ACTIVE);
949
948
break; // move to next_state
951
#if !defined(_WIN32) && !defined(__GNUC__)
950
#if !defined(__GNUC__)
952
951
_end_case_get_icp_request: // fix DEC warnings
954
953
ink_release_assert(0); // Should never happen
1336
1333
(*pendingActions) (npending_actions) = a;
1338
P->LogSendMsg(&_ICPmsg, (struct sockaddr_in *) 0); // log as send query
1339
Debug("icp", "[ICP_QUEUE_REQUEST] Id=%d send query to [%s:%d]",
1340
_sequence_number, inet_ntoa(*P->GetIP()), P->GetPort());
1335
P->LogSendMsg(&_ICPmsg, NULL); // log as send query
1336
Debug("icp", "[ICP_QUEUE_REQUEST] Id=%d send query to [%s]",
1337
_sequence_number, ats_ip_nptop(P->GetIP(), ipb, sizeof(ipb)));
1342
1339
_expected_replies_list.ClearBit(P->GetPeerID());
1343
1340
_expected_replies -= was_expected;
1344
1341
// Partial or failed write.
1345
1342
ICP_INCREMENT_DYN_STAT(send_query_partial_write_stat);
1347
*(uint32_t *) & x = (uint32_t) (*P->GetIP()).s_addr;
1348
1343
// coverity[uninit_use_in_call]
1349
1344
Debug("icp_warn",
1350
"ICP query send, res=%d, ip=%d.%d.%d.%d", ntohs(_ICPmsg.h.msglen), x[0], x[1], x[2], x[3]);
1345
"ICP query send, res=%d, ip=%s", ntohs(_ICPmsg.h.msglen),
1346
ats_ip_ntop(P->GetIP(), ipb, sizeof(ipb)));
1509
1507
pp = _ICPpr->GetNthParentPeer(0, _ICPpr->GetStartingParentPeerBias());
1510
1508
if (pp && !_expected_replies_list.IsBitSet(pp->GetPeerID())
1511
1509
&& pp->isUp()) {
1512
_ret_sockaddr.sin_addr.s_addr = (pp->GetIP())->s_addr;
1513
_ret_sockaddr.sin_port = htons(((ParentSiblingPeer *) pp)->GetProxyPort());
1510
ats_ip_copy(&_ret_sockaddr.sa, pp->GetIP());
1511
_ret_sockaddr.port() = htons(static_cast<ParentSiblingPeer*>(pp)->GetProxyPort());
1514
1512
_ret_status = ICP_LOOKUP_FOUND;
1517
"ICP timeout using parent Id=%d from [%s:%d] return [%s:%d]",
1518
_sequence_number, inet_ntoa(*pp->GetIP()),
1519
pp->GetPort(), inet_ntoa(_ret_sockaddr.sin_addr), ntohs(_ret_sockaddr.sin_port));
1515
"ICP timeout using parent Id=%d from [%s] return [%s]",
1517
ats_ip_nptop(pp->GetIP(), ipb, sizeof(ipb)),
1518
ats_ip_nptop(&_ret_sockaddr, ipb2, sizeof(ipb2))
1520
1520
return EVENT_DONE;
1543
1543
ICP_INCREMENT_DYN_STAT(icp_query_hits_stat);
1544
1544
++_received_replies;
1545
_ret_sockaddr.sin_addr.s_addr = (peer->GetIP())->s_addr;
1546
_ret_sockaddr.sin_port = htons(((ParentSiblingPeer *) peer)->GetProxyPort());
1545
ats_ip_copy(&_ret_sockaddr, peer->GetIP());
1546
_ret_sockaddr.port() = htons(static_cast<ParentSiblingPeer*>(peer)->GetProxyPort());
1547
1547
_ret_status = ICP_LOOKUP_FOUND;
1550
"ICP Response HIT for Id=%d from [%s:%d] return [%s:%d]",
1551
_sequence_number, inet_ntoa(*peer->GetIP()), peer->GetPort(),
1552
inet_ntoa(_ret_sockaddr.sin_addr), ntohs(_ret_sockaddr.sin_port));
1550
"ICP Response HIT for Id=%d from [%s] return [%s]",
1552
ats_ip_nptop(peer->GetIP(), ipb, sizeof(ipb)),
1553
ats_ip_nptop(&_ret_sockaddr, ipb2, sizeof(ipb2))
1553
1555
return EVENT_DONE;
1555
1557
case ICP_OP_MISS:
1557
1559
case ICP_OP_MISS_NOFETCH:
1558
1560
case ICP_OP_DENIED:
1560
Debug("icp", "ICP MISS response for Id=%d from [%s:%d]",
1561
_sequence_number, inet_ntoa(*peer->GetIP()), peer->GetPort());
1562
Debug("icp", "ICP MISS response for Id=%d from [%s]",
1563
_sequence_number, ats_ip_nptop(peer->GetIP(), ipb, sizeof(ipb)));
1562
1564
// "received_replies" is only for Peers who we expect a reply
1563
1565
// from (Peers which are in the expected_replies_list).
1564
1566
int Id = peer->GetPeerID();
1603
_ret_sockaddr.sin_addr.s_addr = (p->GetIP())->s_addr;
1604
_ret_sockaddr.sin_port = htons(((ParentSiblingPeer *) p)->GetProxyPort());
1605
ats_ip_copy(&_ret_sockaddr, p->GetIP());
1606
_ret_sockaddr.port() = htons(static_cast<ParentSiblingPeer*>(p)->GetProxyPort());
1605
1607
_ret_status = ICP_LOOKUP_FOUND;
1607
Debug("icp", "ICP ALL MISS(1) for Id=%d return [%s:%d]",
1608
_sequence_number, inet_ntoa(_ret_sockaddr.sin_addr), ntohs(_ret_sockaddr.sin_port));
1609
Debug("icp", "ICP ALL MISS(1) for Id=%d return [%s]",
1610
_sequence_number, ats_ip_nptop(&_ret_sockaddr, ipb, sizeof(ipb)));
1609
1611
return EVENT_DONE;
1612
Debug("icp", "ICP ALL MISS(2) for Id=%d return [%s:%d]",
1613
_sequence_number, inet_ntoa(_ret_sockaddr.sin_addr), ntohs(_ret_sockaddr.sin_port));
1614
Debug("icp", "ICP ALL MISS(2) for Id=%d return [%s]",
1615
_sequence_number, ats_ip_nptop(&_ret_sockaddr, ipb, sizeof(ipb)));
1614
1616
return EVENT_DONE;
1618
1620
ICP_INCREMENT_DYN_STAT(invalid_icp_query_response_stat);
1620
*(uint32_t *) & x = (uint32_t) peer->GetIP()->s_addr;
1621
1621
// coverity[uninit_use_in_call]
1622
Warning("Invalid ICP response, op=%d reqno=%d ip=%d.%d.%d.%d",
1623
m->h.opcode, m->h.requestno, x[0], x[1], x[2], x[3]);
1622
Warning("Invalid ICP response, op=%d reqno=%d ip=%s",
1623
m->h.opcode, m->h.requestno, ats_ip_ntop(peer->GetIP(), ipb, sizeof(ipb)));
1624
1624
return EVENT_CONT; // wait for more responses
2021
2018
// parents and siblings.
2023
2020
Pcfg = _ICPConfig->indexToPeerConfigData(0);
2024
ink_strncpy(Pcfg->_hostname, "localhost", sizeof(Pcfg->_hostname));
2021
ink_strlcpy(Pcfg->_hostname, "localhost", sizeof(Pcfg->_hostname));
2025
2022
Pcfg->_ctype = PeerConfigData::CTYPE_LOCAL;
2027
2024
// Get IP address for given interface
2028
if (!mgmt_getAddrForIntr(GetConfig()->globalConfig()->ICPinterface(), &Pcfg->_ip_addr)) {
2026
if (!mgmt_getAddrForIntr(GetConfig()->globalConfig()->ICPinterface(), &tmp_ip.sa)) {
2027
Pcfg->_ip_addr._family = AF_UNSPEC;
2029
2028
// No IP address for given interface
2030
2029
Warning("ICP interface [%s] has no IP address", GetConfig()->globalConfig()->ICPinterface());
2031
2030
REC_SignalWarning(REC_SIGNAL_CONFIG_ERROR, "ICP interface has no IP address");
2032
Pcfg->_ip_addr.s_addr = 0;
2034
Pcfg->_my_ip_addr.s_addr = Pcfg->_ip_addr.s_addr;
2032
Pcfg->_my_ip_addr = Pcfg->_ip_addr = tmp_ip;
2036
2034
Pcfg->_proxy_port = 0;
2037
2035
Pcfg->_icp_port = GetConfig()->globalConfig()->ICPport();
2038
2036
Pcfg->_mc_member = 0;
2039
Pcfg->_mc_ip_addr.s_addr = 0;
2037
Pcfg->_mc_ip_addr._family = AF_UNSPEC;
2040
2038
Pcfg->_mc_ttl = 0;
2042
2040
//***************************************************
2059
2057
// siblings are cluster members. Note that in a cluster
2060
2058
// configuration, "icp.config" is shared by all nodes.
2062
if (Pcfg->GetIP()->s_addr == _LocalPeer->GetIP()->s_addr)
2060
if (Pcfg->GetIPAddr() == _LocalPeer->GetIP())
2063
2061
continue; // ignore
2065
2063
if ((type == PEER_PARENT) || (type == PEER_SIBLING)) {
2067
2065
if (Pcfg->MultiCastMember()) {
2068
mcP = FindPeer(Pcfg->GetMultiCastIP(), Pcfg->GetICPPort());
2066
mcP = FindPeer(Pcfg->GetMultiCastIPAddr(), Pcfg->GetICPPort());
2070
2068
//*********************************
2071
2069
// Create multicast peer structure
2072
2070
//*********************************
2073
mcP = NEW(new MultiCastPeer(Pcfg->GetMultiCastIP(), Pcfg->GetICPPort(), Pcfg->GetMultiCastTTL(), this));
2071
mcP = NEW(new MultiCastPeer(Pcfg->GetMultiCastIPAddr(), Pcfg->GetICPPort(), Pcfg->GetMultiCastTTL(), this));
2074
2072
status = AddPeer(mcP);
2075
2073
ink_assert(status);
2076
2074
status = AddPeerToSendList(mcP);
2192
2190
for (index = 0; index < (_nPeerList + 1); ++index) {
2191
ip_port_text_buffer ipb, ipb2;
2193
2193
if ((P = _PeerList[index])) {
2195
2195
if ((P->GetType() == PEER_PARENT)
2196
2196
|| (P->GetType() == PEER_SIBLING)) {
2197
2197
ParentSiblingPeer *pPS = (ParentSiblingPeer *) P;
2199
pPS->GetChan()->setRemote(pPS->GetIP()->s_addr, pPS->GetPort());
2199
pPS->GetChan()->setRemote(pPS->GetIP());
2201
2201
} else if (P->GetType() == PEER_MULTICAST) {
2202
2202
MultiCastPeer *pMC = (MultiCastPeer *) P;
2203
2203
ink_assert(_mcastCB_handler != NULL);
2204
status = pMC->GetSendChan()->setup_mc_send(pMC->GetIP()->s_addr, pMC->GetPort(), _LocalPeer->GetIP()->s_addr,
2206
_LocalPeer->GetPort(),
2210
NON_BLOCKING, pMC->GetTTL(), DISABLE_MC_LOOPBACK, _mcastCB_handler);
2204
status = pMC->GetSendChan()->setup_mc_send(pMC->GetIP(), _LocalPeer->GetIP(), NON_BLOCKING, pMC->GetTTL(), DISABLE_MC_LOOPBACK, _mcastCB_handler);
2212
unsigned char x[4], y[4];
2213
*(uint32_t *) & x = (uint32_t) pMC->GetIP()->s_addr;
2214
*(uint32_t *) & y = (uint32_t) _LocalPeer->GetIP()->s_addr;
2215
2206
// coverity[uninit_use_in_call]
2216
Warning("ICP MC send setup failed, res=%d, ip=%d.%d.%d.%d:%d bind_ip=%d.%d.%d.%d:%d",
2217
status, x[0], x[1], x[2], x[3], pMC->GetPort(), y[0], y[1], y[2], y[3], 0);
2207
Warning("ICP MC send setup failed, res=%d, ip=%s bind_ip=%s",
2209
ats_ip_nptop(pMC->GetIP(), ipb, sizeof(ipb)),
2210
ats_ip_nptop(_LocalPeer->GetIP(), ipb2, sizeof(ipb2))
2218
2212
REC_SignalWarning(REC_SIGNAL_CONFIG_ERROR, "ICP MC send setup failed");
2219
2213
return 1; // Failed
2222
status = pMC->GetRecvChan()->setup_mc_receive(pMC->GetIP()->s_addr,
2216
status = pMC->GetRecvChan()->setup_mc_receive(pMC->GetIP(),
2224
2217
NON_BLOCKING, pMC->GetSendChan(), _mcastCB_handler);
2227
*(uint32_t *) & x = (uint32_t) pMC->GetIP()->s_addr;
2228
2219
// coverity[uninit_use_in_call]
2229
Warning("ICP MC recv setup failed, res=%d, ip=%d.%d.%d.%d:%d",
2230
status, x[0], x[1], x[2], x[3], pMC->GetPort());
2220
Warning("ICP MC recv setup failed, res=%d, ip=%s",
2221
status, ats_ip_nptop(pMC->GetIP(), ipb, sizeof(ipb)));
2231
2222
REC_SignalWarning(REC_SIGNAL_CONFIG_ERROR, "ICP MC recv setup failed");
2232
2223
return 1; // Failed
2399
2392
r->_ICPmsg.h.version = ~r->_ICPmsg.h.version; // bogus message
2401
2394
Peer *lp = GetLocalPeer();
2402
r->_sendMsgHdr.msg_name = (caddr_t) & (lp->GetSendChan())->sa;
2403
r->_sendMsgHdr.msg_namelen = sizeof((lp->GetSendChan())->sa);
2395
r->_sendMsgHdr.msg_name = (caddr_t) & (lp->GetSendChan())->addr;
2396
r->_sendMsgHdr.msg_namelen = sizeof((lp->GetSendChan())->addr);
2404
2397
udpNet.sendmsg_re(r, r, lp->GetSendFD(), &r->_sendMsgHdr);
2408
ICPProcessor::GenericFindListPeer(struct in_addr *ip, int port, int validListItems, Ptr<Peer> *List)
2401
ICPProcessor::GenericFindListPeer(IpAddr const& ip, uint16_t port, int validListItems, Ptr<Peer> *List)
2411
2405
for (int n = 0; n < validListItems; ++n) {
2412
2406
if ((P = List[n])) {
2413
if ((P->GetIP()->s_addr == ip->s_addr)
2414
&& ((port == -1) || (P->GetPort() == port)))
2407
if ((P->GetIP() == ip)
2408
&& ((port == 0) || (ats_ip_port_cast(P->GetIP()) == port)))
2422
ICPProcessor::FindPeer(struct in_addr * ip, int port)
2416
ICPProcessor::FindPeer(IpAddr const& ip, uint16_t port)
2424
2418
// Find (Peer *) with the given (ip,port) on the global list (PeerList)
2425
2419
return GenericFindListPeer(ip, port, (_nPeerList + 1), _PeerList);
2429
ICPProcessor::FindSendListPeer(struct in_addr * ip, int port)
2423
ICPProcessor::FindSendListPeer(IpAddr const& ip, uint16_t port)
2431
2425
// Find (Peer *) with the given (ip,port) on the
2432
2426
// scheduler list (SendPeerList)
2452
2446
// Make sure no duplicate exists
2454
if (FindPeer(P->GetIP(), P->GetPort())) {
2456
*(uint32_t *) & x = (uint32_t) P->GetIP()->s_addr;
2448
if (FindPeer(P->GetIP())) {
2449
ip_port_text_buffer x;
2457
2450
// coverity[uninit_use_in_call]
2458
Warning("bad icp.config, multiple peer definitions for ip=%d.%d.%d.%d", x[0], x[1], x[2], x[3]);
2451
Warning("bad icp.config, multiple peer definitions for ip=%s", ats_ip_nptop(P->GetIP(), x, sizeof(x)));
2459
2452
REC_SignalWarning(REC_SIGNAL_CONFIG_ERROR, "bad icp.config, multiple peer definitions");
2461
2454
return 0; // Not added