]> The Tcpdump Group git mirrors - tcpdump/blobdiff - netdissect.h
More UNALIGNED_MEM{CPY,CMP} on IP addresses.
[tcpdump] / netdissect.h
index bbb37e7be3046bd83cf0a30bc8874190cb1f459a..b4c24e64b7fec6597fec2e72eb2d219d167ba237 100644 (file)
@@ -270,6 +270,31 @@ extern char *copy_argv(netdissect_options *, char **);
 extern void safeputchar(int);
 extern void safeputs(const char *, int);
 
+#ifdef LBL_ALIGN
+/*
+ * The processor doesn't natively handle unaligned loads,
+ * and the compiler might "helpfully" optimize memcpy()
+ * and memcmp(), when handed pointers that would normally
+ * be properly aligned, into sequences that assume proper
+ * alignment.
+ *
+ * Do copies and compares of possibly-unaligned data by
+ * calling routines that wrap memcpy() and memcmp(), to
+ * prevent that optimization.
+ */
+extern void unaligned_memcpy(void *, const void *, size_t);
+extern int unaligned_memcmp(const void *, const void *, size_t);
+#define UNALIGNED_MEMCPY(p, q, l)      unaligned_memcpy((p), (q), (l))
+#define UNALIGNED_MEMCMP(p, q, l)      unaligned_memcmp((p), (q), (l))
+#else
+/*
+ * The procesor natively handles unaligned loads, so just use memcpy()
+ * and memcmp(), to enable those optimizations.
+ */
+#define UNALIGNED_MEMCPY(p, q, l)      memcpy((p), (q), (l))
+#define UNALIGNED_MEMCMP(p, q, l)      memcmp((p), (q), (l))
+#endif
+
 #define PLURAL_SUFFIX(n) \
        (((n) != 1) ? "s" : "")
 
@@ -293,7 +318,7 @@ extern if_printer lookup_printer(int);
 
 extern void eap_print(netdissect_options *,const u_char *, u_int);
 extern int esp_print(netdissect_options *,
-                    register const u_char *bp, int len, register const u_char *bp2,
+                    const u_char *bp, const int length, const u_char *bp2,
                     int *nhdr, int *padlen);
 extern void arp_print(netdissect_options *,const u_char *, u_int, u_int);
 extern void tipc_print(netdissect_options *, const u_char *, u_int, u_int);
@@ -309,6 +334,7 @@ extern void ip_print_inner(netdissect_options *ndo,
                           const u_char *bp, u_int length, u_int nh,
                           const u_char *bp2);
 extern void rrcp_print(netdissect_options *,const u_char *, u_int);
+extern void loopback_print(netdissect_options *, const u_char *, const u_int);
 
 extern void ether_print(netdissect_options *,
                         const u_char *, u_int, u_int,
@@ -332,6 +358,8 @@ extern void hex_print_with_offset(netdissect_options *, const char *ident, const
 extern void hex_print(netdissect_options *,const char *ident, const u_char *cp,u_int);
 
 /* stuff that has not yet been rototiled */
+extern const u_char * ns_nprint (register const u_char *, register const u_char *);
+
 #if 0
 extern void ascii_print(netdissect_options *,u_int);
 extern void hex_and_ascii_print_with_offset(netdissect_options *,const char *,