rx: abort on missing service
authorDerrick Brashear <shadow@dementix.org>
Fri, 1 Jun 2012 17:16:31 +0000 (13:16 -0400)
committerDerrick Brashear <shadow@dementix.org>
Wed, 27 Jun 2012 12:32:36 +0000 (05:32 -0700)
currently rx does not send an abort if a service does not
exist; it quietly ignores the packet. provide a hint we have
done so.

Change-Id: Id3533afd46ed21765d4d2aab630a896b21c945de
Reviewed-on: http://gerrit.openafs.org/7563
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Simon Wilkinson <simonxwilkinson@gmail.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

src/rx/rx.c

index dd1c3ac..03d7270 100644 (file)
@@ -3243,10 +3243,11 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
                           np->header.cid, np->header.epoch, type,
                           np->header.securityIndex);
 
-    if (!conn) {
-       /* If no connection found or fabricated, just ignore the packet.
-        * (An argument could be made for sending an abort packet for
-        * the conn) */
+    /* To avoid having 2 connections just abort at each other,
+       don't abort an abort. */
+    if (!conn && (np->header.type != RX_PACKET_TYPE_ABORT)) {
+       rxi_SendRawAbort(socket, host, port, RX_INVALID_OPERATION,
+                        np, 0);
        return np;
     }