You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2011/05/24 06:11:39 UTC
svn commit: r1126862 [1/4] - in /trafficserver/traffic/branches/ssc:
iocore/aio/ iocore/cache/ iocore/cluster/ iocore/dns/ iocore/eventsystem/
iocore/hostdb/ iocore/hostdb/include/ iocore/net/ iocore/utils/
lib/records/ lib/ts/ lib/wccp/ mgmt/ mgmt/api...
Author: amc
Date: Tue May 24 04:11:36 2011
New Revision: 1126862
URL: http://svn.apache.org/viewvc?rev=1126862&view=rev
Log:
Checkpoint and available to other team members
Added:
trafficserver/traffic/branches/ssc/lib/ts/IpMap.cc
trafficserver/traffic/branches/ssc/lib/ts/IpMap.h
trafficserver/traffic/branches/ssc/lib/ts/IpMapConf.cc
trafficserver/traffic/branches/ssc/lib/ts/IpMapConf.h
Modified:
trafficserver/traffic/branches/ssc/iocore/aio/I_AIO.h
trafficserver/traffic/branches/ssc/iocore/aio/Makefile.am
trafficserver/traffic/branches/ssc/iocore/cache/Makefile.am
trafficserver/traffic/branches/ssc/iocore/cache/P_Cache.h
trafficserver/traffic/branches/ssc/iocore/cluster/ClusterAPI.cc
trafficserver/traffic/branches/ssc/iocore/cluster/ClusterConfig.cc
trafficserver/traffic/branches/ssc/iocore/cluster/ClusterHandlerBase.cc
trafficserver/traffic/branches/ssc/iocore/cluster/ClusterMachine.cc
trafficserver/traffic/branches/ssc/iocore/cluster/Makefile.am
trafficserver/traffic/branches/ssc/iocore/cluster/P_Cluster.h
trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterCache.h
trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterHandler.h
trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterMachine.h
trafficserver/traffic/branches/ssc/iocore/dns/DNS.cc
trafficserver/traffic/branches/ssc/iocore/dns/DNSConnection.cc
trafficserver/traffic/branches/ssc/iocore/dns/I_DNSProcessor.h
trafficserver/traffic/branches/ssc/iocore/dns/Makefile.am
trafficserver/traffic/branches/ssc/iocore/dns/P_DNSConnection.h
trafficserver/traffic/branches/ssc/iocore/dns/P_DNSProcessor.h
trafficserver/traffic/branches/ssc/iocore/dns/P_SplitDNSProcessor.h
trafficserver/traffic/branches/ssc/iocore/dns/SplitDNS.cc
trafficserver/traffic/branches/ssc/iocore/eventsystem/I_EventSystem.h
trafficserver/traffic/branches/ssc/iocore/eventsystem/I_SocketManager.h
trafficserver/traffic/branches/ssc/iocore/eventsystem/Makefile.am
trafficserver/traffic/branches/ssc/iocore/eventsystem/P_UnixSocketManager.h
trafficserver/traffic/branches/ssc/iocore/eventsystem/SocketManager.cc
trafficserver/traffic/branches/ssc/iocore/hostdb/Makefile.am
trafficserver/traffic/branches/ssc/iocore/hostdb/include/Machine.h
trafficserver/traffic/branches/ssc/iocore/net/Connection.cc
trafficserver/traffic/branches/ssc/iocore/net/I_NetProcessor.h
trafficserver/traffic/branches/ssc/iocore/net/I_NetVConnection.h
trafficserver/traffic/branches/ssc/iocore/net/I_UDPConnection.h
trafficserver/traffic/branches/ssc/iocore/net/I_UDPNet.h
trafficserver/traffic/branches/ssc/iocore/net/I_UDPPacket.h
trafficserver/traffic/branches/ssc/iocore/net/Makefile.am
trafficserver/traffic/branches/ssc/iocore/net/P_Connection.h
trafficserver/traffic/branches/ssc/iocore/net/P_NetVConnection.h
trafficserver/traffic/branches/ssc/iocore/net/P_Socks.h
trafficserver/traffic/branches/ssc/iocore/net/P_UDPConnection.h
trafficserver/traffic/branches/ssc/iocore/net/P_UDPNet.h
trafficserver/traffic/branches/ssc/iocore/net/P_UDPPacket.h
trafficserver/traffic/branches/ssc/iocore/net/P_UnixNetProcessor.h
trafficserver/traffic/branches/ssc/iocore/net/P_UnixNetVConnection.h
trafficserver/traffic/branches/ssc/iocore/net/SSLNetVConnection.cc
trafficserver/traffic/branches/ssc/iocore/net/Socks.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixConnection.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixNetAccept.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixNetPages.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixNetProcessor.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixNetVConnection.cc
trafficserver/traffic/branches/ssc/iocore/net/UnixUDPNet.cc
trafficserver/traffic/branches/ssc/iocore/utils/Makefile.am
trafficserver/traffic/branches/ssc/lib/records/RecCompatibility.cc
trafficserver/traffic/branches/ssc/lib/ts/Makefile.am
trafficserver/traffic/branches/ssc/lib/ts/Vec.h
trafficserver/traffic/branches/ssc/lib/ts/ink_inet.cc
trafficserver/traffic/branches/ssc/lib/ts/ink_inet.h
trafficserver/traffic/branches/ssc/lib/ts/ink_res_init.cc
trafficserver/traffic/branches/ssc/lib/ts/ink_resolver.h
trafficserver/traffic/branches/ssc/lib/ts/ink_sock.cc
trafficserver/traffic/branches/ssc/lib/ts/ink_sock.h
trafficserver/traffic/branches/ssc/lib/wccp/WccpEndPoint.cc
trafficserver/traffic/branches/ssc/mgmt/LocalManager.cc
trafficserver/traffic/branches/ssc/mgmt/ProcessManager.cc
trafficserver/traffic/branches/ssc/mgmt/RecordsConfig.cc
trafficserver/traffic/branches/ssc/mgmt/api/CoreAPIShared.cc
trafficserver/traffic/branches/ssc/mgmt/api/EventControlMain.cc
trafficserver/traffic/branches/ssc/mgmt/api/EventControlMain.h
trafficserver/traffic/branches/ssc/mgmt/api/TSControlMain.cc
trafficserver/traffic/branches/ssc/mgmt/api/TSControlMain.h
trafficserver/traffic/branches/ssc/mgmt/api/remote/NetworkUtilsRemote.cc
trafficserver/traffic/branches/ssc/mgmt/cluster/ClusterCom.cc
trafficserver/traffic/branches/ssc/mgmt/cluster/ClusterCom.h
trafficserver/traffic/branches/ssc/mgmt/cluster/VMap.cc
trafficserver/traffic/branches/ssc/mgmt/preparse/Makefile.am
trafficserver/traffic/branches/ssc/mgmt/utils/Makefile.am
trafficserver/traffic/branches/ssc/mgmt/utils/MgmtSocket.h
trafficserver/traffic/branches/ssc/mgmt/utils/MgmtUtils.cc
trafficserver/traffic/branches/ssc/mgmt/utils/MgmtUtils.h
trafficserver/traffic/branches/ssc/mgmt/web2/WebGlobals.h
trafficserver/traffic/branches/ssc/mgmt/web2/WebIntrMain.cc
trafficserver/traffic/branches/ssc/proxy/ControlMatcher.h
trafficserver/traffic/branches/ssc/proxy/ICP.cc
trafficserver/traffic/branches/ssc/proxy/ICP.h
trafficserver/traffic/branches/ssc/proxy/ICPConfig.cc
trafficserver/traffic/branches/ssc/proxy/ICPProcessor.h
trafficserver/traffic/branches/ssc/proxy/InkAPI.cc
trafficserver/traffic/branches/ssc/proxy/MuxVC.cc
trafficserver/traffic/branches/ssc/proxy/MuxVC.h
trafficserver/traffic/branches/ssc/proxy/ParentSelection.h
trafficserver/traffic/branches/ssc/proxy/PluginVC.cc
trafficserver/traffic/branches/ssc/proxy/PluginVC.h
trafficserver/traffic/branches/ssc/proxy/Prefetch.cc
trafficserver/traffic/branches/ssc/proxy/Socks.h
trafficserver/traffic/branches/ssc/proxy/StufferUdpReceiver.cc
trafficserver/traffic/branches/ssc/proxy/congest/CongestionStats.h
trafficserver/traffic/branches/ssc/proxy/http/HttpConfig.cc
trafficserver/traffic/branches/ssc/proxy/http/HttpConfig.h
trafficserver/traffic/branches/ssc/proxy/http/HttpSM.cc
trafficserver/traffic/branches/ssc/proxy/http/HttpTransact.cc
trafficserver/traffic/branches/ssc/proxy/http/HttpTransact.h
trafficserver/traffic/branches/ssc/proxy/http/test_socket_close.cc
trafficserver/traffic/branches/ssc/proxy/logging/LogAccessHttp.cc
trafficserver/traffic/branches/ssc/proxy/logging/LogSock.cc
trafficserver/traffic/branches/ssc/test/SDKtest/client/DoTest.cc
trafficserver/traffic/branches/ssc/test/SDKtest/client/DoTest.h
trafficserver/traffic/branches/ssc/test/SDKtest/client/LoadGenerator.cc
trafficserver/traffic/branches/ssc/test/SDKtest/client/LoadGenerator.h
trafficserver/traffic/branches/ssc/test/SDKtest/client/Main.cc
trafficserver/traffic/branches/ssc/test/SDKtest/synth_server/synth_server.c
trafficserver/traffic/branches/ssc/test/deft/sio_loop.cc
trafficserver/traffic/branches/ssc/tools/apichecker.pl
Modified: trafficserver/traffic/branches/ssc/iocore/aio/I_AIO.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/aio/I_AIO.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/aio/I_AIO.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/aio/I_AIO.h Tue May 24 04:11:36 2011
@@ -37,7 +37,7 @@
#include "libts.h"
#include "I_EventSystem.h"
-#include "I_RecProcess.h"
+#include <records/I_RecProcess.h>
#define AIO_MODULE_MAJOR_VERSION 1
#define AIO_MODULE_MINOR_VERSION 0
Modified: trafficserver/traffic/branches/ssc/iocore/aio/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/aio/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/aio/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/aio/Makefile.am Tue May 24 04:11:36 2011
@@ -18,7 +18,7 @@
AM_CPPFLAGS = \
-I$(top_srcdir)/iocore/eventsystem \
- -I$(top_srcdir)/lib/records
+ -I$(top_srcdir)/lib
DEFS += @IOCORE_MODULARIZED_DEFS@
Modified: trafficserver/traffic/branches/ssc/iocore/cache/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cache/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cache/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/cache/Makefile.am Tue May 24 04:11:36 2011
@@ -19,13 +19,13 @@
if STANDALONE_IOCORE
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records
+ -I$(top_srcdir)/lib
ADD_SRC =
else
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records \
+ -I$(top_srcdir)/lib \
-I$(top_srcdir)/proxy \
-I$(top_srcdir)/proxy/hdrs \
-I$(top_srcdir)/proxy/http \
Modified: trafficserver/traffic/branches/ssc/iocore/cache/P_Cache.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cache/P_Cache.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cache/P_Cache.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/cache/P_Cache.h Tue May 24 04:11:36 2011
@@ -33,7 +33,7 @@
#include "libts.h"
#include "P_EventSystem.h"
#include "P_AIO.h"
-#include "I_RecProcess.h"
+#include <records/I_RecProcess.h>
#ifdef HTTP_CACHE
#include "HTTP.h"
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/ClusterAPI.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/ClusterAPI.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/ClusterAPI.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/ClusterAPI.cc Tue May 24 04:11:36 2011
@@ -154,7 +154,7 @@ MachineStatusSM::MachineStatusSMEvent(Ev
MUTEX_TRY_LOCK(lock, status_callouts[n].mutex, et);
if (lock) {
int mi;
- unsigned int my_ipaddr = (this_cluster_machine())->ip;
+ sockaddr_storage const* my_ipaddr = &this_cluster_machine()->ip;
ClusterConfiguration *cc;
TSNodeHandle_t nh;
@@ -162,12 +162,16 @@ MachineStatusSM::MachineStatusSMEvent(Ev
cc = this_cluster()->current_configuration();
if (cc) {
for (mi = 0; mi < cc->n_machines; ++mi) {
- if (cc->machines[mi]->ip != my_ipaddr) {
+ if (0 != ink_inet_cmp(&cc->machines[mi]->ip, my_ipaddr)) {
+ char buff[INET6_ADDRSTRLEN];
nh = IP_TO_NODE_HANDLE(cc->machines[mi]->ip);
status_callouts[n].func(&nh, NODE_ONLINE);
Debug("cluster_api",
- "initial callout: n %d ([%u.%u.%u.%u], %d)", n, DOT_SEPARATED(cc->machines[mi]->ip), NODE_ONLINE);
+ "initial callout: n %d ([%s], %d)", n,
+ ink_inet_ntop(&cc->machines[mi]->ip, buff, sizeof buff),
+ NODE_ONLINE
+ );
}
}
}
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/ClusterConfig.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/ClusterConfig.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/ClusterConfig.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/ClusterConfig.cc Tue May 24 04:11:36 2011
@@ -106,11 +106,8 @@ ClusterAccept::ClusterAcceptEvent(int ev
opt.recv_bufsize = socket_recv_bufsize;
opt.send_bufsize = socket_send_bufsize;
opt.etype = ET_CLUSTER;
- opt.port = cluster_port;
opt.domain = AF_INET;
- accept_action = netProcessor.main_accept(this, NO_FD,
- NULL, NULL,
- false, false, opt);
+ accept_action = netProcessor.main_accept(this, NO_FD, cluster_port, opt);
if (!accept_action) {
Warning("Unable to accept cluster connections on port: %d", cluster_port);
} else {
@@ -135,20 +132,22 @@ ClusterAccept::ClusterAcceptEvent(int ev
int
ClusterAccept::ClusterAcceptMachine(NetVConnection * NetVC)
{
+ char buff[INET6_ADDRSTRLEN];
// Validate remote IP address.
- unsigned int remote_ip = NetVC->get_remote_ip();
+ sockaddr_storage const* remote_ip = NetVC->get_remote_addr();
+// unsigned int remote_ip = NetVC->get_remote_ip();
MachineList *mc = the_cluster_machines_config();
- if (mc && !mc->find(remote_ip)) {
+ if (mc && !mc->findByAddr(remote_ip)) {
Note("Illegal cluster connection from %u.%u.%u.%u", DOT_SEPARATED(remote_ip));
NetVC->do_io(VIO::CLOSE);
return 0;
}
- Debug(CL_NOTE, "Accepting machine %u.%u.%u.%u", DOT_SEPARATED(remote_ip));
+ Debug(CL_NOTE, "Accepting machine %s", ink_inet_ntop(remote_ip, buff, sizeof buff));
ClusterHandler *ch = NEW(new ClusterHandler);
ch->machine = NEW(new ClusterMachine(NULL, remote_ip));
- ch->ip = remote_ip;
+ ch->ip = ch->;
ch->net_vc = NetVC;
eventProcessor.schedule_imm(ch, ET_CLUSTER);
return 1;
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/ClusterHandlerBase.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/ClusterHandlerBase.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/ClusterHandlerBase.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/ClusterHandlerBase.cc Tue May 24 04:11:36 2011
@@ -1384,7 +1384,7 @@ ClusterHandler::dump_write_msg(int res)
// Debug support for inter cluster message trace
unsigned char x[4];
memset(x, 0, sizeof(x));
- *(uint32_t *) & x = (uint32_t) ((struct sockaddr_in *)&(net_vc->get_remote_addr()))->sin_addr.s_addr;
+ *(uint32_t *) & x = (uint32_t) ((sockaddr_storage *)&(net_vc->get_remote_addr()))->sin_addr.s_addr;
fprintf(stderr,
"[W] %hhu.%hhu.%hhu.%hhu SeqNo=%u, Cnt=%d, CntlCnt=%d Todo=%d, Res=%d\n",
@@ -1403,7 +1403,7 @@ ClusterHandler::dump_read_msg()
// Debug support for inter cluster message trace
unsigned char x[4];
memset(x, 0, sizeof(x));
- *(uint32_t *) & x = (uint32_t) ((struct sockaddr_in *)&(net_vc->get_remote_addr()))->sin_addr.s_addr;
+ *(uint32_t *) & x = (uint32_t) ((sockaddr_storage *)&(net_vc->get_remote_addr()))->sin_addr.s_addr;
fprintf(stderr, "[R] %hhu.%hhu.%hhu.%hhu SeqNo=%u, Cnt=%d, CntlCnt=%d\n",
x[0], x[1], x[2], x[3], read.sequence_number, read.msg.count, read.msg.control_bytes);
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/ClusterMachine.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/ClusterMachine.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/ClusterMachine.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/ClusterMachine.cc Tue May 24 04:11:36 2011
@@ -63,21 +63,26 @@ create_this_cluster_machine()
cluster_machine = NEW(new ClusterMachine);
}
-ClusterMachine::ClusterMachine(char *ahostname, unsigned int aip, int aport):
+ClusterMachine::ClusterMachine(char *ahostname,
+// unsigned int aip, int aport
+ sockaddr_storage const* aip
+):
dead(false),
hostname(ahostname),
-ip(aip),
-cluster_port(aport),
+//ip(aip),
+//cluster_port(aport),
msg_proto_major(0),
msg_proto_minor(0),
clusterHandler(0)
{
EThread *thread = this_ethread();
ProxyMutex *mutex = thread->mutex;
+
+ ink_inet_copy(&ip, aip);
#ifndef INK_NO_CLUSTER
CLUSTER_INCREMENT_DYN_STAT(CLUSTER_MACHINES_ALLOCATED_STAT);
#endif
- if (!aip) {
+ if (!ink_inet_is_ip(aip)) {
char localhost[1024];
if (!ahostname) {
ink_release_assert(!gethostname(localhost, 1023));
@@ -89,7 +94,8 @@ clusterHandler(0)
// clustering from the manager, so the manager can control what
// interface we cluster over. Otherwise figure it out ourselves
#ifdef LOCAL_CLUSTER_TEST_MODE
- ip = inet_addr("127.0.0.1");
+// ip = inet_addr("127.0.0.1");
+ ink_inet_ip4_set(ip, INADDR_LOOPBACK);
#else
#ifdef CLUSTER_TEST
int clustering_enabled = true;
@@ -99,43 +105,42 @@ clusterHandler(0)
if (clustering_enabled) {
char *clusterIP = getenv("PROXY_CLUSTER_ADDR");
Debug("cluster_note", "[Machine::Machine] Cluster IP addr: %s\n", clusterIP);
- ip = inet_addr(clusterIP);
+// ip = inet_addr(clusterIP);
+ ink_inet_pton(&ip, clusterIP);
} else {
-
ink_gethostbyname_r_data data;
struct hostent *r = ink_gethostbyname_r(ahostname, &data);
if (!r) {
Warning("unable to DNS %s: %d", ahostname, data.herrno);
- ip = 0;
+ ink_inet_invalidate(ip);
} else {
-
// lowest IP address
-
- ip = (unsigned int) -1; // 0xFFFFFFFF
+ uint32_t xip = (unsigned int) -1; // 0xFFFFFFFF
for (int i = 0; r->h_addr_list[i]; i++)
- if (ip > *(unsigned int *) r->h_addr_list[i])
- ip = *(unsigned int *) r->h_addr_list[i];
- if (ip == (unsigned int) -1)
- ip = 0;
+ if (xip > *(unsigned int *) r->h_addr_list[i])
+ xip = *(unsigned int *) r->h_addr_list[i];
+ if (xip == (unsigned int) -1)
+ ink_inet_invalidate(ip);
+ else
+ ink_inet_ip4_set(ip, xip);
}
//ip = htonl(ip); for the alpha!
}
#endif // LOCAL_CLUSTER_TEST_MODE
} else {
-
- ip = aip;
-
- ink_gethostbyaddr_r_data data;
- struct hostent *r = ink_gethostbyaddr_r((char *) &ip, sizeof(int),
- AF_INET, &data);
-
- if (r == NULL) {
- unsigned char x[4];
- memset(x, 0, sizeof(x));
- *(uint32_t *) & x = (uint32_t) ip;
- Debug("machine_debug", "unable to reverse DNS %u.%u.%u.%u: %d", x[0], x[1], x[2], x[3], data.herrno);
+ addrinfo* ai = 0;
+ char buff[1024];
+ ink_inet_copy(ip, aip);
+// ip = aip;
+
+ int z = getnameinfo(&ip, sizeof(ip), buff, sizeof(buff), 0, 0, NI_NAMEREQD);
+ if (0 != z) {
+ Debug("machine_debug", "unable to reverse DNS %s: %d",
+ ink_inet_ntop(&ip, buff, sizeof buff),
+ z
+ );
} else
- hostname = xstrdup(r->h_name);
+ hostname = xstrdup(buff);
}
if (hostname)
hostname_len = strlen(hostname);
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/Makefile.am Tue May 24 04:11:36 2011
@@ -18,7 +18,7 @@
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records \
+ -I$(top_srcdir)/lib \
-I$(top_srcdir)/proxy/http \
-I$(top_srcdir)/proxy/hdrs \
-I$(top_srcdir)/proxy \
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/P_Cluster.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/P_Cluster.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/P_Cluster.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/P_Cluster.h Tue May 24 04:11:36 2011
@@ -31,7 +31,7 @@
#include "libts.h"
#include "P_EventSystem.h"
-#include "I_RecProcess.h"
+#include <records/I_RecProcess.h>
#include "P_Net.h"
#include "P_Cache.h"
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterCache.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterCache.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterCache.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterCache.h Tue May 24 04:11:36 2011
@@ -161,9 +161,12 @@ struct ClusterConfiguration
return machines[hash_table[hash_value % CLUSTER_HASH_TABLE_SIZE]];
}
- ClusterMachine *find(unsigned int ip, int port = 0) {
+ ClusterMachine *findByAddr(
+// unsigned int ip, int port = 0
+ sockaddr_storage const* ip
+ ) {
for (int i = 0; i < n_machines; i++)
- if (ip == machines[i]->ip && (!port || !machines[i]->cluster_port || machines[i]->cluster_port == port))
+ if (0 == ink_inet_cmp(ip, &machines[i]->ip))
return machines[i];
return NULL;
}
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterHandler.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterHandler.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterHandler.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterHandler.h Tue May 24 04:11:36 2011
@@ -425,8 +425,9 @@ struct ClusterHandler:public ClusterHand
#endif
NetVConnection *net_vc;
EThread *thread;
- unsigned int ip;
- int port;
+ sockaddr_storage ip;
+// unsigned int ip;
+// int port;
char *hostname;
ClusterMachine *machine;
int ifd;
Modified: trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterMachine.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterMachine.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterMachine.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/cluster/P_ClusterMachine.h Tue May 24 04:11:36 2011
@@ -64,13 +64,17 @@ struct ClusterMachine: public Server
// The network address of the current machine,
// stored in network byte order
//
- unsigned int ip;
- int cluster_port;
+// unsigned int ip;
+// int cluster_port;
+ sockaddr_storage ip;
Link<ClusterMachine> link;
// default for localhost
- ClusterMachine(char *hostname = NULL, unsigned int ip = 0, int acluster_port = 0);
+ ClusterMachine(char *hostname = NULL,
+// unsigned int ip = 0, int acluster_port = 0
+ sockaddr_storage const* ip = 0
+ );
~ClusterMachine();
// Cluster message protocol version
@@ -84,19 +88,31 @@ struct ClusterMachine: public Server
struct MachineListElement
{
- unsigned int ip;
- int port;
+ sockaddr_storage ip;
+// unsigned int ip;
+// int port;
};
struct MachineList
{
int n;
MachineListElement machine[1];
+/*
MachineListElement *find(unsigned int ip, int port = 0) {
for (int i = 0; i < n; i++)
if (machine[i].ip == ip && (!port || machine[i].port == port))
return &machine[i];
return NULL;
}
+*/
+ MachineListElement* findByAddr(sockaddr_storage const* addr) {
+ MachineListElement* elt = machine;
+ MachineListElement* limit = machine + n;
+ for ( ; elt < limit ; ++elt) {
+ if (0 == ink_inet_cmp(addr, &elt->ip))
+ return elt;
+ }
+ return 0;
+ }
};
MachineList *read_MachineList(char *filename, int test_fd = -1);
Modified: trafficserver/traffic/branches/ssc/iocore/dns/DNS.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/DNS.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/DNS.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/DNS.cc Tue May 24 04:11:36 2011
@@ -22,6 +22,7 @@
*/
#include "P_DNS.h" /* MAGIC_EDITING_TAG */
+#include <ts/ink_inet.h>
#ifdef SPLIT_DNS
#include "I_SplitDNS.h"
@@ -52,6 +53,14 @@ int dns_ns_rr_init_down = 1;
char *dns_ns_list = NULL;
char *dns_resolv_conf = NULL;
int dns_thread = 0;
+int dns_prefer_ipv6 = 0;
+namespace {
+ inline bool prefer_ipv6_p() { return 1 == dns_prefer_ipv6; }
+ // Currently only used for A and AAAA.
+ inline char const* QtypeName(int qtype) {
+ return T_AAAA == qtype ? "AAAA" : T_A == qtype ? "A" : "*";
+ }
+}
DNSProcessor dnsProcessor;
ClassAllocator<DNSEntry> dnsEntryAllocator("dnsEntryAllocator");
@@ -96,7 +105,60 @@ void HostEnt::free() {
dnsBufAllocator.free(this);
}
-//
+inline bool IsAddrReply(int qtype) {
+ return qtype == T_A || qtype == T_AAAA;
+}
+
+void
+make_ipv4_ptr(const char *addr, char *buffer)
+{
+ char *p = buffer;
+ unsigned char *u = (unsigned char *) addr;
+
+ if (u[3] > 99)
+ *p++ = (u[3] / 100) + '0';
+ if (u[3] > 9)
+ *p++ = ((u[3] / 10) % 10) + '0';
+ *p++ = u[3] % 10 + '0';
+ *p++ = '.';
+ if (u[2] > 99)
+ *p++ = (u[2] / 100) + '0';
+ if (u[2] > 9)
+ *p++ = ((u[2] / 10) % 10) + '0';
+ *p++ = u[2] % 10 + '0';
+ *p++ = '.';
+ if (u[1] > 99)
+ *p++ = (u[1] / 100) + '0';
+ if (u[1] > 9)
+ *p++ = ((u[1] / 10) % 10) + '0';
+ *p++ = u[1] % 10 + '0';
+ *p++ = '.';
+ if (u[0] > 99)
+ *p++ = (u[0] / 100) + '0';
+ if (u[0] > 9)
+ *p++ = ((u[0] / 10) % 10) + '0';
+ *p++ = u[0] % 10 + '0';
+ *p++ = '.';
+ ink_strncpy(p, "in-addr.arpa", MAXDNAME - (p - buffer + 1));
+}
+
+void
+make_ipv6_ptr(const char *addr, char *buffer)
+{
+ const char hex_digit[] = "0123456789abcdef";
+ char *p = buffer;
+ int i;
+
+ for (i = 15; i >= 0; i--) {
+ *p++ = hex_digit[(unsigned char) addr[i] & 0x0f];
+ *p++ = '.';
+ *p++ = hex_digit[(unsigned char) addr[i] >> 4];
+ *p++ = '.';
+ }
+
+ ink_strncpy(p, "ip6.arpa", MAXDNAME - (p - buffer + 1));
+}
+
// Public functions
//
// See documentation is header files and Memos
@@ -117,6 +179,7 @@ DNSProcessor::start(int) {
IOCORE_ReadConfigStringAlloc(dns_ns_list, "proxy.config.dns.nameservers");
IOCORE_ReadConfigStringAlloc(dns_resolv_conf, "proxy.config.dns.resolv_conf");
IOCORE_EstablishStaticConfigInt32(dns_thread, "proxy.config.dns.dedicated_thread");
+ IOCORE_EstablishStaticConfigInt32(dns_prefer_ipv6, "proxy.config.dns.prefer_ipv6");
if (dns_thread > 0) {
ET_DNS = eventProcessor.spawn_event_threads(1, "ET_DNS"); // TODO: Hmmm, should we just get a single thread some other way?
@@ -142,15 +205,19 @@ DNSProcessor::start(int) {
}
void
-DNSProcessor::open(unsigned int aip, int aport, int aoptions)
+DNSProcessor::open(sockaddr_storage const* target, int aoptions)
{
DNSHandler *h = NEW(new DNSHandler);
h->options = aoptions;
h->mutex = thread->mutex;
h->m_res = &l_res;
- h->ip = aip;
- h->port = aport;
+ if (target)
+ ink_inet_copy(&h->addr, target);
+ else
+ ink_inet_invalidate(h->addr);
+// h->ip = aip;
+// h->port = aport;
if (!dns_handler_initialized)
handler = h;
@@ -171,14 +238,14 @@ DNSProcessor::dns_init()
if (dns_ns_list) {
Debug("dns", "Nameserver list specified \"%s\"\n", dns_ns_list);
- uint32_t nameserver_ip[MAX_NAMED];
- int nameserver_port[MAX_NAMED];
+ sockaddr_storage nameserver[MAX_NAMED];
int i, j;
char *last, *ndx;
char *ns_list = xstrdup(dns_ns_list);
char *ns = (char *) ink_strtok_r(ns_list, " ,;\t\r", &last);
for (i = 0, j = 0; (i < MAX_NAMED) && ns; i++) {
+ sockaddr_storage* ss = nameserver + j;
Debug("dns", "Nameserver list - parsing \"%s\"\n", ns);
int err = 0;
int prt = DOMAIN_SERVICE_PORT;
@@ -191,30 +258,33 @@ DNSProcessor::dns_init()
err = 1;
}
}
- nameserver_ip[j] = ink_inet_addr(ns);
- nameserver_port[j] = prt;
- if ((int) nameserver_ip[j] == -1) {
+ if (!ink_inet_is_valid(ss)) {
Debug("dns", "Invalid IP address given for nameserver '%s', discarding", ns);
Warning("Invalid IP address given for nameserver '%s', discarding", ns);
err = 1;
}
-
if (!err) {
- Debug("dns", "Adding nameserver %d.%d.%d.%d:%d to nameserver list",
- DOT_SEPARATED(nameserver_ip[j]), nameserver_port[j]);
+ char buff[INET6_ADDRPORTSTRLEN];
+
+ ink_inet_init(*ss);
+ ink_inet_pton(ns, ss);
+ ink_inet_port_cast(ss) = prt;
+
+ Debug("dns", "Adding nameserver %s to nameserver list",
+ ink_inet_nptop(ss, buff, sizeof(buff))
+ );
++j;
- } else
- nameserver_ip[j] = 0;
+ }
ns = (char *) ink_strtok_r(NULL, " ,;\t\r", &last);
}
xfree(ns_list);
// Terminate the list for ink_res_init
- nameserver_ip[j] = 0;
+ ink_inet_invalidate(nameserver[j]);
// The default domain (4th param) and search list (5th param) will
// come from /etc/resolv.conf.
- if (ink_res_init(&l_res, &nameserver_ip[0], &nameserver_port[0], NULL, NULL, dns_resolv_conf) < 0)
+ if (ink_res_init(&l_res, nameserver, NULL, NULL, dns_resolv_conf) < 0)
Warning("Failed to build DNS res records for the servers (%s). Using resolv.conf.", dns_ns_list);
} else {
if (ink_res_init(&l_res, NULL, NULL, NULL, NULL, dns_resolv_conf) < 0)
@@ -266,7 +336,7 @@ DNSEntry::init(const char *x, int len, i
mutex = dnsH->mutex;
- if (qtype == T_A || qtype == T_SRV) {
+ if (IsAddrReply(qtype) || qtype == T_SRV) {
if (len) {
len = len > (MAXDNAME - 1) ? (MAXDNAME - 1) : len;
memcpy(qname, x, len);
@@ -278,34 +348,8 @@ DNSEntry::init(const char *x, int len, i
qname_len = strlen(qname);
}
} else { //T_PTR
- char *p = qname;
- unsigned char *u = (unsigned char *) x;
-
- if (u[3] > 99)
- *p++ = (u[3] / 100) + '0';
- if (u[3] > 9)
- *p++ = ((u[3] / 10) % 10) + '0';
- *p++ = u[3] % 10 + '0';
- *p++ = '.';
- if (u[2] > 99)
- *p++ = (u[2] / 100) + '0';
- if (u[2] > 9)
- *p++ = ((u[2] / 10) % 10) + '0';
- *p++ = u[2] % 10 + '0';
- *p++ = '.';
- if (u[1] > 99)
- *p++ = (u[1] / 100) + '0';
- if (u[1] > 9)
- *p++ = ((u[1] / 10) % 10) + '0';
- *p++ = u[1] % 10 + '0';
- *p++ = '.';
- if (u[0] > 99)
- *p++ = (u[0] / 100) + '0';
- if (u[0] > 9)
- *p++ = ((u[0] / 10) % 10) + '0';
- *p++ = u[0] % 10 + '0';
- *p++ = '.';
- ink_strncpy(p, "in-addr.arpa", MAXDNAME - (p - qname + 1));
+ if (static_cast<int>(INK_IP6_SIZE) == len) make_ipv6_ptr(x, qname);
+ else make_ipv4_ptr(x, qname);
}
SET_HANDLER((DNSEntryHandler) & DNSEntry::mainEvent);
@@ -317,15 +361,17 @@ DNSEntry::init(const char *x, int len, i
*/
void
-DNSHandler::open_con(unsigned int aip, int aport, bool failed, int icon)
+DNSHandler::open_con(sockaddr_storage const* target, bool failed, int icon)
{
+ char addr_buff[INET6_ADDRPORTSTRLEN];
PollDescriptor *pd = get_PollDescriptor(dnsProcessor.thread);
- Debug("dns", "open_con: opening connection %d.%d.%d.%d:%d", DOT_SEPARATED(aip), aport);
+ Debug("dns", "open_con: opening connection %s", ink_inet_nptop(target, addr_buff, sizeof(addr_buff)));
if (!icon) {
- ip = aip;
- port = aport;
+// ip = aip;
+// port = aport;
+ ink_inet_copy(&addr, target);
}
if (con[icon].fd != NO_FD) { // Remove old FD from epoll fd
@@ -333,8 +379,8 @@ DNSHandler::open_con(unsigned int aip, i
con[icon].close();
}
- if (con[icon].connect(aip, aport, NON_BLOCKING_CONNECT, CONNECT_WITH_UDP, NON_BLOCKING, BIND_RANDOM_PORT) < 0) {
- Debug("dns", "opening connection %d.%d.%d.%d:%d FAILED for %d", DOT_SEPARATED(aip), aport, icon);
+ if (con[icon].connect(target, NON_BLOCKING_CONNECT, CONNECT_WITH_UDP, NON_BLOCKING, BIND_RANDOM_PORT) < 0) {
+ Debug("dns", "opening connection %s FAILED for %d", addr_buff, icon);
if (!failed) {
if (dns_ns_rr)
rr_failure(icon);
@@ -348,7 +394,7 @@ DNSHandler::open_con(unsigned int aip, i
Error("[iocore_dns] open_con: Failed to add %d server to epoll list\n", icon);
} else {
con[icon].num = icon;
- Debug("dns", "opening connection %d.%d.%d.%d:%d SUCCEEDED for %d", DOT_SEPARATED(aip), aport, icon);
+ Debug("dns", "opening connection %s SUCCEEDED for %d", addr_buff, icon);
}
}
}
@@ -364,17 +410,16 @@ DNSHandler::startEvent(int event, Event
NOWARN_UNUSED(event);
//
// If this is for the default server, get it
- //
+ // AMC: I love this cut and paste re-use...sigh.
Debug("dns", "DNSHandler::startEvent: on thread %d\n", e->ethread->id);
- if (ip == DEFAULT_DOMAIN_NAME_SERVER) {
+ if (!ink_inet_is_valid(addr)) {
// seems that res_init always sets m_res.nscount to at least 1!
if (!m_res->nscount)
Warning("bad configurations: no nameservers given");
- struct sockaddr_in *sa = &m_res->nsaddr_list[0].sin;
- ip = sa->sin_addr.s_addr;
- if (!ip)
- ip = ink_inet_addr("127.0.0.1");
- port = ntohs(sa->sin_port);
+ if (!ink_inet_copy(addr, m_res->nsaddr_list[0])) {
+ ink_inet_init(addr);
+ ink_inet_ip4_set(addr, INADDR_LOOPBACK, DOMAIN_SERVICE_PORT);
+ }
}
if (!dns_handler_initialized) {
@@ -390,18 +435,20 @@ DNSHandler::startEvent(int event, Event
max_nscount = MAX_NAMED;
n_con = 0;
for (int i = 0; i < max_nscount; i++) {
- struct sockaddr_in *sa = &m_res->nsaddr_list[i].sin;
- ip = sa->sin_addr.s_addr;
- if (ip) {
- port = ntohs(sa->sin_port);
- open_con(ip, port, false, n_con);
+ char buff[INET6_ADDRPORTSTRLEN];
+ sockaddr_storage *sa = &m_res->nsaddr_list[i];
+ if (ink_inet_is_valid(sa)) {
+ open_con(sa, false, n_con);
++n_con;
- Debug("dns_pas", "opened connection to %d.%d.%d.%d:%d, n_con = %d", DOT_SEPARATED(ip), port, n_con);
+ Debug("dns_pas", "opened connection to %s, n_con = %d",
+ ink_inet_nptop(sa, buff, sizeof(buff)),
+ n_con
+ );
}
}
dns_ns_rr_init_down = 0;
} else {
- open_con(ip, port);
+ open_con(&addr);
n_con = 1;
}
e->ethread->schedule_every(this, DNS_PERIOD);
@@ -423,19 +470,19 @@ DNSHandler::startEvent_sdns(int event, E
NOWARN_UNUSED(event);
Debug("dns", "DNSHandler::startEvent_sdns: on thread %d\n", e->ethread->id);
- if (ip == DEFAULT_DOMAIN_NAME_SERVER) {
+ if (!ink_inet_is_valid(addr)) { // use default
// seems that res_init always sets m_res.nscount to at least 1!
if (!m_res->nscount)
Warning("bad nameserver config, fallback to 127.0.0.1");
- struct sockaddr_in *sa = &m_res->nsaddr_list[0].sin;
- ip = sa->sin_addr.s_addr;
- if (!ip)
- ip = ink_inet_addr("127.0.0.1");
- port = ntohs(sa->sin_port);
+ sockaddr_storage addr;
+ if (!ink_inet_copy(addr, m_res->nsaddr_list[0])) {
+ ink_inet_init(addr);
+ ink_inet_ip4_set(addr, INADDR_LOOPBACK, DOMAIN_SERVICE_PORT);
+ }
}
SET_HANDLER(&DNSHandler::mainEvent);
- open_con(ip, port, false, n_con);
+ open_con(&addr, false, n_con);
++n_con; // TODO should n_con be zeroed?
e->schedule_every(DNS_PERIOD);
@@ -454,7 +501,8 @@ _ink_res_mkquery(ink_res_state res, char
void
DNSHandler::recover()
{
- Warning("connection to DNS server %d.%d.%d.%d restored", DOT_SEPARATED(ip));
+ char buff[INET6_ADDRSTRLEN];
+ Warning("connection to DNS server %s restored", ink_inet_ntop(&addr, buff, sizeof(buff)));
name_server = 0;
switch_named(name_server);
}
@@ -466,17 +514,18 @@ DNSHandler::retry_named(int ndx, ink_hrt
Debug("dns", "retry_named: reopening DNS connection for index %d", ndx);
last_primary_reopen = t;
con[ndx].close();
- struct sockaddr_in *sa;
- sa = &m_res->nsaddr_list[ndx].sin;
- ip = sa->sin_addr.s_addr;
- port = ntohs(sa->sin_port);
+ open_con(&m_res->nsaddr_list[ndx], true, ndx);
+// sockaddr_storage *sa;
+// sa = &m_res->nsaddr_list[ndx];
+// ip = sa->sin_addr.s_addr;
+// port = ntohs(sa->sin_port);
- open_con(ip, port, true, ndx);
+// open_con(ip, port, true, ndx);
}
char buffer[MAX_DNS_PACKET_LEN];
Debug("dns", "trying to resolve '%s' from DNS connection, ndx %d", try_server_names[try_servers], ndx);
- int r = _ink_res_mkquery(m_res, try_server_names[try_servers], T_A, buffer);
+ int r = _ink_res_mkquery(m_res, try_server_names[try_servers], prefer_ipv6_p() ? T_AAAA : T_A, buffer);
try_servers = (try_servers + 1) % SIZE(try_server_names);
ink_assert(r >= 0);
if (r >= 0) { // looking for a bounce
@@ -492,14 +541,14 @@ DNSHandler::try_primary_named(bool reope
if (reopen && ((t - last_primary_reopen) > DNS_PRIMARY_REOPEN_PERIOD)) {
Debug("dns", "try_primary_named: reopening primary DNS connection");
last_primary_reopen = t;
- open_con(ip, port, true, 0);
+ open_con(&addr, true, 0);
}
if ((t - last_primary_retry) > DNS_PRIMARY_RETRY_PERIOD) {
char buffer[MAX_DNS_PACKET_LEN];
last_primary_retry = t;
Debug("dns", "trying to resolve '%s' from primary DNS connection", try_server_names[try_servers]);
- int r = _ink_res_mkquery(m_res, try_server_names[try_servers], T_A, buffer);
+ int r = _ink_res_mkquery(m_res, try_server_names[try_servers], prefer_ipv6_p() ? T_AAAA : T_A, buffer);
// if try_server_names[] is not full, round-robin within the
// filled entries.
if (local_num_entries < DEFAULT_NUM_TRY_SERVER)
@@ -534,29 +583,37 @@ DNSHandler::failover()
Debug("dns", "failover: initiating failover attempt, current name_server=%d", name_server);
// no hope, if we have only one server
if (m_res->nscount > 1) {
+ char buff1[INET6_ADDRSTRLEN], buff2[INET6_ADDRSTRLEN];
int max_nscount = m_res->nscount;
if (max_nscount > MAX_NAMED)
max_nscount = MAX_NAMED;
- unsigned int old_ip = m_res->nsaddr_list[name_server].sin.sin_addr.s_addr;
+ sockaddr_storage const* old_addr = &m_res->nsaddr_list[name_server];
name_server = (name_server + 1) % max_nscount;
Debug("dns", "failover: failing over to name_server=%d", name_server);
- struct sockaddr_in *sa = &m_res->nsaddr_list[name_server].sin;
-
- Warning("failover: connection to DNS server %d.%d.%d.%d lost, move to %d.%d.%d.%d",
- DOT_SEPARATED(old_ip), DOT_SEPARATED(sa->sin_addr.s_addr));
-
- unsigned int tip = sa->sin_addr.s_addr;
+ sockaddr_storage target;
+ ink_inet_copy(target, m_res->nsaddr_list[name_server]);
- if (!tip)
- tip = ink_inet_addr("127.0.0.1");
- open_con(tip, ntohs(sa->sin_port), true, name_server);
+ Warning("failover: connection to DNS server %s lost, move to %s",
+ ink_inet_ntop(old_addr, buff1, sizeof(buff1)),
+ ink_inet_ntop(&target, buff2, sizeof(buff2))
+ );
+
+ if (!ink_inet_is_valid(target)) {
+ ink_inet_init(target);
+ ink_inet_ip4_set(target, INADDR_LOOPBACK, DOMAIN_SERVICE_PORT);
+ }
+ open_con(&target, true, name_server);
if (n_con <= name_server)
n_con = name_server + 1;
switch_named(name_server);
- } else
- Warning("failover: connection to DNS server %d.%d.%d.%d lost, retrying", DOT_SEPARATED(ip));
+ } else {
+ char buff[INET6_ADDRSTRLEN];
+ Warning("failover: connection to DNS server %s lost, retrying",
+ ink_inet_ntop(&addr, buff, sizeof(buff))
+ );
+ }
}
/** Mark one of the nameservers as down. */
@@ -565,13 +622,13 @@ DNSHandler::rr_failure(int ndx)
{
// no hope, if we have only one server
if (!ns_down[ndx]) {
+ char buff[INET6_ADDRSTRLEN];
// mark this nameserver as down
Debug("dns", "rr_failure: Marking nameserver %d as down", ndx);
ns_down[ndx] = 1;
-
- struct sockaddr_in *sa = &m_res->nsaddr_list[ndx].sin;
- unsigned int tip = sa->sin_addr.s_addr;
- Warning("connection to DNS server %d.%d.%d.%d lost, marking as down", DOT_SEPARATED(tip));
+ Warning("connection to DNS server %s lost, marking as down",
+ ink_inet_ntop(&m_res->nsaddr_list[ndx], buff, sizeof(buff))
+ );
}
int nscount = m_res->nscount;
@@ -633,17 +690,18 @@ DNSHandler::recv_dns(int event, Event *e
NOWARN_UNUSED(event);
NOWARN_UNUSED(e);
DNSConnection *dnsc = NULL;
+ char buff[INET6_ADDRSTRLEN];
while ((dnsc = (DNSConnection *) triggered.dequeue())) {
while (1) {
- struct sockaddr_in sa_from;
- socklen_t sa_length = sizeof(sa_from); // TODO: I'm guessing when we support IPv6,this will have to change.
+ sockaddr_storage from;
+ socklen_t from_length = sizeof(from);
if (!hostent_cache)
hostent_cache = dnsBufAllocator.alloc();
HostEnt *buf = hostent_cache;
- int res = socketManager.recvfrom(dnsc->fd, buf->buf, MAX_DNS_PACKET_LEN, 0, (struct sockaddr *) &sa_from, &sa_length);
+ int res = socketManager.recvfrom(dnsc->fd, buf->buf, MAX_DNS_PACKET_LEN, 0, &from, &from_length);
if (res == -EAGAIN)
break;
@@ -657,8 +715,10 @@ DNSHandler::recv_dns(int event, Event *e
}
// verify that this response came from the correct server
- if (dnsc->sa.sin_addr.s_addr != sa_from.sin_addr.s_addr) {
- Warning("received DNS response from unexpected named %d.%d.%d.%d", DOT_SEPARATED(sa_from.sin_addr.s_addr));
+ if (0 != ink_inet_cmp(dnsc->sa, from)) {
+ Warning("received DNS response from unexpected named %s",
+ ink_inet_ntop(&from, buff, sizeof(buff))
+ );
continue;
}
hostent_cache = 0;
@@ -669,9 +729,9 @@ DNSHandler::recv_dns(int event, Event *e
if (good_rcode(buf->buf)) {
received_one(dnsc->num);
if (ns_down[dnsc->num]) {
- struct sockaddr_in *sa = &m_res->nsaddr_list[dnsc->num].sin;
-
- Warning("connection to DNS server %d.%d.%d.%d restored", DOT_SEPARATED(sa->sin_addr.s_addr));
+ Warning("connection to DNS server %s restored",
+ ink_inet_ntop(&m_res->nsaddr_list[dnsc->num], buff, sizeof(buff))
+ );
ns_down[dnsc->num] = 0;
}
}
@@ -766,10 +826,10 @@ get_entry(DNSHandler *h, char *qname, in
{
for (DNSEntry *e = h->entries.head; e; e = (DNSEntry *) e->link.next) {
if (e->qtype == qtype) {
- if (qtype == T_A) {
+ if (IsAddrReply(qtype)) {
if (!strcmp(qname, e->qname))
return e;
- } else if (*(unsigned int *) qname == *(unsigned int *) e->qname)
+ } else if (0 == memcmp(qname, e->qname, e->qname_len))
return e;
}
}
@@ -871,7 +931,7 @@ write_dns_event(DNSHandler *h, DNSEntry
h->release_query_id(e->id[dns_retries - e->retries]);
}
e->id[dns_retries - e->retries] = i;
- Debug("dns", "send query for %s to fd %d", e->qname, h->con[h->name_server].fd);
+ Debug("dns", "send query (qtype=%d) for %s to fd %d", e->qtype, e->qname, h->con[h->name_server].fd);
int s = socketManager.send(h->con[h->name_server].fd, buffer, r, 0);
if (s != r) {
@@ -1013,6 +1073,18 @@ dns_result(DNSHandler *h, DNSEntry *e, H
--(e->retries);
write_dns(h);
return;
+ } else if (prefer_ipv6_p() && e->qtype == T_AAAA) {
+ Debug("dns", "Trying A after AAAA failure for %s", e->qname);
+ e->retries = dns_retries;
+ e->qtype = T_A;
+ write_dns(h);
+ return;
+ } else if (!prefer_ipv6_p() && e->qtype == T_A) {
+ Debug("dns", "Trying AAAA after A failure for %s", e->qname);
+ e->retries = dns_retries;
+ e->qtype = T_AAAA;
+ write_dns(h);
+ return;
} else if (e->domains && *e->domains) {
do {
Debug("dns", "domain extending %s", e->qname);
@@ -1071,10 +1143,12 @@ dns_result(DNSHandler *h, DNSEntry *e, H
}
h->entries.remove(e);
- if (e->qtype == T_A) {
- unsigned int tip = ent != NULL ? *(unsigned int *) ent->ent.h_addr_list[0] : 0;
- Debug("dns", "%s result for %s = %d.%d.%d.%d retry %d",
- ent ? "SUCCESS" : "FAIL", e->qname, DOT_SEPARATED(tip), retry);
+ if (IsAddrReply(e->qtype)) {
+ char buff[INET6_ADDRSTRLEN];
+ char const* ptr = "<none>";
+ if (ent) ptr = inet_ntop(e->qtype == T_AAAA ? AF_INET6 : AF_INET, ent->ent.h_addr_list[0], buff, sizeof(buff));
+ Debug("dns", "%s result for %s = %s retry %d",
+ ent ? "SUCCESS" : "FAIL", e->qname, ptr, retry);
} else {
Debug("dns", "%s result for %s = %s retry %d",
ent ? "SUCCESS" : "FAIL", e->qname, (ent != NULL ? ent->ent.h_name : "<not found>"), retry);
@@ -1249,7 +1323,7 @@ dns_process(DNSHandler *handler, HostEnt
}
cp += n + QFIXEDSZ;
- if (e->qtype == T_A) {
+ if (IsAddrReply(e->qtype)) {
if (-1 == rname_len)
n = strlen((char *)bp) + 1;
else
@@ -1324,7 +1398,7 @@ dns_process(DNSHandler *handler, HostEnt
//
// Decode cname
//
- if (e->qtype == T_A && type == T_CNAME) {
+ if (IsAddrReply(e->qtype) && type == T_CNAME) {
if (ap >= &buf->host_aliases[DNS_MAX_ALIASES - 1])
continue;
n = ink_dn_expand((u_char *) h, eom, cp, tbuf, sizeof(tbuf));
@@ -1402,7 +1476,7 @@ dns_process(DNSHandler *handler, HostEnt
buf->srv_hosts.insert(s);
++num_srv;
- } else if (type == T_A) {
+ } else if (IsAddrReply(type)) {
if (answer) {
if (n != buf->ent.h_length) {
cp += n;
@@ -1414,7 +1488,7 @@ dns_process(DNSHandler *handler, HostEnt
buf->ent.h_addrtype = C_IN;
buf->ent.h_name = (char *) bp;
nn = strlen((char *) bp) + 1;
- Debug("dns", "received A name = %s", bp);
+ Debug("dns", "received %s name = %s", QtypeName(type), bp);
bp += nn;
buflen -= nn;
}
@@ -1423,13 +1497,16 @@ dns_process(DNSHandler *handler, HostEnt
*hap++ = cp;
cp += n;
} else {
+ char ip_string[INET6_ADDRSTRLEN];
bp = (unsigned char *) align_pointer_forward(bp, sizeof(int));
if (bp + n >= buf->hostbuf + DNS_HOSTBUF_SIZE) {
++error;
break;
}
memcpy((*hap++ = bp), cp, n);
- Debug("dns", "received A = %d.%d.%d.%d", DOT_SEPARATED(*(unsigned int *) bp));
+ Debug("dns", "received %s = %s", QtypeName(type),
+ inet_ntop(T_AAAA == type ? AF_INET6 : AF_INET, bp, ip_string, sizeof(ip_string))
+ );
bp += n;
cp += n;
}
Modified: trafficserver/traffic/branches/ssc/iocore/dns/DNSConnection.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/DNSConnection.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/DNSConnection.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/DNSConnection.cc Tue May 24 04:11:36 2011
@@ -50,7 +50,7 @@
DNSConnection::DNSConnection():
fd(NO_FD), num(0), generator((uint32_t)((uintptr_t)time(NULL) ^ (uintptr_t) this)), handler(NULL)
{
- memset(&sa, 0, sizeof(struct sockaddr_in));
+ memset(&sa, 0, sizeof(sockaddr_storage));
}
DNSConnection::~DNSConnection()
@@ -79,21 +79,22 @@ DNSConnection::trigger()
}
int
-DNSConnection::connect(unsigned int ip, int port,
+DNSConnection::connect(sockaddr_storage const* target,
bool non_blocking_connect, bool use_tcp, bool non_blocking, bool bind_random_port)
{
ink_assert(fd == NO_FD);
int res = 0;
short Proto;
+ uint8_t family = target->ss_family;
if (use_tcp) {
Proto = IPPROTO_TCP;
- if ((res = socketManager.socket(AF_INET, SOCK_STREAM, 0)) < 0)
+ if ((res = socketManager.socket(family, SOCK_STREAM, 0)) < 0)
goto Lerror;
} else {
Proto = IPPROTO_UDP;
- if ((res = socketManager.socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ if ((res = socketManager.socket(family, SOCK_DGRAM, 0)) < 0)
goto Lerror;
}
@@ -102,15 +103,17 @@ DNSConnection::connect(unsigned int ip,
if (bind_random_port) {
int retries = 0;
while (retries++ < 10000) {
- struct sockaddr_in bind_sa;
- memset(&sa, 0, sizeof(bind_sa));
- bind_sa.sin_family = AF_INET;
- bind_sa.sin_addr.s_addr = INADDR_ANY;
+ sockaddr_storage bind_sa;
+ ink_inet_init(bind_sa);
+ if (ink_inet_is_ip6(target))
+ ink_inet_ip6_addr_cast(&bind_sa) = in6addr_any;
+ else
+ ink_inet_ip4_set(&bind_sa, INADDR_ANY);
uint32_t p = generator.random();
- p = (uint16_t)((p % (LAST_RANDOM_PORT - FIRST_RANDOM_PORT)) + FIRST_RANDOM_PORT);
- bind_sa.sin_port = htons(p);
+ p = static_cast<uint16_t>((p % (LAST_RANDOM_PORT - FIRST_RANDOM_PORT)) + FIRST_RANDOM_PORT);
+ ink_inet_port_cast(bind_sa) = htons(p);
Debug("dns", "random port = %u\n", p);
- if ((res = socketManager.ink_bind(fd, (struct sockaddr *) &bind_sa, sizeof(bind_sa), Proto)) < 0) {
+ if ((res = socketManager.ink_bind(fd, &bind_sa, sizeof(bind_sa), Proto)) < 0) {
continue;
}
goto Lok;
@@ -119,11 +122,6 @@ DNSConnection::connect(unsigned int ip,
Lok:;
}
- sa.sin_family = AF_INET;
- sa.sin_port = htons(port);
- sa.sin_addr.s_addr = ip;
- memset(&sa.sin_zero, 0, 8);
-
if (non_blocking_connect)
if ((res = safe_nonblocking(fd)) < 0)
goto Lerror;
@@ -143,7 +141,7 @@ DNSConnection::connect(unsigned int ip,
goto Lerror;
#endif
- res =::connect(fd, (struct sockaddr *) &sa, sizeof(struct sockaddr_in));
+ res =::connect(fd, ink_inet_sa_cast(target), sizeof(*target));
if (!res || ((res < 0) && (errno == EINPROGRESS || errno == EWOULDBLOCK))) {
if (!non_blocking_connect && non_blocking)
Modified: trafficserver/traffic/branches/ssc/iocore/dns/I_DNSProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/I_DNSProcessor.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/I_DNSProcessor.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/I_DNSProcessor.h Tue May 24 04:11:36 2011
@@ -31,8 +31,7 @@
#define DNS_MAX_ADDRS 35
#define DNS_HOSTBUF_SIZE 8192
#define DOMAIN_SERVICE_PORT 53
-#define DEFAULT_DOMAIN_NAME_SERVER 0 // use the default server
-
+#define DEFAULT_DOMAIN_NAME_SERVER 0
/**
All buffering required to handle a DNS receipt. For asynchronous DNS,
@@ -88,7 +87,12 @@ struct DNSProcessor: public Processor
// Open/close a link to a 'named' (done in start())
//
- void open(unsigned int ip = DEFAULT_DOMAIN_NAME_SERVER, int port = DOMAIN_SERVICE_PORT, int options = _res.options);
+ void open(
+ sockaddr_storage const* target = 0, // 0 -> use default
+// unsigned int ip = DEFAULT_DOMAIN_NAME_SERVER,
+// int port = DOMAIN_SERVICE_PORT,
+ int options = _res.options
+ );
DNSProcessor();
Modified: trafficserver/traffic/branches/ssc/iocore/dns/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/Makefile.am Tue May 24 04:11:36 2011
@@ -19,11 +19,11 @@
if STANDALONE_IOCORE
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records
+ -I$(top_srcdir)/lib
else
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records \
+ -I$(top_srcdir)/lib \
-I$(top_srcdir)/proxy \
-I$(top_srcdir)/proxy/http \
-I$(top_srcdir)/proxy/hdrs \
Modified: trafficserver/traffic/branches/ssc/iocore/dns/P_DNSConnection.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/P_DNSConnection.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/P_DNSConnection.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/P_DNSConnection.h Tue May 24 04:11:36 2011
@@ -60,14 +60,14 @@ struct DNSHandler;
struct DNSConnection
{
int fd;
- struct sockaddr_in sa;
+ sockaddr_storage sa;
int num;
LINK(DNSConnection, link);
EventIO eio;
InkRand generator;
DNSHandler* handler;
- int connect(unsigned int ip, int port,
+ int connect(sockaddr_storage const* target,
bool non_blocking_connect = NON_BLOCKING_CONNECT,
bool use_tcp = CONNECT_WITH_TCP, bool non_blocking = NON_BLOCKING, bool bind_random_port = BIND_ANY_PORT);
int close();
Modified: trafficserver/traffic/branches/ssc/iocore/dns/P_DNSProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/P_DNSProcessor.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/P_DNSProcessor.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/P_DNSProcessor.h Tue May 24 04:11:36 2011
@@ -198,8 +198,9 @@ struct DNSEntry;
*/
struct DNSHandler: public Continuation
{
- unsigned int ip;
- int port;
+// unsigned int ip;
+// int port;
+ sockaddr_storage addr;
int ifd[MAX_NAMED];
int n_con;
DNSConnection con[MAX_NAMED];
@@ -225,7 +226,6 @@ struct DNSHandler: public Continuation
// bitmap of query ids in use
uint64_t qid_in_flight[(USHRT_MAX+1)/64];
-
void received_one(int i)
{
failover_number[i] = failover_soon_number[i] = crossed_failover_number[i] = 0;
@@ -261,7 +261,7 @@ struct DNSHandler: public Continuation
int startEvent_sdns(int event, Event *e);
int mainEvent(int event, Event *e);
- void open_con(unsigned int aip, int aport, bool failed = false, int icon = 0);
+ void open_con(sockaddr_storage const* target, bool failed = false, int icon = 0);
void failover();
void rr_failure(int ndx);
void recover();
@@ -287,10 +287,13 @@ struct DNSHandler: public Continuation
TS_INLINE DNSHandler::DNSHandler()
- : Continuation(NULL), ip(0), port(0), n_con(0), options(0), in_flight(0), name_server(0), in_write_dns(0),
+ : Continuation(NULL),
+ // ip(0), port(0),
+ n_con(0), options(0), in_flight(0), name_server(0), in_write_dns(0),
hostent_cache(0), last_primary_retry(0), last_primary_reopen(0),
m_res(0), txn_lookup_timeout(0), generator((uint32_t)((uintptr_t)time(NULL) ^ (uintptr_t)this))
{
+ ink_inet_init(addr);
for (int i = 0; i < MAX_NAMED; i++) {
ifd[i] = -1;
failover_number[i] = 0;
@@ -304,8 +307,5 @@ TS_INLINE DNSHandler::DNSHandler()
Debug("net_epoll", "inline DNSHandler::DNSHandler()");
}
-#define DOT_SEPARATED(_x) \
- ((unsigned char*)&(_x))[0], ((unsigned char*)&(_x))[1], \
- ((unsigned char*)&(_x))[2], ((unsigned char*)&(_x))[3]
+# endif
-#endif
Modified: trafficserver/traffic/branches/ssc/iocore/dns/P_SplitDNSProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/P_SplitDNSProcessor.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/P_SplitDNSProcessor.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/P_SplitDNSProcessor.h Tue May 24 04:11:36 2011
@@ -162,7 +162,7 @@ TS_INLINE bool SplitDNSConfig::isSplitDN
-------------------------------------------------------------- */
struct DNSServer
{
- unsigned int x_server_ip[MAXNS];
+ sockaddr_storage x_server_ip[MAXNS];
char x_dns_ip_line[MAXDNAME * 2];
char x_def_domain[MAXDNAME];
Modified: trafficserver/traffic/branches/ssc/iocore/dns/SplitDNS.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/dns/SplitDNS.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/dns/SplitDNS.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/dns/SplitDNS.cc Tue May 24 04:11:36 2011
@@ -364,14 +364,9 @@ SplitDNSRecord::ProcessDNSHosts(char *va
*tmp = 0;
}
- unsigned int addr = inet_addr(current);
-
- if (((uint32_t)-1) == htonl(addr)) {
+ if (0 != ink_inet_pton(current, m_servers.x_server_ip + i))
return "invalid IP address given for a DNS server";
- }
-
- m_servers.x_server_ip[i] = addr;
- m_servers.x_dns_server_port[i] = port ? port : NAMESERVER_PORT;
+ ink_inet_port_cast(m_servers.x_server_ip) = (port ? port : NAMESERVER_PORT);
if ((MAXDNAME * 2 - 1) > totsz) {
sz = strlen(current);
@@ -506,27 +501,27 @@ SplitDNSRecord::Init(matcher_line * line
}
}
- if (this->m_servers.x_server_ip[0] == 0) {
+ if (!ink_inet_is_valid(this->m_servers.x_server_ip[0])) {
snprintf(errBuf, errBufLen, "%s No server specified in splitdns.config at line %d", modulePrefix, line_num);
return errBuf;
}
DNSHandler *dnsH = new DNSHandler;
ink_res_state res = new __ink_res_state;
+ char ip_string[INET6_ADDRPORTSTRLEN];
memset(res, 0, sizeof(__ink_res_state));
if ((-1 == ink_res_init(res, m_servers.x_server_ip, m_servers.x_dns_server_port,
m_servers.x_def_domain, m_servers.x_domain_srch_list, NULL))) {
- snprintf(errBuf, errBufLen, "Failed to build res record for the servers %u ... on port %d",
- m_servers.x_server_ip[0], m_servers.x_dns_server_port[0]);
+ snprintf(errBuf, errBufLen, "Failed to build res record for the servers %s",
+ ink_inet_nptop(m_servers.x_server_ip, ip_string, sizeof ip_string));
return errBuf;
}
dnsH->m_res = res;
dnsH->mutex = SplitDNSConfig::dnsHandler_mutex;
dnsH->options = res->options;
- dnsH->ip = DEFAULT_DOMAIN_NAME_SERVER;
- dnsH->port = DOMAIN_SERVICE_PORT;
+ ink_inet_invalidate(dnsH->addr);
m_servers.x_dnsH = dnsH;
@@ -575,13 +570,10 @@ SplitDNSRecord::UpdateMatch(SplitDNSResu
void
SplitDNSRecord::Print()
{
- struct in_addr address;
+ char s[INET6_ADDRPORTSTRLEN];
for (int i = 0; i < m_dnsSrvr_cnt; i++) {
- address.s_addr = m_servers.x_server_ip[i];
- char *pAdr = inet_ntoa(address);
-
- Debug("splitdns_config", " %s:%d ", pAdr, m_servers.x_dns_server_port[i]);
+ Debug("splitdns_config", " %s ", ink_inet_nptop(m_servers.x_server_ip, s, sizeof(s)));
}
}
Modified: trafficserver/traffic/branches/ssc/iocore/eventsystem/I_EventSystem.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/eventsystem/I_EventSystem.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/eventsystem/I_EventSystem.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/eventsystem/I_EventSystem.h Tue May 24 04:11:36 2011
@@ -46,7 +46,7 @@
#include "I_Thread.h"
#include "I_VIO.h"
#include "I_VConnection.h"
-#include "I_RecProcess.h"
+#include <records/I_RecProcess.h>
#include "I_SocketManager.h"
#define EVENT_SYSTEM_MODULE_MAJOR_VERSION 1
Modified: trafficserver/traffic/branches/ssc/iocore/eventsystem/I_SocketManager.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/eventsystem/I_SocketManager.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/eventsystem/I_SocketManager.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/eventsystem/I_SocketManager.h Tue May 24 04:11:36 2011
@@ -64,7 +64,7 @@ struct SocketManager
int64_t pread(int fd, void *buf, int len, off_t offset, char *tag = NULL);
int recv(int s, void *buf, int len, int flags);
- int recvfrom(int fd, void *buf, int size, int flags, struct sockaddr *addr, socklen_t *addrlen);
+ int recvfrom(int fd, void *buf, int size, int flags, sockaddr_storage *addr, socklen_t *addrlen);
int64_t write(int fd, void *buf, int len, void *pOLP = NULL);
int64_t writev(int fd, struct iovec *vector, size_t count);
@@ -72,7 +72,7 @@ struct SocketManager
int64_t pwrite(int fd, void *buf, int len, off_t offset, char *tag = NULL);
int send(int fd, void *buf, int len, int flags);
- int sendto(int fd, void *buf, int len, int flags, struct sockaddr *to, int tolen);
+ int sendto(int fd, void *buf, int len, int flags, sockaddr_storage *to, int tolen);
int sendmsg(int fd, struct msghdr *m, int flags, void *pOLP = 0);
int64_t lseek(int fd, off_t offset, int whence);
int fstat(int fd, struct stat *);
@@ -105,7 +105,7 @@ struct SocketManager
int dup(int s);
// result is the fd or -errno
- int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
+ int accept(int s, sockaddr_storage* addr, socklen_t *addrlen);
// manipulate socket buffers
int get_sndbuf_size(int s);
@@ -113,13 +113,13 @@ struct SocketManager
int set_sndbuf_size(int s, int size);
int set_rcvbuf_size(int s, int size);
- int getsockname(int s, struct sockaddr *, socklen_t *);
+ int getsockname(int s, sockaddr_storage *, socklen_t *);
/** Close the socket.
@return 0 if successful, -errno on error.
*/
int close(int sock);
- int ink_bind(int s, struct sockaddr *name, int namelen, short protocol = 0);
+ int ink_bind(int s, sockaddr_storage const* name, int namelen, short protocol = 0);
int pagesize;
Modified: trafficserver/traffic/branches/ssc/iocore/eventsystem/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/eventsystem/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/eventsystem/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/eventsystem/Makefile.am Tue May 24 04:11:36 2011
@@ -17,7 +17,7 @@
# limitations under the License.
AM_CPPFLAGS = \
- -I$(top_srcdir)/lib/records
+ -I$(top_srcdir)/lib
DEFS += @IOCORE_MODULARIZED_DEFS@
Modified: trafficserver/traffic/branches/ssc/iocore/eventsystem/P_UnixSocketManager.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/eventsystem/P_UnixSocketManager.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/eventsystem/P_UnixSocketManager.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/eventsystem/P_UnixSocketManager.h Tue May 24 04:11:36 2011
@@ -60,11 +60,11 @@ transient_error()
// Timing done in the connectionManager
//
TS_INLINE int
-SocketManager::accept(int s, struct sockaddr *addr, socklen_t *addrlen)
+SocketManager::accept(int s, sockaddr_storage* addr, socklen_t *addrlen)
{
int r;
do {
- r =::accept(s, addr, addrlen);
+ r =::accept(s, ink_inet_sa_cast(addr), addrlen);
if (likely(r >= 0))
break;
r = -errno;
@@ -187,11 +187,11 @@ SocketManager::recv(int fd, void *buf, i
}
TS_INLINE int
-SocketManager::recvfrom(int fd, void *buf, int size, int flags, struct sockaddr *addr, socklen_t *addrlen)
+SocketManager::recvfrom(int fd, void *buf, int size, int flags, sockaddr_storage *addr, socklen_t *addrlen)
{
int r;
do {
- r =::recvfrom(fd, (char *) buf, size, flags, addr, addrlen);
+ r =::recvfrom(fd, (char *) buf, size, flags, ink_inet_sa_cast(addr), addrlen);
if (unlikely(r < 0))
r = -errno;
} while (r == -EINTR);
@@ -254,11 +254,11 @@ SocketManager::send(int fd, void *buf, i
}
TS_INLINE int
-SocketManager::sendto(int fd, void *buf, int len, int flags, struct sockaddr *to, int tolen)
+SocketManager::sendto(int fd, void *buf, int len, int flags, sockaddr_storage *to, int tolen)
{
int r;
do {
- if (unlikely((r =::sendto(fd, (char *) buf, len, flags, to, tolen)) < 0))
+ if (unlikely((r =::sendto(fd, (char *) buf, len, flags, ink_inet_sa_cast(to), tolen)) < 0))
r = -errno;
} while (r == -EINTR);
return r;
@@ -502,9 +502,9 @@ SocketManager::set_rcvbuf_size(int s, in
}
TS_INLINE int
-SocketManager::getsockname(int s, struct sockaddr *sa, socklen_t *sz)
+SocketManager::getsockname(int s, sockaddr_storage *sa, socklen_t *sz)
{
- return::getsockname(s, sa, sz);
+ return::getsockname(s, ink_inet_sa_cast(sa), sz);
}
TS_INLINE int
Modified: trafficserver/traffic/branches/ssc/iocore/eventsystem/SocketManager.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/eventsystem/SocketManager.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/eventsystem/SocketManager.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/eventsystem/SocketManager.cc Tue May 24 04:11:36 2011
@@ -112,7 +112,7 @@ safe_mlock(caddr_t addr, size_t len, cad
}
int
-SocketManager::ink_bind(int s, struct sockaddr *name, int namelen, short Proto)
+SocketManager::ink_bind(int s, sockaddr_storage const* name, int namelen, short Proto)
{
(void) Proto;
return safe_bind(s, name, namelen);
Modified: trafficserver/traffic/branches/ssc/iocore/hostdb/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/hostdb/Makefile.am?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/hostdb/Makefile.am (original)
+++ trafficserver/traffic/branches/ssc/iocore/hostdb/Makefile.am Tue May 24 04:11:36 2011
@@ -19,11 +19,11 @@
if STANDALONE_IOCORE
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records
+ -I$(top_srcdir)/lib
else
AM_CPPFLAGS = \
$(iocore_include_dirs) \
- -I$(top_srcdir)/lib/records \
+ -I$(top_srcdir)/lib \
-I$(top_srcdir)/proxy \
-I$(top_srcdir)/proxy/hdrs \
-I$(top_srcdir)/proxy/http \
Modified: trafficserver/traffic/branches/ssc/iocore/hostdb/include/Machine.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/hostdb/include/Machine.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/hostdb/include/Machine.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/hostdb/include/Machine.h Tue May 24 04:11:36 2011
@@ -88,19 +88,31 @@ struct Machine:Server
struct MachineListElement
{
- unsigned int ip;
- int port;
+ sockaddr_storage ip;
+// unsigned int ip;
+// int port;
};
struct MachineList
{
int n;
MachineListElement machine[1];
+/*
MachineListElement *find(unsigned int ip, int port = 0) {
for (int i = 0; i < n; i++)
if (machine[i].ip == ip && (!port || machine[i].port == port))
return &machine[i];
return NULL;
}
+*/
+ MachineListElement* findByAddr(sockaddr_storage const* addr) {
+ MachineListElement* elt = machine;
+ MachineListElement* limit = machine + n;
+ for ( ; elt < limit ; ++elt) {
+ if (0 == ink_inet_cmp(addr, &elt->ip))
+ return elt;
+ }
+ return 0;
+ }
};
MachineList *read_MachineList(char *filename, int test_fd = -1);
Modified: trafficserver/traffic/branches/ssc/iocore/net/Connection.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/Connection.cc?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/Connection.cc (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/Connection.cc Tue May 24 04:11:36 2011
@@ -69,7 +69,7 @@ Connection::Connection()
, is_bound(false)
, is_connected(false)
{
- memset(&sa, 0, sizeof(struct sockaddr_storage));
+ ink_inet_invalidate(addr);
}
@@ -83,9 +83,9 @@ int
Server::accept(Connection * c)
{
int res = 0;
- socklen_t sz = sizeof(c->sa);
+ socklen_t sz = sizeof(c->addr);
- res = socketManager.accept(fd, (struct sockaddr *)&c->sa, &sz);
+ res = socketManager.accept(fd, &c->addr, &sz);
if (res < 0)
return res;
c->fd = res;
@@ -208,8 +208,8 @@ Server::setup_fd_for_listen(bool non_blo
if ((res = safe_nonblocking(fd)) < 0)
goto Lerror;
{
- int namelen = sizeof(sa);
- if ((res = safe_getsockname(fd, (struct sockaddr *) &sa, &namelen)))
+ int namelen = sizeof(addr);
+ if ((res = safe_getsockname(fd, &addr, &namelen)))
goto Lerror;
}
return 0;
@@ -223,38 +223,16 @@ Lerror:
int
-Server::listen(int port_number, int domain, bool non_blocking, int recv_bufsize, int send_bufsize)
+Server::listen(bool non_blocking, int recv_bufsize, int send_bufsize)
{
ink_assert(fd == NO_FD);
int res = 0;
- int gai_errno = 0;
+ int namelen;
- char port[6] = {'\0'};
- struct addrinfo hints;
- struct addrinfo *ai_res = NULL;
- struct addrinfo *ai = NULL;
- socklen_t addrlen = 0; // keep track of length of socket address info
- snprintf(port, sizeof(port), "%d", port_number);
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = domain;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_flags = AI_PASSIVE|AI_NUMERICHOST|AI_ADDRCONFIG;
- gai_errno = getaddrinfo(accept_ip_str, port, &hints, &ai_res);
- if(0 != gai_errno) {
- Error("getaddrinfo error %i: %s", gai_errno, gai_strerror(gai_errno));
- return -1;
- }
-
- ai = ai_res;
-
- res = socketManager.socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-
- memset(&sa, 0, sizeof(sa));
- addrlen = ai->ai_addrlen; // save value for later since ai will be freed asap
- memcpy(&sa, ai->ai_addr, ai->ai_addrlen);
+ if (!ink_inet_is_ip(accept_addr))
+ ink_inet_ip4_set(&accept_addr, INADDR_ANY,0);
- freeaddrinfo(ai_res);
+ res = socketManager.socket(accept_addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
if (res < 0)
return res;
@@ -316,13 +294,13 @@ Server::listen(int port_number, int doma
}
#endif
- if (domain == AF_INET6 && (res = safe_setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, ON, sizeof(int))) < 0)
+ if (ink_inet_is_ip6(accept_addr) && (res = safe_setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, ON, sizeof(int))) < 0)
goto Lerror;
if ((res = safe_setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, ON, sizeof(int))) < 0)
goto Lerror;
- if ((res = socketManager.ink_bind(fd, (struct sockaddr *) &sa, addrlen, IPPROTO_TCP)) < 0) {
+ if ((res = socketManager.ink_bind(fd, &addr, sizeof(addr), IPPROTO_TCP)) < 0) {
goto Lerror;
}
#ifdef SET_TCP_NO_DELAY
@@ -346,16 +324,15 @@ Server::listen(int port_number, int doma
if (non_blocking)
if ((res = safe_nonblocking(fd)) < 0)
goto Lerror;
- if (!port_number) {
- int namelen = sizeof(sa);
- if ((res = safe_getsockname(fd, (struct sockaddr *) &sa, &namelen)))
- goto Lerror;
- }
+ // Original just did this on port == 0.
+ namelen = sizeof(addr);
+ if ((res = safe_getsockname(fd, &addr, &namelen)))
+ goto Lerror;
return 0;
Lerror:
if (fd != NO_FD)
close();
- Error("Could not bind or listen to port %d (error: %d)", port_number, res);
+ Error("Could not bind or listen to port %d (error: %d)", ink_inet_get_port(accept_addr), res);
return res;
}
Modified: trafficserver/traffic/branches/ssc/iocore/net/I_NetProcessor.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/I_NetProcessor.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/I_NetProcessor.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/I_NetProcessor.h Tue May 24 04:11:36 2011
@@ -46,12 +46,11 @@ public:
struct AcceptOptions {
typedef AcceptOptions self; ///< Self reference type.
- /// Port on which to listen.
- /// 0 => don't care, which is useful if the socket is already bound.
- int port;
/// Should we use accept threads? If so, how many?
int accept_threads;
/// Communication domain (default: AF_INET)
+ /// @note Ignored if an explicit incoming address is set in the
+ /// the configuration (@c incoming_ip_to_bind).
int domain;
/// Event type to generate on accept.
EventType etype;
@@ -60,6 +59,13 @@ public:
or @c NET_EVENT_ACCEPT_FAILED on success and failure resp.
*/
bool f_callback_on_open;
+ /** Accept only on the loopback address.
+ Default: @c false.
+ */
+ bool localhost_only;
+ /// Are frequent accepts expected?
+ /// Default: @c false.
+ bool frequent_accept;
/// Socket receive buffer size.
/// 0 => OS default.
@@ -115,7 +121,6 @@ public:
@param callback_on_open if true, cont is called back with
NET_EVENT_ACCEPT_SUCCEED, or NET_EVENT_ACCEPT_FAILED on success
and failure resp.
- @param listen_socket_in if passed, used for listening.
@param accept_pool_size NT specific, better left unspecified.
@param accept_only can be used to customize accept, accept a
connection only if there is some data to be read. This works
@@ -132,17 +137,27 @@ public:
port becomes free immediately.
*/
- inkcoreapi virtual Action * accept(Continuation * cont, int port, int domain = AF_INET, int accept_threads = -1,
- bool frequent_accept = false,
- // not used
- unsigned int accept_ip = INADDR_ANY, char *accept_ip_str = NULL, bool callback_on_open = false,
- SOCKET listen_socket_in = NO_FD, // NT only
- int accept_pool_size = ACCEPTEX_POOL_SIZE, // NT only
- bool accept_only = false,
- sockaddr * bound_sockaddr = 0,
- int *bound_sockaddr_size = 0,
- int recv_bufsize = 0,
- int send_bufsize = 0, uint32_t sockopt_flag = 0, EventType etype = ET_NET);
+ inkcoreapi virtual Action * accept(
+ Continuation * cont,
+ sockaddr_storage const* addr,
+// int port,
+ AcceptOptions const& opt = DEFAULT_ACCEPT_OPTIONS
+// int domain = AF_INET,
+// int accept_threads = -1,
+// bool frequent_accept = false,
+ // not used
+// unsigned int accept_ip = INADDR_ANY,
+// char *accept_ip_str = NULL,
+// bool callback_on_open = false,
+// int accept_pool_size = ACCEPTEX_POOL_SIZE, // NT only
+// bool accept_only = false,
+// sockaddr * bound_sockaddr = 0,
+// int *bound_sockaddr_size = 0,
+// int recv_bufsize = 0,
+// int send_bufsize = 0,
+// uint32_t sockopt_flag = 0,
+// EventType etype = ET_NET
+ );
/**
Accepts incoming connections on port. Accept connections on port.
@@ -182,9 +197,16 @@ public:
port becomes free immediately.
*/
- virtual Action *main_accept(Continuation * cont, SOCKET listen_socket_in, sockaddr * bound_sockaddr = NULL,
- int *bound_sockaddr_size = NULL, bool accept_only = false, bool localhost_only = false,
- AcceptOptions const& opt = DEFAULT_ACCEPT_OPTIONS);
+ virtual Action *main_accept(
+ Continuation * cont,
+ SOCKET listen_socket_in,
+ uint16_t port,
+// sockaddr * bound_sockaddr = NULL,
+// int *bound_sockaddr_size = NULL,
+// bool accept_only = false,
+// bool localhost_only = false,
+ AcceptOptions const& opt = DEFAULT_ACCEPT_OPTIONS
+ );
/**
Open a NetVConnection for connection oriented I/O. Connects
@@ -208,8 +230,11 @@ public:
*/
- inkcoreapi Action *connect_re(Continuation * cont,
- unsigned int ip, int port, NetVCOptions * options = NULL);
+ inkcoreapi Action *connect_re(
+ Continuation * cont,
+ sockaddr_storage const* addr,
+ NetVCOptions * options = NULL
+ );
/**
Open a NetVConnection for connection oriented I/O. This call
@@ -221,8 +246,7 @@ public:
asynchronous type connect is desired use connect_re().
@param cont Continuation to be called back with events.
- @param ip machine to connect to.
- @param port port to connect to.
+ @param addr Address to which to connect (includes port).
@param timeout for connect, the cont will get NET_EVENT_OPEN_FAILED
if connection could not be established for timeout msecs. The
default is 30 secs.
@@ -231,10 +255,12 @@ public:
@see connect_re()
*/
- Action *connect_s(Continuation * cont,
- unsigned int ip,
- int port,
- int timeout = NET_CONNECT_TIMEOUT, NetVCOptions * opts = NULL);
+ Action *connect_s(
+ Continuation * cont,
+ sockaddr_storage const* addr,
+ int timeout = NET_CONNECT_TIMEOUT,
+ NetVCOptions * opts = NULL
+ );
/**
Starts the Netprocessor. This has to be called before doing any
Modified: trafficserver/traffic/branches/ssc/iocore/net/I_NetVConnection.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/I_NetVConnection.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/I_NetVConnection.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/I_NetVConnection.h Tue May 24 04:11:36 2011
@@ -48,10 +48,18 @@ enum NetDataType
This class holds various options a user can specify for
NetVConnection. Various clients need many slightly different
features. This is an attempt to prevent out of control growth of
- the connection method signatures.
+ the connection method signatures. Only options of interest need to
+ be explicitly set -- the rest get sensible default values.
- Only options of interest need to be explicitly set --
- the rest get sensible default values.
+ @note Binding addresses is a bit complex. It is not currently
+ possible to bind indiscriminately across protocols, which means
+ any connection must commit to IPv4 or IPv6. For this reason the
+ connection logic will look at the address family of @a local_addr
+ even if @a addr_binding is @c ANY_ADDR and bind to any address in
+ that protocol. If it's not an IP protocol, IPv4 will be used.
+
+ @note Port values are encoded in the address. Use a port value
+ of 0 to indicate "don't care".
*/
struct NetVCOptions {
typedef NetVCOptions self; ///< Self reference type.
@@ -67,6 +75,9 @@ struct NetVCOptions {
/** The set of ways in which the local address should be bound.
+ The protocol is set by the contents of @a local_addr regardless
+ of this value. @c ANY_ADDR will override only the address.
+
@note The difference between @c INTF_ADDR and @c FOREIGN_ADDR is
whether transparency is enabled on the socket. It is the
client's responsibility to set this correctly based on whether the
@@ -83,23 +94,10 @@ struct NetVCOptions {
FOREIGN_ADDR ///< Bind to foreign address in @a local_addr.
};
- /// The set of ways in which the local port should be bound.
- enum port_bind_style {
- ANY_PORT, ///< Bind to any available local port (don't care, default).
- FIXED_PORT ///< Bind to the port in @a local_port.
- };
-
- /// Port to use for local side of connection.
- /// @note Ignored if @a port_binding is @c ANY_PORT.
- /// @see port_binding
- uint16_t local_port;
- /// How to bind local port.
- /// @note Default is @c ANY_PORT.
- port_bind_style port_binding;
/// Address to use for local side of connection.
/// @note Ignored if @a addr_binding is @c ANY_ADDR.
/// @see addr_binding
- uint32_t local_addr;
+ sockaddr_storage local_addr;
/// How to bind the local address.
/// @note Default is @c ANY_ADDR.
addr_bind_style addr_binding;
@@ -369,22 +367,22 @@ public:
virtual ink_hrtime get_inactivity_timeout() = 0;
/** Returns local sockaddr storage. */
- const struct sockaddr_storage &get_local_addr();
+ sockaddr_storage const* get_local_addr();
/** Returns local ip. */
- unsigned int get_local_ip();
+// unsigned int get_local_ip();
/** Returns local port. */
- int get_local_port();
+ uint16_t get_local_port();
/** Returns remote sockaddr storage. */
- const struct sockaddr_storage &get_remote_addr();
+ sockaddr_storage const* get_remote_addr();
/** Returns remote ip. */
- unsigned int get_remote_ip();
+// unsigned int get_remote_ip();
/** Returns remote port. */
- int get_remote_port();
+ uint16_t get_remote_port();
/** Structure holding user options. */
NetVCOptions options;
@@ -458,11 +456,11 @@ private:
NetVConnection & operator =(const NetVConnection &);
protected:
- struct sockaddr_storage local_addr;
- struct sockaddr_storage remote_addr;
+ sockaddr_storage local_addr;
+ sockaddr_storage remote_addr;
- int got_local_addr;
- int got_remote_addr;
+ bool got_local_addr;
+ bool got_remote_addr;
bool is_internal_request;
/// Set if this connection is transparent.
Modified: trafficserver/traffic/branches/ssc/iocore/net/I_UDPConnection.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/I_UDPConnection.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/I_UDPConnection.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/I_UDPConnection.h Tue May 24 04:11:36 2011
@@ -50,8 +50,8 @@ public:
};
SOCKET getFd();
- void setBinding(struct sockaddr_in *);
- inkcoreapi int getBinding(struct sockaddr_in *);
+ void setBinding(sockaddr_storage *);
+ inkcoreapi int getBinding(sockaddr_storage *);
void destroy();
int shouldDestroy();
Modified: trafficserver/traffic/branches/ssc/iocore/net/I_UDPNet.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/I_UDPNet.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/I_UDPNet.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/I_UDPNet.h Tue May 24 04:11:36 2011
@@ -47,9 +47,13 @@ public:
//this function was interanal intially.. this is required for public and
//interface probably should change.
- bool CreateUDPSocket(int *resfd, struct sockaddr_in *addr,
- Action ** status,
- int my_port, unsigned int my_ip = 0, int send_bufsize = 0, int recv_bufsize = 0);
+ bool CreateUDPSocket(
+ int *resfd,
+ sockaddr_storage const* remote_addr,
+ sockaddr_storage* local_addr,
+ Action ** status,
+ int send_bufsize = 0, int recv_bufsize = 0
+ );
/**
create UDPConnection
@@ -63,8 +67,7 @@ public:
@param c Continuation that is called back with newly created
socket.
- @param my_port Local port to be bound (required)
- @param my_ip Local IP to be bound (optional). Defaults to '0' (INADDR_ANY)
+ @param addr Address to bind (includes port)
@param send_bufsize (optional) Socket buffer size for sending.
Limits how much outstanding data to OS before it is able to send
to the NIC.
@@ -73,17 +76,20 @@ public:
@return Action* Always returns ACTION_RESULT_DONE if socket was
created successfuly, or ACTION_IO_ERROR if not.
*/
- inkcoreapi Action *UDPBind(Continuation * c, int my_port, int my_ip = 0, int send_bufsize = 0, int recv_bufsize = 0);
+ inkcoreapi Action *UDPBind(Continuation * c, sockaddr_storage const* addr, int send_bufsize = 0, int recv_bufsize = 0);
// The mess again: the complier won't let me stick UDPConnection here.
- void UDPClassifyConnection(Continuation * udpConn, int destIP);
+ void UDPClassifyConnection(Continuation * udpConn, InkInetAddr const& addr);
// create pairs of UDPConnections in which the first connection is
// on a even-#'ed port and the second connection is on the next
// odd-#'ed port. Create "nPairs" of such connections.
Action *UDPCreatePortPairs(Continuation *, int nPairs,
- unsigned int myIP = 0,
- unsigned int destIP = 0, int send_bufsize = 0, int recv_bufsize = 0);
+ sockaddr_storage const* local_addr,
+ sockaddr_storage const* remote_addr,
+// unsigned int myIP = 0,
+// unsigned int destIP = 0,
+ int send_bufsize = 0, int recv_bufsize = 0);
// Regarding sendto_re, sendmsg_re, recvfrom_re:
// * You may be called back on 'c' with completion or error status.
@@ -105,13 +111,13 @@ public:
// * You can get other info about the completed operation through use
// of the completionUtil class.
Action *sendto_re(Continuation * c, void *token, int fd,
- struct sockaddr *toaddr, int toaddrlen, IOBufferBlock * buf, int len);
+ sockaddr_storage *toaddr, int toaddrlen, IOBufferBlock * buf, int len);
// I/O buffers referenced by msg must be pinned by the caller until
// continuation is called back.
Action *sendmsg_re(Continuation * c, void *token, int fd, struct msghdr *msg);
Action *recvfrom_re(Continuation * c, void *token, int fd,
- struct sockaddr *fromaddr, socklen_t *fromaddrlen,
+ sockaddr_storage *fromaddr, socklen_t *fromaddrlen,
IOBufferBlock * buf, int len, bool useReadCont = true, int timeout = 0);
// Continuation is really a UDPConnection; due to the include mess, we stick in the
// base-class of UDPConnection.
Modified: trafficserver/traffic/branches/ssc/iocore/net/I_UDPPacket.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/ssc/iocore/net/I_UDPPacket.h?rev=1126862&r1=1126861&r2=1126862&view=diff
==============================================================================
--- trafficserver/traffic/branches/ssc/iocore/net/I_UDPPacket.h (original)
+++ trafficserver/traffic/branches/ssc/iocore/net/I_UDPPacket.h Tue May 24 04:11:36 2011
@@ -65,8 +65,8 @@ public:
inkcoreapi void append_block(IOBufferBlock * block);
virtual void UDPPacket_is_abstract() = 0;
- struct sockaddr_in from; // what address came from
- struct sockaddr_in to; // what address to send to
+ sockaddr_storage from; // what address came from
+ sockaddr_storage to; // what address to send to
int from_size;
@@ -83,7 +83,7 @@ public:
@param buf if !NULL, then len bytes copied from buf and made into packet.
@param len # of bytes to copy from buf
*/
-TS_INLINE UDPPacket *new_UDPPacket(struct sockaddr_in *to, ink_hrtime when = 0, char *buf = NULL, int len = 0);
+TS_INLINE UDPPacket *new_UDPPacket(sockaddr_storage *to, ink_hrtime when = 0, char *buf = NULL, int len = 0);
/**
Create a new packet to be sent over UDPConnection. This clones and
makes a reference to an existing IOBufferBlock chain.
@@ -95,7 +95,7 @@ TS_INLINE UDPPacket *new_UDPPacket(struc
for packet
@param len # of bytes to reference from block
*/
-TS_INLINE UDPPacket *new_UDPPacket(struct sockaddr_in *to,
+TS_INLINE UDPPacket *new_UDPPacket(sockaddr_storage *to,
ink_hrtime when = 0, IOBufferBlock * block = NULL, int len = 0);
/**
Create a new packet to be sent over UDPConnection. Packet has no
@@ -107,7 +107,7 @@ TS_INLINE UDPPacket *new_UDPPacket();
Create a new packet to be delivered to application.
Internal function only
*/
-TS_INLINE UDPPacket *new_incoming_UDPPacket(struct sockaddr_in *from, char *buf, int len);
+TS_INLINE UDPPacket *new_incoming_UDPPacket(sockaddr_storage *from, char *buf, int len);
//@}
#endif //__I_UDPPACKET_H_