]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-tftp.c
More UNALIGNED_MEM{CPY,CMP} on IP addresses.
[tcpdump] / print-tftp.c
index 84cde3969d08bfd8f898da610f0606cf6fc4ad07..2808bcc1fd3db640592d4946d5723e098a532fad 100644 (file)
  * Format and print trivial file transfer protocol packets.
  */
 
  * Format and print trivial file transfer protocol packets.
  */
 
-#ifndef lint
-static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.39 2008-04-11 16:47:38 gianluca Exp $ (LBL)";
-#endif
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -42,10 +37,53 @@ static const char rcsid[] _U_ =
 #include "interface.h"
 #include "addrtoname.h"
 #include "extract.h"
 #include "interface.h"
 #include "addrtoname.h"
 #include "extract.h"
-#include "tftp.h"
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+#define        SEGSIZE         512             /* data segment size */
+
+/*
+ * Packet types.
+ */
+#define        RRQ     01                      /* read request */
+#define        WRQ     02                      /* write request */
+#define        DATA    03                      /* data packet */
+#define        ACK     04                      /* acknowledgement */
+#define        TFTP_ERROR      05                      /* error code */
+#define OACK   06                      /* option acknowledgement */
+
+struct tftphdr {
+       unsigned short  th_opcode;              /* packet type */
+       union {
+               unsigned short  tu_block;       /* block # */
+               unsigned short  tu_code;        /* error code */
+               char    tu_stuff[1];    /* request packet stuff */
+       } th_u;
+       char    th_data[1];             /* data or error string */
+};
+
+#define        th_block        th_u.tu_block
+#define        th_code         th_u.tu_code
+#define        th_stuff        th_u.tu_stuff
+#define        th_msg          th_data
+
+/*
+ * Error codes.
+ */
+#define        EUNDEF          0               /* not defined */
+#define        ENOTFOUND       1               /* file not found */
+#define        EACCESS         2               /* access violation */
+#define        ENOSPACE        3               /* disk full or allocation exceeded */
+#define        EBADOP          4               /* illegal TFTP operation */
+#define        EBADID          5               /* unknown transfer ID */
+#define        EEXISTS         6               /* file already exists */
+#define        ENOUSER         7               /* no such user */
+
+static const char tstr[] = " [|tftp]";
 
 /* op code to string mapping */
 
 /* op code to string mapping */
-static struct tok op2str[] = {
+static const struct tok op2str[] = {
        { RRQ,          "RRQ" },        /* read request */
        { WRQ,          "WRQ" },        /* write request */
        { DATA,         "DATA" },       /* data packet */
        { RRQ,          "RRQ" },        /* read request */
        { WRQ,          "WRQ" },        /* write request */
        { DATA,         "DATA" },       /* data packet */
@@ -56,7 +94,7 @@ static struct tok op2str[] = {
 };
 
 /* error code to string mapping */
 };
 
 /* error code to string mapping */
-static struct tok err2str[] = {
+static const struct tok err2str[] = {
        { EUNDEF,       "EUNDEF" },     /* not defined */
        { ENOTFOUND,    "ENOTFOUND" },  /* file not found */
        { EACCESS,      "EACCESS" },    /* access violation */
        { EUNDEF,       "EUNDEF" },     /* not defined */
        { ENOTFOUND,    "ENOTFOUND" },  /* file not found */
        { EACCESS,      "EACCESS" },    /* access violation */
@@ -78,7 +116,6 @@ tftp_print(register const u_char *bp, u_int length)
        register const char *cp;
        register const u_char *p;
        register int opcode, i;
        register const char *cp;
        register const u_char *p;
        register int opcode, i;
-       static char tstr[] = " [|tftp]";
 
        tp = (const struct tftphdr *)bp;
 
 
        tp = (const struct tftphdr *)bp;
 
@@ -118,7 +155,7 @@ tftp_print(register const u_char *bp, u_int length)
                                fn_print(p, snapend);
                        }
                }
                                fn_print(p, snapend);
                        }
                }
-               
+
                if (i)
                        goto trunc;
                break;
                if (i)
                        goto trunc;
                break;