]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-nfs.c
CARP: NDOize
[tcpdump] / print-nfs.c
index 9f04e0bc5e1020ceb1c302c5e6e72d8d3f6ad81a..92308f8c8cd5e96dd323ebddd19954cb7b725beb 100644 (file)
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#ifndef lint
-static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-nfs.c,v 1.111 2007-12-22 03:08:04 guy Exp $ (LBL)";
-#endif
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -48,6 +43,8 @@ static const char rcsid[] _U_ =
 #include "rpc_auth.h"
 #include "rpc_msg.h"
 
+static const char tstr[] = " [|nfs]";
+
 static void nfs_printfh(const u_int32_t *, const u_int);
 static int xid_map_enter(const struct sunrpc_msg *, const u_char *);
 static int xid_map_find(const struct sunrpc_msg *, const u_char *,
@@ -287,12 +284,7 @@ nfsreply_print(register const u_char *bp, u_int length,
               register const u_char *bp2)
 {
        register const struct sunrpc_msg *rp;
-       u_int32_t proc, vers, reply_stat;
        char srcid[20], dstid[20];      /*fits 32bit*/
-       enum sunrpc_reject_stat rstat;
-       u_int32_t rlow;
-       u_int32_t rhigh;
-       enum sunrpc_auth_stat rwhy;
 
        nfserr = 0;             /* assume no error */
        rp = (const struct sunrpc_msg *)bp;
@@ -308,6 +300,29 @@ nfsreply_print(register const u_char *bp, u_int length,
                    EXTRACT_32BITS(&rp->rm_xid));
        }
        print_nfsaddr(bp2, srcid, dstid);
+
+       nfsreply_print_noaddr(bp, length, bp2);
+       return;
+
+trunc:
+       if (!nfserr)
+               printf("%s", tstr);
+}
+
+void
+nfsreply_print_noaddr(register const u_char *bp, u_int length,
+              register const u_char *bp2)
+{
+       register const struct sunrpc_msg *rp;
+       u_int32_t proc, vers, reply_stat;
+       enum sunrpc_reject_stat rstat;
+       u_int32_t rlow;
+       u_int32_t rhigh;
+       enum sunrpc_auth_stat rwhy;
+
+       nfserr = 0;             /* assume no error */
+       rp = (const struct sunrpc_msg *)bp;
+
        TCHECK(rp->rm_reply.rp_stat);
        reply_stat = EXTRACT_32BITS(&rp->rm_reply.rp_stat);
        switch (reply_stat) {
@@ -393,7 +408,7 @@ nfsreply_print(register const u_char *bp, u_int length,
 
 trunc:
        if (!nfserr)
-               fputs(" [|nfs]", stdout);
+               printf("%s", tstr);
 }
 
 /*
@@ -504,12 +519,6 @@ nfsreq_print(register const u_char *bp, u_int length,
     register const u_char *bp2)
 {
        register const struct sunrpc_msg *rp;
-       register const u_int32_t *dp;
-       nfs_type type;
-       int v3;
-       u_int32_t proc;
-       u_int32_t access_flags;
-       struct nfsv3_sattr sa3;
        char srcid[20], dstid[20];      /*fits 32bit*/
 
        nfserr = 0;             /* assume no error */
@@ -528,6 +537,29 @@ nfsreq_print(register const u_char *bp, u_int length,
        print_nfsaddr(bp2, srcid, dstid);
        (void)printf("%d", length);
 
+       nfsreq_print_noaddr(bp, length, bp2);
+       return;
+
+trunc:
+       if (!nfserr)
+               printf("%s", tstr);
+}
+
+void
+nfsreq_print_noaddr(register const u_char *bp, u_int length,
+    register const u_char *bp2)
+{
+       register const struct sunrpc_msg *rp;
+       register const u_int32_t *dp;
+       nfs_type type;
+       int v3;
+       u_int32_t proc;
+       u_int32_t access_flags;
+       struct nfsv3_sattr sa3;
+
+       nfserr = 0;             /* assume no error */
+       rp = (const struct sunrpc_msg *)bp;
+
        if (!xid_map_enter(rp, bp2))    /* record proc number for later on */
                goto trunc;
 
@@ -837,7 +869,7 @@ nfsreq_print(register const u_char *bp, u_int length,
 
 trunc:
        if (!nfserr)
-               fputs(" [|nfs]", stdout);
+               printf("%s", tstr);
 }
 
 /*
@@ -962,14 +994,14 @@ xid_map_enter(const struct sunrpc_msg *rp, const u_char *bp)
        xmep->xid = rp->rm_xid;
        if (ip) {
                xmep->ipver = 4;
-               memcpy(&xmep->client, &ip->ip_src, sizeof(ip->ip_src));
-               memcpy(&xmep->server, &ip->ip_dst, sizeof(ip->ip_dst));
+               UNALIGNED_MEMCPY(&xmep->client, &ip->ip_src, sizeof(ip->ip_src));
+               UNALIGNED_MEMCPY(&xmep->server, &ip->ip_dst, sizeof(ip->ip_dst));
        }
 #ifdef INET6
        else if (ip6) {
                xmep->ipver = 6;
-               memcpy(&xmep->client, &ip6->ip6_src, sizeof(ip6->ip6_src));
-               memcpy(&xmep->server, &ip6->ip6_dst, sizeof(ip6->ip6_dst));
+               UNALIGNED_MEMCPY(&xmep->client, &ip6->ip6_src, sizeof(ip6->ip6_src));
+               UNALIGNED_MEMCPY(&xmep->server, &ip6->ip6_dst, sizeof(ip6->ip6_dst));
        }
 #endif
        xmep->proc = EXTRACT_32BITS(&rp->rm_call.cb_proc);
@@ -1003,18 +1035,18 @@ xid_map_find(const struct sunrpc_msg *rp, const u_char *bp, u_int32_t *proc,
                        goto nextitem;
                switch (xmep->ipver) {
                case 4:
-                       if (memcmp(&ip->ip_src, &xmep->server,
+                       if (UNALIGNED_MEMCMP(&ip->ip_src, &xmep->server,
                                   sizeof(ip->ip_src)) != 0 ||
-                           memcmp(&ip->ip_dst, &xmep->client,
+                           UNALIGNED_MEMCMP(&ip->ip_dst, &xmep->client,
                                   sizeof(ip->ip_dst)) != 0) {
                                cmp = 0;
                        }
                        break;
 #ifdef INET6
                case 6:
-                       if (memcmp(&ip6->ip6_src, &xmep->server,
+                       if (UNALIGNED_MEMCMP(&ip6->ip6_src, &xmep->server,
                                   sizeof(ip6->ip6_src)) != 0 ||
-                           memcmp(&ip6->ip6_dst, &xmep->client,
+                           UNALIGNED_MEMCMP(&ip6->ip6_dst, &xmep->client,
                                   sizeof(ip6->ip6_dst)) != 0) {
                                cmp = 0;
                        }
@@ -1847,5 +1879,5 @@ interp_reply(const struct sunrpc_msg *rp, u_int32_t proc, u_int32_t vers, int le
        }
 trunc:
        if (!nfserr)
-               fputs(" [|nfs]", stdout);
+               printf("%s", tstr);
 }