PageRenderTime 30ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/opensource.apple.com/source/tcpdump/tcpdump-7/tcpdump/print-ipx.c

#
C | 239 lines | 190 code | 27 blank | 22 comment | 2 complexity | 01d3982e7f31c9c2a74ae717ce467423 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, GPL-2.0, BSD-3-Clause, GPL-3.0, MPL-2.0, LGPL-2.0, LGPL-2.1, CC-BY-SA-3.0, IPL-1.0, ISC, AGPL-1.0, AGPL-3.0, JSON, Apache-2.0, 0BSD
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <title>print-ipx.c</title>
  6. <style type="text/css">
  7. .enscript-comment { font-style: italic; color: rgb(178,34,34); }
  8. .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
  9. .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
  10. .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
  11. .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
  12. .enscript-string { font-weight: bold; color: rgb(188,143,143); }
  13. .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
  14. .enscript-type { font-weight: bold; color: rgb(34,139,34); }
  15. .enscript-highlight { text-decoration: underline; color: 0; }
  16. </style>
  17. </head>
  18. <body id="top">
  19. <h1 style="margin:8px;" id="f1">print-ipx.c&nbsp;&nbsp;&nbsp;<span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
  20. <hr/>
  21. <div></div>
  22. <pre>
  23. <span class="enscript-comment">/*
  24. * Copyright (c) 1994, 1995, 1996
  25. * The Regents of the University of California. All rights reserved.
  26. *
  27. * Redistribution and use in source and binary forms, with or without
  28. * modification, are permitted provided that: (1) source code distributions
  29. * retain the above copyright notice and this paragraph in its entirety, (2)
  30. * distributions including binary code include the above copyright notice and
  31. * this paragraph in its entirety in the documentation or other materials
  32. * provided with the distribution, and (3) all advertising materials mentioning
  33. * features or use of this software display the following acknowledgement:
  34. * ``This product includes software developed by the University of California,
  35. * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
  36. * the University nor the names of its contributors may be used to endorse
  37. * or promote products derived from this software without specific prior
  38. * written permission.
  39. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  40. * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  41. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  42. *
  43. * Format and print Novell IPX packets.
  44. * Contributed by Brad Parker (<a href="mailto:brad@fcr.com">brad@fcr.com</a>).
  45. */</span>
  46. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">lint</span>
  47. <span class="enscript-type">static</span> <span class="enscript-type">const</span> <span class="enscript-type">char</span> rcsid[] =
  48. <span class="enscript-string">&quot;@(#) $Header: /cvs/root/tcpdump/tcpdump/print-ipx.c,v 1.1.1.3 2003/03/17 18:42:17 rbraun Exp $&quot;</span>;
  49. #<span class="enscript-reference">endif</span>
  50. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_CONFIG_H</span>
  51. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;config.h&quot;</span>
  52. #<span class="enscript-reference">endif</span>
  53. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;tcpdump-stdinc.h&gt;</span>
  54. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;stdlib.h&gt;</span>
  55. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;stdio.h&gt;</span>
  56. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;string.h&gt;</span>
  57. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;interface.h&quot;</span>
  58. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;addrtoname.h&quot;</span>
  59. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;ipx.h&quot;</span>
  60. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;extract.h&quot;</span>
  61. <span class="enscript-type">static</span> <span class="enscript-type">const</span> <span class="enscript-type">char</span> *<span class="enscript-function-name">ipxaddr_string</span>(u_int32_t, <span class="enscript-type">const</span> u_char *);
  62. <span class="enscript-type">void</span> <span class="enscript-function-name">ipx_decode</span>(<span class="enscript-type">const</span> <span class="enscript-type">struct</span> ipxHdr *, <span class="enscript-type">const</span> u_char *, u_int);
  63. <span class="enscript-type">void</span> <span class="enscript-function-name">ipx_sap_print</span>(<span class="enscript-type">const</span> u_short *, u_int);
  64. <span class="enscript-type">void</span> <span class="enscript-function-name">ipx_rip_print</span>(<span class="enscript-type">const</span> u_short *, u_int);
  65. <span class="enscript-comment">/*
  66. * Print IPX datagram packets.
  67. */</span>
  68. <span class="enscript-type">void</span>
  69. <span class="enscript-function-name">ipx_print</span>(<span class="enscript-type">const</span> u_char *p, u_int length)
  70. {
  71. <span class="enscript-type">const</span> <span class="enscript-type">struct</span> ipxHdr *ipx = (<span class="enscript-type">const</span> <span class="enscript-type">struct</span> ipxHdr *)p;
  72. TCHECK(ipx-&gt;srcSkt);
  73. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;%s.%04x &gt; &quot;</span>,
  74. ipxaddr_string(EXTRACT_32BITS(ipx-&gt;srcNet), ipx-&gt;srcNode),
  75. EXTRACT_16BITS(&amp;ipx-&gt;srcSkt));
  76. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;%s.%04x:&quot;</span>,
  77. ipxaddr_string(EXTRACT_32BITS(ipx-&gt;dstNet), ipx-&gt;dstNode),
  78. EXTRACT_16BITS(&amp;ipx-&gt;dstSkt));
  79. <span class="enscript-comment">/* take length from ipx header */</span>
  80. TCHECK(ipx-&gt;length);
  81. length = EXTRACT_16BITS(&amp;ipx-&gt;length);
  82. ipx_decode(ipx, (u_char *)ipx + ipxSize, length - ipxSize);
  83. <span class="enscript-keyword">return</span>;
  84. <span class="enscript-reference">trunc</span>:
  85. printf(<span class="enscript-string">&quot;[|ipx %d]&quot;</span>, length);
  86. }
  87. <span class="enscript-type">static</span> <span class="enscript-type">const</span> <span class="enscript-type">char</span> *
  88. <span class="enscript-function-name">ipxaddr_string</span>(u_int32_t net, <span class="enscript-type">const</span> u_char *node)
  89. {
  90. <span class="enscript-type">static</span> <span class="enscript-type">char</span> line[256];
  91. snprintf(line, <span class="enscript-keyword">sizeof</span>(line), <span class="enscript-string">&quot;%08x.%02x:%02x:%02x:%02x:%02x:%02x&quot;</span>,
  92. net, node[0], node[1], node[2], node[3], node[4], node[5]);
  93. <span class="enscript-keyword">return</span> line;
  94. }
  95. <span class="enscript-type">void</span>
  96. <span class="enscript-function-name">ipx_decode</span>(<span class="enscript-type">const</span> <span class="enscript-type">struct</span> ipxHdr *ipx, <span class="enscript-type">const</span> u_char *datap, u_int length)
  97. {
  98. <span class="enscript-type">register</span> u_short dstSkt;
  99. dstSkt = EXTRACT_16BITS(&amp;ipx-&gt;dstSkt);
  100. <span class="enscript-keyword">switch</span> (dstSkt) {
  101. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NCP</span>:
  102. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-ncp %d&quot;</span>, length);
  103. <span class="enscript-keyword">break</span>;
  104. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_SAP</span>:
  105. ipx_sap_print((u_short *)datap, length);
  106. <span class="enscript-keyword">break</span>;
  107. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_RIP</span>:
  108. ipx_rip_print((u_short *)datap, length);
  109. <span class="enscript-keyword">break</span>;
  110. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NETBIOS</span>:
  111. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-netbios %d&quot;</span>, length);
  112. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">TCPDUMP_DO_SMB</span>
  113. ipx_netbios_print(datap, length);
  114. #<span class="enscript-reference">endif</span>
  115. <span class="enscript-keyword">break</span>;
  116. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_DIAGNOSTICS</span>:
  117. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-diags %d&quot;</span>, length);
  118. <span class="enscript-keyword">break</span>;
  119. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NWLINK_DGM</span>:
  120. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-nwlink-dgm %d&quot;</span>, length);
  121. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">TCPDUMP_DO_SMB</span>
  122. ipx_netbios_print(datap, length);
  123. #<span class="enscript-reference">endif</span>
  124. <span class="enscript-keyword">break</span>;
  125. <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_EIGRP</span>:
  126. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-eigrp %d&quot;</span>, length);
  127. <span class="enscript-keyword">break</span>;
  128. <span class="enscript-reference">default</span>:
  129. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; ipx-#%x %d&quot;</span>, dstSkt, length);
  130. <span class="enscript-keyword">break</span>;
  131. }
  132. }
  133. <span class="enscript-type">void</span>
  134. <span class="enscript-function-name">ipx_sap_print</span>(<span class="enscript-type">const</span> u_short *ipx, u_int length)
  135. {
  136. <span class="enscript-type">int</span> command, i;
  137. TCHECK(ipx[0]);
  138. command = EXTRACT_16BITS(ipx);
  139. ipx++;
  140. length -= 2;
  141. <span class="enscript-keyword">switch</span> (command) {
  142. <span class="enscript-keyword">case</span> <span class="enscript-reference">1</span>:
  143. <span class="enscript-keyword">case</span> <span class="enscript-reference">3</span>:
  144. <span class="enscript-keyword">if</span> (command == 1)
  145. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-sap-req&quot;</span>);
  146. <span class="enscript-keyword">else</span>
  147. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-sap-nearest-req&quot;</span>);
  148. TCHECK(ipx[0]);
  149. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; %s&quot;</span>, ipxsap_string(htons(EXTRACT_16BITS(&amp;ipx[0]))));
  150. <span class="enscript-keyword">break</span>;
  151. <span class="enscript-keyword">case</span> <span class="enscript-reference">2</span>:
  152. <span class="enscript-keyword">case</span> <span class="enscript-reference">4</span>:
  153. <span class="enscript-keyword">if</span> (command == 2)
  154. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-sap-resp&quot;</span>);
  155. <span class="enscript-keyword">else</span>
  156. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-sap-nearest-resp&quot;</span>);
  157. <span class="enscript-keyword">for</span> (i = 0; i &lt; 8 &amp;&amp; length &gt; 0; i++) {
  158. TCHECK2(ipx[25], 10);
  159. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; %s '&quot;</span>, ipxsap_string(htons(EXTRACT_16BITS(&amp;ipx[0]))));
  160. fn_print((u_char *)&amp;ipx[1], (u_char *)&amp;ipx[1] + 48);
  161. printf(<span class="enscript-string">&quot;' addr %s&quot;</span>,
  162. ipxaddr_string(EXTRACT_32BITS(&amp;ipx[25]), (u_char *)&amp;ipx[27]));
  163. ipx += 32;
  164. length -= 64;
  165. }
  166. <span class="enscript-keyword">break</span>;
  167. <span class="enscript-reference">default</span>:
  168. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-sap-?%x&quot;</span>, command);
  169. <span class="enscript-keyword">break</span>;
  170. }
  171. <span class="enscript-keyword">return</span>;
  172. <span class="enscript-reference">trunc</span>:
  173. printf(<span class="enscript-string">&quot;[|ipx %d]&quot;</span>, length);
  174. }
  175. <span class="enscript-type">void</span>
  176. <span class="enscript-function-name">ipx_rip_print</span>(<span class="enscript-type">const</span> u_short *ipx, u_int length)
  177. {
  178. <span class="enscript-type">int</span> command, i;
  179. TCHECK(ipx[0]);
  180. command = EXTRACT_16BITS(ipx);
  181. ipx++;
  182. length -= 2;
  183. <span class="enscript-keyword">switch</span> (command) {
  184. <span class="enscript-keyword">case</span> <span class="enscript-reference">1</span>:
  185. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-rip-req&quot;</span>);
  186. <span class="enscript-keyword">if</span> (length &gt; 0) {
  187. TCHECK(ipx[3]);
  188. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; %u/%d.%d&quot;</span>, EXTRACT_32BITS(&amp;ipx[0]),
  189. EXTRACT_16BITS(&amp;ipx[2]), EXTRACT_16BITS(&amp;ipx[3]));
  190. }
  191. <span class="enscript-keyword">break</span>;
  192. <span class="enscript-keyword">case</span> <span class="enscript-reference">2</span>:
  193. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-rip-resp&quot;</span>);
  194. <span class="enscript-keyword">for</span> (i = 0; i &lt; 50 &amp;&amp; length &gt; 0; i++) {
  195. TCHECK(ipx[3]);
  196. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot; %u/%d.%d&quot;</span>, EXTRACT_32BITS(&amp;ipx[0]),
  197. EXTRACT_16BITS(&amp;ipx[2]), EXTRACT_16BITS(&amp;ipx[3]));
  198. ipx += 4;
  199. length -= 8;
  200. }
  201. <span class="enscript-keyword">break</span>;
  202. <span class="enscript-reference">default</span>:
  203. (<span class="enscript-type">void</span>)printf(<span class="enscript-string">&quot;ipx-rip-?%x&quot;</span>, command);
  204. <span class="enscript-keyword">break</span>;
  205. }
  206. <span class="enscript-keyword">return</span>;
  207. <span class="enscript-reference">trunc</span>:
  208. printf(<span class="enscript-string">&quot;[|ipx %d]&quot;</span>, length);
  209. }
  210. </pre>
  211. <hr />
  212. </body></html>