Commit | Line | Data |
---|---|---|
c8cf0f94 PA |
1 | /* |
2 | * Copyright (c) 1990, 1992, 1993, 1994, 1995, 1996, 1997 | |
3 | * The Regents of the University of California. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that: (1) source code distributions | |
7 | * retain the above copyright notice and this paragraph in its entirety, (2) | |
8 | * distributions including binary code include the above copyright notice and | |
9 | * this paragraph in its entirety in the documentation or other materials | |
10 | * provided with the distribution, and (3) all advertising materials mentioning | |
11 | * features or use of this software display the following acknowledgement: | |
12 | * ``This product includes software developed by the University of California, | |
13 | * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of | |
14 | * the University nor the names of its contributors may be used to endorse | |
15 | * or promote products derived from this software without specific prior | |
16 | * written permission. | |
17 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | |
18 | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
19 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
c8cf0f94 PA |
20 | */ |
21 | ||
ed775ee7 AHJ |
22 | #include "extract.h" |
23 | ||
411677ae | 24 | /* |
ed775ee7 | 25 | * Definition to let us compile most of the IPv6 code even on systems |
411677ae AL |
26 | * without IPv6 support. |
27 | */ | |
28 | #ifndef INET6_ADDRSTRLEN | |
29 | #define INET6_ADDRSTRLEN 46 | |
30 | #endif | |
31 | ||
c8cf0f94 PA |
32 | /* Name to address translation routines. */ |
33 | ||
ea7b4bf5 PA |
34 | enum { |
35 | LINKADDR_ETHER, | |
36 | LINKADDR_FRELAY, | |
37 | LINKADDR_IEEE1394, | |
411677ae AL |
38 | LINKADDR_ATM, |
39 | LINKADDR_OTHER | |
ea7b4bf5 PA |
40 | }; |
41 | ||
42 | #define BUFSIZE 128 | |
43 | ||
ed775ee7 AHJ |
44 | extern const char *linkaddr_string(netdissect_options *, const uint8_t *, const unsigned int, const unsigned int); |
45 | extern const char *etheraddr_string(netdissect_options *, const uint8_t *); | |
46 | extern const char *le64addr_string(netdissect_options *, const uint8_t *); | |
411677ae AL |
47 | extern const char *tcpport_string(netdissect_options *, u_short); |
48 | extern const char *udpport_string(netdissect_options *, u_short); | |
ed775ee7 | 49 | extern const char *isonsap_string(netdissect_options *, const uint8_t *, u_int); |
411677ae | 50 | extern const char *dnaddr_string(netdissect_options *, u_short); |
411677ae | 51 | extern const char *ipxsap_string(netdissect_options *, u_short); |
ed775ee7 AHJ |
52 | extern const char *ipaddr_string(netdissect_options *, const u_char *); |
53 | extern const char *ip6addr_string(netdissect_options *, const u_char *); | |
411677ae | 54 | extern const char *intoa(uint32_t); |
c8cf0f94 | 55 | |
411677ae AL |
56 | extern void init_addrtoname(netdissect_options *, uint32_t, uint32_t); |
57 | extern struct hnamemem *newhnamemem(netdissect_options *); | |
58 | extern struct h6namemem *newh6namemem(netdissect_options *); | |
59 | extern const char * ieee8021q_tci_string(const uint16_t); | |
c8cf0f94 | 60 | |
ed775ee7 AHJ |
61 | /* macro(s) and inline function(s) with setjmp/longjmp logic to call |
62 | * the X_string() function(s) after bounds checking. | |
63 | * The macro(s) must be used on a packet buffer pointer. | |
64 | */ | |
65 | ||
66 | static inline const char * | |
67 | get_linkaddr_string(netdissect_options *ndo, const uint8_t *p, | |
68 | const unsigned int type, const unsigned int len) | |
69 | { | |
70 | if (!ND_TTEST_LEN(p, len)) | |
71 | nd_trunc_longjmp(ndo); | |
72 | return linkaddr_string(ndo, p, type, len); | |
73 | } | |
74 | ||
75 | static inline const char * | |
76 | get_etheraddr_string(netdissect_options *ndo, const uint8_t *p) | |
77 | { | |
78 | if (!ND_TTEST_LEN(p, MAC_ADDR_LEN)) | |
79 | nd_trunc_longjmp(ndo); | |
80 | return etheraddr_string(ndo, p); | |
81 | } | |
82 | ||
83 | static inline const char * | |
84 | get_le64addr_string(netdissect_options *ndo, const u_char *p) | |
85 | { | |
86 | if (!ND_TTEST_8(p)) | |
87 | nd_trunc_longjmp(ndo); | |
88 | return le64addr_string(ndo, p); | |
89 | } | |
90 | ||
91 | static inline const char * | |
92 | get_isonsap_string(netdissect_options *ndo, const uint8_t *nsap, | |
93 | u_int nsap_length) | |
94 | { | |
95 | if (!ND_TTEST_LEN(nsap, nsap_length)) | |
96 | nd_trunc_longjmp(ndo); | |
97 | return isonsap_string(ndo, nsap, nsap_length); | |
98 | } | |
99 | ||
100 | static inline const char * | |
101 | get_ipaddr_string(netdissect_options *ndo, const u_char *p) | |
102 | { | |
103 | if (!ND_TTEST_4(p)) | |
104 | nd_trunc_longjmp(ndo); | |
105 | return ipaddr_string(ndo, p); | |
106 | } | |
107 | ||
108 | static inline const char * | |
109 | get_ip6addr_string(netdissect_options *ndo, const u_char *p) | |
110 | { | |
111 | if (!ND_TTEST_16(p)) | |
112 | nd_trunc_longjmp(ndo); | |
113 | return ip6addr_string(ndo, p); | |
114 | } | |
115 | ||
116 | #define GET_LINKADDR_STRING(p, type, len) get_linkaddr_string(ndo, (const u_char *)(p), type, len) | |
117 | #define GET_ETHERADDR_STRING(p) get_etheraddr_string(ndo, (const u_char *)(p)) | |
118 | #define GET_LE64ADDR_STRING(p) get_le64addr_string(ndo, (const u_char *)(p)) | |
119 | #define GET_ISONSAP_STRING(nsap, nsap_length) get_isonsap_string(ndo, (const u_char *)(nsap), nsap_length) | |
120 | #define GET_IPADDR_STRING(p) get_ipaddr_string(ndo, (const u_char *)(p)) | |
121 | #define GET_IP6ADDR_STRING(p) get_ip6addr_string(ndo, (const u_char *)(p)) |