Skip to content

Commit

Permalink
Merge ../xorp.ct.github
Browse files Browse the repository at this point in the history
  • Loading branch information
greearb committed Jul 6, 2011
2 parents b53a89a + 2371b7c commit 0ad0397
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 78 deletions.
117 changes: 42 additions & 75 deletions xorp/fea/data_plane/io/io_ip_socket.cc
Expand Up @@ -233,15 +233,6 @@ static uint8_t ra_opt6[IP6OPT_RTALERT_LEN];
#endif
#endif // HAVE_IPV6

// XXX: This is a bit of a dirty hack
#ifdef HOST_OS_WINDOWS
#ifdef strerror
#undef strerror
#endif
#define strerror(errnum) win_strerror(GetLastError())
#endif


IoIpSocket::IoIpSocket(FeaDataPlaneManager& fea_data_plane_manager,
const IfTree& ift, int family, uint8_t ip_protocol)
: IoIp(fea_data_plane_manager, ift, family, ip_protocol),
Expand Down Expand Up @@ -306,11 +297,11 @@ IoIpSocket::IoIpSocket(FeaDataPlaneManager& fea_data_plane_manager,
_sndmh.msg_control = (caddr_t)_sndcmsgbuf;
_rcvmh.msg_controllen = CMSG_BUF_SIZE;
_sndmh.msg_controllen = 0;
#endif // ! HOST_OS_WINDOWS

XLOG_WARNING("Registering with iftree: %s\n", iftree().getName().c_str());
// Register interest in interface deletions.
iftree().registerListener(this);
#endif // ! HOST_OS_WINDOWS
}

IoIpSocket::~IoIpSocket()
Expand Down Expand Up @@ -374,7 +365,7 @@ IoIpSocket::set_multicast_ttl(int ttl, string& error_msg)
if (setsockopt(_proto_socket_out, IPPROTO_IP, IP_MULTICAST_TTL,
XORP_SOCKOPT_CAST(&ip_ttl), sizeof(ip_ttl)) < 0) {
error_msg = c_format("setsockopt(IP_MULTICAST_TTL, %u) failed: %s",
ip_ttl, strerror(errno));
ip_ttl, XSTRERROR);
return (XORP_ERROR);
}
}
Expand All @@ -393,7 +384,7 @@ IoIpSocket::set_multicast_ttl(int ttl, string& error_msg)
if (setsockopt(_proto_socket_out, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
XORP_SOCKOPT_CAST(&ip_ttl), sizeof(ip_ttl)) < 0) {
error_msg = c_format("setsockopt(IPV6_MULTICAST_HOPS, %u) failed: %s",
ip_ttl, strerror(errno));
ip_ttl, XSTRERROR);
return (XORP_ERROR);
}
#endif // HAVE_IPV6_MULTICAST
Expand Down Expand Up @@ -421,7 +412,7 @@ IoIpSocket::enable_multicast_loopback(bool is_enabled, string& error_msg)
if (setsockopt(_proto_socket_out, IPPROTO_IP, IP_MULTICAST_LOOP,
XORP_SOCKOPT_CAST(&loop), sizeof(loop)) < 0) {
error_msg = c_format("setsockopt(IP_MULTICAST_LOOP, %u) failed: %s",
loop, strerror(errno));
loop, XSTRERROR);
return (XORP_ERROR);
}
}
Expand All @@ -440,7 +431,7 @@ IoIpSocket::enable_multicast_loopback(bool is_enabled, string& error_msg)
if (setsockopt(_proto_socket_out, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
XORP_SOCKOPT_CAST(&loop6), sizeof(loop6)) < 0) {
error_msg = c_format("setsockopt(IPV6_MULTICAST_LOOP, %u) failed: %s",
loop6, strerror(errno));
loop6, XSTRERROR);
return (XORP_ERROR);
}
#endif // HAVE_IPV6_MULTICAST
Expand Down Expand Up @@ -493,7 +484,7 @@ IoIpSocket::set_default_multicast_interface(const string& if_name,
if (setsockopt(_proto_socket_out, IPPROTO_IP, IP_MULTICAST_IF,
XORP_SOCKOPT_CAST(&in_addr), sizeof(in_addr)) < 0) {
error_msg = c_format("setsockopt(IP_MULTICAST_IF, %s) failed: %s",
cstring(fa.addr()), strerror(errno));
cstring(fa.addr()), XSTRERROR);
return (XORP_ERROR);
}
}
Expand All @@ -512,7 +503,7 @@ IoIpSocket::set_default_multicast_interface(const string& if_name,
if (setsockopt(_proto_socket_out, IPPROTO_IPV6, IPV6_MULTICAST_IF,
XORP_SOCKOPT_CAST(&pif_index), sizeof(pif_index)) < 0) {
error_msg = c_format("setsockopt(IPV6_MULTICAST_IF, %s/%s) failed: %s",
if_name.c_str(), vif_name.c_str(), strerror(errno));
if_name.c_str(), vif_name.c_str(), XSTRERROR);
return (XORP_ERROR);
}
#endif // HAVE_IPV6_MULTICAST
Expand Down Expand Up @@ -598,7 +589,7 @@ IoIpSocket::join_multicast_group(const string& if_name,
cstring(group),
if_name.c_str(),
vif_name.c_str(),
strerror(errno));
XSTRERROR);
goto out_err;
}
else {
Expand Down Expand Up @@ -627,7 +618,7 @@ IoIpSocket::join_multicast_group(const string& if_name,
cstring(group),
if_name.c_str(),
vif_name.c_str(),
strerror(errno));
XSTRERROR);
goto out_err;
}
else {
Expand Down Expand Up @@ -662,15 +653,8 @@ XorpFd* IoIpSocket::mcast_protocol_fd_in() {
// Try to open the socket.
_mcast_proto_socket_in = socket(family(), SOCK_RAW, ip_protocol());
if (!_mcast_proto_socket_in.is_valid()) {
char *errstr;

#ifdef HAVE_STRERROR
errstr = strerror(errno);
#else
errstr = "unknown error";
#endif
XLOG_WARNING("Cannot open multicast IP protocol %u raw socket: %s",
ip_protocol(), errstr);
ip_protocol(), XSTRERROR);
}
else {
string err_msg;
Expand Down Expand Up @@ -777,7 +761,7 @@ IoIpSocket::leave_multicast_group(const string& if_name,
cstring(group),
if_name.c_str(),
vif_name.c_str(), (int)(*_proto_socket_in),
strerror(errno));
XSTRERROR);
return (XORP_ERROR);
}
else {
Expand Down Expand Up @@ -806,7 +790,7 @@ IoIpSocket::leave_multicast_group(const string& if_name,
cstring(group),
if_name.c_str(),
vif_name.c_str(), (int)(*_proto_socket_in),
strerror(errno));
XSTRERROR);
return (XORP_ERROR);
}
#endif // HAVE_IPV6_MULTICAST
Expand Down Expand Up @@ -837,15 +821,8 @@ XorpFd* IoIpSocket::findOrCreateInputSocket(const string& if_name, const string&
rv = new XorpFd();
*rv = socket(family(), SOCK_RAW, ip_protocol());
if (!rv->is_valid()) {
char *errstr;

#ifdef HAVE_STRERROR
errstr = strerror(errno);
#else
errstr = "unknown error";
#endif
error_msg += c_format("Cannot open IP protocol %u raw socket: %s",
ip_protocol(), errstr);
ip_protocol(), XSTRERROR);
delete rv;
return NULL;
}
Expand All @@ -866,12 +843,7 @@ XorpFd* IoIpSocket::findOrCreateInputSocket(const string& if_name, const string&
if (setsockopt(*rv, SOL_SOCKET, SO_BINDTODEVICE,
vif_name.c_str(), vif_name.size() + 1)) {
error_msg += c_format("ERROR: IoIpSocket::open_proto_socket, setsockopt (BINDTODEVICE): failed: %s",
#ifdef HAVE_STRERROR
strerror(errno)
#else
"unknown error"
#endif
);
XSTRERROR);
}
else {
XLOG_INFO("Successfully bound socket: %i to interface: %s input sockets size: %i\n",
Expand Down Expand Up @@ -940,7 +912,7 @@ int IoIpSocket::initializeInputSocket(XorpFd* rv, string& error_msg) {
if (setsockopt(*rv, ip_protocol(), ICMP6_FILTER,
XORP_SOCKOPT_CAST(&filter), sizeof(filter)) < 0) {
error_msg += c_format("setsockopt(ICMP6_FILTER) failed: %s",
strerror(errno));
XSTRERROR);
return XORP_ERROR;
}
}
Expand Down Expand Up @@ -1017,7 +989,7 @@ int IoIpSocket::initializeInputSocket(XorpFd* rv, string& error_msg) {
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_addr.s_addr = htonl(INADDR_ANY);

if (SOCKET_ERROR == bind(*rv, (sockaddr *)&sin,
sizeof(sockaddr_in))) {
Expand Down Expand Up @@ -1051,15 +1023,8 @@ IoIpSocket::open_proto_sockets(string& error_msg)
if (! _proto_socket_out.is_valid()) {
_proto_socket_out = socket(family(), SOCK_RAW, ip_protocol());
if (!_proto_socket_out.is_valid()) {
char *errstr;

#ifdef HAVE_STRERROR
errstr = strerror(errno);
#else
errstr = "unknown error";
#endif
error_msg = c_format("Cannot open IP protocol %u raw socket: %s",
ip_protocol(), errstr);
ip_protocol(), XSTRERROR);
return (XORP_ERROR);
}
}
Expand Down Expand Up @@ -1186,7 +1151,7 @@ IoIpSocket::enable_ip_hdr_include(bool is_enabled, string& error_msg)
XORP_SOCKOPT_CAST(&bool_flag),
sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IP_HDRINCL, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
_is_ip_hdr_included = is_enabled;
Expand Down Expand Up @@ -1225,7 +1190,7 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IP, IP_RECVIF,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
XLOG_ERROR("setsockopt(IP_RECVIF, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif // IP_RECVIF
Expand All @@ -1235,7 +1200,7 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IP, IP_PKTINFO,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
XLOG_ERROR("setsockopt(IP_PKTINFO, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif // IP_PKTINFO
Expand All @@ -1258,15 +1223,15 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVPKTINFO, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#else
// The old option (see RFC-2292)
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_PKTINFO,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_PKTINFO, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif // ! IPV6_RECVPKTINFO
Expand All @@ -1278,15 +1243,15 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVHOPLIMIT,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVHOPLIMIT, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#else
#ifndef HOST_OS_WINDOWS /* not supported on mingw TODO: Fix? */
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_HOPLIMIT,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_HOPLIMIT, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif
Expand All @@ -1299,7 +1264,7 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVTCLASS,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVTCLASS, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif // IPV6_RECVTCLASS
Expand All @@ -1311,15 +1276,15 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVHOPOPTS,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVHOPOPTS, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#else
#ifndef HOST_OS_WINDOWS /* not supported on mingw TODO: Fix? */
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_HOPOPTS,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_HOPOPTS, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif
Expand All @@ -1332,15 +1297,15 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVRTHDR,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVRTHDR, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#else
#ifndef HOST_OS_WINDOWS /* not supported on mingw TODO: Fix?*/
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RTHDR,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RTHDR, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif
Expand All @@ -1353,7 +1318,7 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_RECVDSTOPTS,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_RECVDSTOPTS, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#else
Expand All @@ -1362,7 +1327,7 @@ IoIpSocket::enable_recv_pktinfo(XorpFd* input_fd, bool is_enabled, string& error
if (setsockopt(*input_fd, IPPROTO_IPV6, IPV6_DSTOPTS,
XORP_SOCKOPT_CAST(&bool_flag), sizeof(bool_flag)) < 0) {
error_msg = c_format("setsockopt(IPV6_DSTOPTS, %u) failed: %s",
bool_flag, strerror(errno));
bool_flag, XSTRERROR);
return (XORP_ERROR);
}
#endif
Expand Down Expand Up @@ -1493,7 +1458,7 @@ IoIpSocket::proto_socket_read(XorpFd fd, IoEventType type)
if (errno == EINTR)
return; // OK: restart receiving
XLOG_ERROR("recvmsg() on socket %s failed: %s",
fd.str().c_str(), strerror(errno));
fd.str().c_str(), XSTRERROR);
return; // Error
}

Expand All @@ -1512,8 +1477,9 @@ IoIpSocket::proto_socket_read(XorpFd fd, IoEventType type)
debug_msg("Read fd %s, %d bytes\n",
fd.str().c_str(), XORP_INT_CAST(nbytes));
if (nbytes < 0) {
// XLOG_ERROR("recvfrom() failed: %s", strerror(errno));
return; // Error
XLOG_ERROR("recvfrom() failed: %s fd: %s",
XSTRERROR, fd.str().c_str());
return;
}
}
break;
Expand Down Expand Up @@ -1541,8 +1507,9 @@ IoIpSocket::proto_socket_read(XorpFd fd, IoEventType type)
debug_msg("Read fd %s, %d bytes\n",
fd.str().c_str(), XORP_INT_CAST(nbytes));
if (nbytes < 0) {
// XLOG_ERROR("lpWSARecvMsg() failed: %s", strerror(errno));
return; // Error
XLOG_ERROR("lpWSARecvMsg() failed: %s, fd: %s",
XSTRERROR, fd.str().c_str());
return;
}
}
break;
Expand Down Expand Up @@ -2288,7 +2255,7 @@ IoIpSocket::send_packet(const string& if_name,
< 0) {
error_msg = c_format("setsockopt(IP_OPTIONS, IPOPT_RA) "
"failed: %s",
strerror(errno));
XSTRERROR);
XLOG_ERROR("%s", error_msg.c_str());
return (XORP_ERROR);
}
Expand Down Expand Up @@ -2324,7 +2291,7 @@ IoIpSocket::send_packet(const string& if_name,
sizeof(sin))
< 0) {
error_msg = c_format("raw socket bind(%s) failed: %s",
cstring(src_address), strerror(errno));
cstring(src_address), XSTRERROR);
XLOG_ERROR("%s", error_msg.c_str());
return (XORP_ERROR);
}
Expand Down Expand Up @@ -2850,7 +2817,7 @@ IoIpSocket::proto_socket_transmit(const IfTreeInterface* ifp,
// E.g., vif_state_check(family());
//
error_msg = c_format("sendmsg failed, error: %s socket: %i",
strerror(errno), (int)(_proto_socket_out));
XSTRERROR, (int)(_proto_socket_out));
} else {
error_msg = c_format("sendmsg(proto %d size %u from %s to %s "
"on interface %s vif %s) failed: %s",
Expand All @@ -2860,7 +2827,7 @@ IoIpSocket::proto_socket_transmit(const IfTreeInterface* ifp,
cstring(dst_address),
ifp->ifname().c_str(),
vifp->vifname().c_str(),
strerror(errno));
XSTRERROR);
}
}

Expand Down

0 comments on commit 0ad0397

Please sign in to comment.