]> The Tcpdump Group git mirrors - tcpdump/blobdiff - ip.h
CI: Add warning exemptions for Sun C (suncc-5.14) on Solaris 10
[tcpdump] / ip.h
diff --git a/ip.h b/ip.h
index adba2e6cdaeea12956ca6ad959c59042fef677b1..c1be0e66f177ae20efe02a6eb018becf585cf30b 100644 (file)
--- a/ip.h
+++ b/ip.h
@@ -1,4 +1,3 @@
-/* @(#) $Header: /tcpdump/master/tcpdump/ip.h,v 1.2 2000-09-24 07:40:45 guy Exp $ (LBL) */
 /*
  * Copyright (c) 1982, 1986, 1993
  *     The Regents of the University of California.  All rights reserved.
  *     @(#)ip.h        8.2 (Berkeley) 6/1/94
  */
 
-#ifndef BYTE_ORDER
-#define        LITTLE_ENDIAN   1234    /* least-significant byte first (vax, pc) */
-#define        BIG_ENDIAN      4321    /* most-significant byte first (IBM, net) */
-#define        PDP_ENDIAN      3412    /* LSB first in word, MSW first in long (pdp)*/
-
-#ifdef WORDS_BIGENDIAN
-#define BYTE_ORDER     BIG_ENDIAN
-#else
-#define BYTE_ORDER     LITTLE_ENDIAN
-#endif /* WORDS_BIGENDIAN */
-#endif /* BYTE_ORDER */
-
-#if !defined(BYTE_ORDER) || \
-    (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
-    BYTE_ORDER != PDP_ENDIAN)
-       /* you must determine what the correct bit order is for
-        * your compiler - the next line is an intentional error
-        * which will force your compiles to bomb until you fix
-        * the above macros.
-        */
-  #error "Undefined or invalid BYTE_ORDER";
-#endif
+#ifndef netdissect_ip_h
+#define netdissect_ip_h
 
 /*
  * Definitions for internet protocol version 4.
  * against negative integers quite easily, and fail in subtle ways.
  */
 struct ip {
-#if BYTE_ORDER == LITTLE_ENDIAN 
-       u_char  ip_hl:4,                /* header length */
-               ip_v:4;                 /* version */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN 
-       u_char  ip_v:4,                 /* version */
-               ip_hl:4;                /* header length */
-#endif
-       u_char  ip_tos;                 /* type of service */
-       short   ip_len;                 /* total length */
-       u_short ip_id;                  /* identification */
-       short   ip_off;                 /* fragment offset field */
-#define        IP_DF 0x4000                    /* dont fragment flag */
+       nd_uint8_t      ip_vhl;         /* header length, version */
+#define IP_V(ip)       ((GET_U_1((ip)->ip_vhl) & 0xf0) >> 4)
+#define IP_HL(ip)      (GET_U_1((ip)->ip_vhl) & 0x0f)
+       nd_uint8_t      ip_tos;         /* type of service */
+       nd_uint16_t     ip_len;         /* total length */
+       nd_uint16_t     ip_id;          /* identification */
+       nd_uint16_t     ip_off;         /* fragment offset field */
+#define        IP_DF 0x4000                    /* don't fragment flag */
 #define        IP_MF 0x2000                    /* more fragments flag */
 #define        IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
-       u_char  ip_ttl;                 /* time to live */
-       u_char  ip_p;                   /* protocol */
-       u_short ip_sum;                 /* checksum */
-       struct  in_addr ip_src,ip_dst;  /* source and dest address */
+       nd_uint8_t      ip_ttl;         /* time to live */
+       nd_uint8_t      ip_p;           /* protocol */
+       nd_uint16_t     ip_sum;         /* checksum */
+       nd_ipv4         ip_src,ip_dst;  /* source and dest address */
 };
 
 #define        IP_MAXPACKET    65535           /* maximum packet size */
@@ -130,10 +104,11 @@ struct ip {
 
 #define        IPOPT_RR                7               /* record packet route */
 #define        IPOPT_TS                68              /* timestamp */
+#define        IPOPT_RFC1393           82              /* traceroute RFC 1393 */
 #define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
 #define        IPOPT_LSRR              131             /* loose source route */
-#define        IPOPT_SATID             136             /* satnet id */
 #define        IPOPT_SSRR              137             /* strict source route */
+#define IPOPT_RA                148             /* router-alert, rfc2113 */
 
 /*
  * Offsets to fields in options other than EOL and NOP.
@@ -147,22 +122,17 @@ struct ip {
  * Time stamp option structure.
  */
 struct ip_timestamp {
-       u_char  ipt_code;               /* IPOPT_TS */
-       u_char  ipt_len;                /* size of structure (variable) */
-       u_char  ipt_ptr;                /* index of current entry */
-#if BYTE_ORDER == LITTLE_ENDIAN 
-       u_char  ipt_flg:4,              /* flags, see below */
-               ipt_oflw:4;             /* overflow counter */
-#endif
-#if BYTE_ORDER == BIG_ENDIAN 
-       u_char  ipt_oflw:4,             /* overflow counter */
-               ipt_flg:4;              /* flags, see below */
-#endif
+       nd_uint8_t      ipt_code;       /* IPOPT_TS */
+       nd_uint8_t      ipt_len;        /* size of structure (variable) */
+       nd_uint8_t      ipt_ptr;        /* index of current entry */
+       nd_uint8_t      ipt_oflwflg;    /* flags, overflow counter */
+#define IPTS_OFLW(ip)  (((ipt)->ipt_oflwflg & 0xf0) >> 4)
+#define IPTS_FLG(ip)   ((ipt)->ipt_oflwflg & 0x0f)
        union ipt_timestamp {
-               n_long  ipt_time[1];
+               nd_uint32_t ipt_time[1];
                struct  ipt_ta {
-                       struct in_addr ipt_addr;
-                       n_long ipt_time;
+                       nd_ipv4 ipt_addr;
+                       nd_uint32_t ipt_time;
                } ipt_ta[1];
        } ipt_timestamp;
 };
@@ -190,3 +160,4 @@ struct      ip_timestamp {
 #define        IPTTLDEC        1               /* subtracted when forwarding */
 
 #define        IP_MSS          576             /* default maximum segment size */
+#endif /* netdissect_ip_h */