LINUX: Ignore 'offender' in error queue processing
authorAndrew Deason <adeason@sinenomine.net>
Tue, 11 Sep 2012 18:59:21 +0000 (13:59 -0500)
committerDerrick Brashear <shadow@your-file-system.com>
Thu, 18 Oct 2012 07:51:51 +0000 (00:51 -0700)
The 'offender' is who generated the error, possibly who sent us an
icmp packet (the given 'port' will be 0). What we want is the peer
that is actually unavailable, which is already in the 'addr' variable
we received from the recvmsg itself.

Change-Id: I930293ca14f0e13ba09ee94b5a5d9cdc0f321743
Reviewed-on: http://gerrit.openafs.org/8119
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>

src/rx/LINUX/rx_knet.c

index 3dfe1de..81f4400 100644 (file)
@@ -105,7 +105,6 @@ osi_HandleSocketError(osi_socket so, char *cmsgbuf, size_t cmsgbuf_len)
     struct cmsghdr *cmsg;
     struct sock_extended_err *err;
     struct sockaddr_in addr;
-    struct sockaddr *offender;
     int code;
     struct socket *sop = (struct socket *)so;
 
@@ -134,13 +133,6 @@ osi_HandleSocketError(osi_socket so, char *cmsgbuf, size_t cmsgbuf_len)
        }
 
        err = CMSG_DATA(cmsg);
-       offender = SO_EE_OFFENDER(err);
-
-       if (offender->sa_family != AF_INET) {
-           continue;
-       }
-
-       memcpy(&addr, offender, sizeof(addr));
        rxi_ProcessNetError(err, addr.sin_addr.s_addr, addr.sin_port);
     }