PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

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

#
C | 179 lines | 143 code | 18 blank | 18 comment | 4 complexity | 0bdd44dca8d06d28fb5af3ee0f53bca2 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-sunrpc.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-sunrpc.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) 1992, 1993, 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. */</span>
  43. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">lint</span>
  44. <span class="enscript-type">static</span> <span class="enscript-type">const</span> <span class="enscript-type">char</span> rcsid[] =
  45. <span class="enscript-string">&quot;@(#) $Header: /cvs/root/tcpdump/tcpdump/print-sunrpc.c,v 1.1.1.2 2003/03/17 18:42:20 rbraun Exp $ (LBL)&quot;</span>;
  46. #<span class="enscript-reference">endif</span>
  47. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_CONFIG_H</span>
  48. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;config.h&quot;</span>
  49. #<span class="enscript-reference">endif</span>
  50. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;tcpdump-stdinc.h&gt;</span>
  51. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;rpc/rpc.h&gt;</span>
  52. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_RPC_RPCENT_H</span>
  53. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;rpc/rpcent.h&gt;</span>
  54. #<span class="enscript-reference">endif</span>
  55. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">WIN32</span>
  56. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;rpc/pmap_prot.h&gt;</span>
  57. #<span class="enscript-reference">endif</span> <span class="enscript-comment">/* WIN32 */</span>
  58. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;stdio.h&gt;</span>
  59. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;string.h&gt;</span>
  60. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;interface.h&quot;</span>
  61. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;addrtoname.h&quot;</span>
  62. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;extract.h&quot;</span>
  63. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;ip.h&quot;</span>
  64. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  65. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;ip6.h&quot;</span>
  66. #<span class="enscript-reference">endif</span>
  67. <span class="enscript-type">static</span> <span class="enscript-type">struct</span> tok proc2str[] = {
  68. { PMAPPROC_NULL, <span class="enscript-string">&quot;null&quot;</span> },
  69. { PMAPPROC_SET, <span class="enscript-string">&quot;set&quot;</span> },
  70. { PMAPPROC_UNSET, <span class="enscript-string">&quot;unset&quot;</span> },
  71. { PMAPPROC_GETPORT, <span class="enscript-string">&quot;getport&quot;</span> },
  72. { PMAPPROC_DUMP, <span class="enscript-string">&quot;dump&quot;</span> },
  73. { PMAPPROC_CALLIT, <span class="enscript-string">&quot;call&quot;</span> },
  74. { 0, NULL }
  75. };
  76. <span class="enscript-comment">/* Forwards */</span>
  77. <span class="enscript-type">static</span> <span class="enscript-type">char</span> *<span class="enscript-function-name">progstr</span>(u_int32_t);
  78. <span class="enscript-type">void</span>
  79. <span class="enscript-function-name">sunrpcrequest_print</span>(<span class="enscript-type">register</span> <span class="enscript-type">const</span> u_char *bp, <span class="enscript-type">register</span> u_int length,
  80. <span class="enscript-type">register</span> <span class="enscript-type">const</span> u_char *bp2)
  81. {
  82. <span class="enscript-type">register</span> <span class="enscript-type">const</span> <span class="enscript-type">struct</span> rpc_msg *rp;
  83. <span class="enscript-type">register</span> <span class="enscript-type">const</span> <span class="enscript-type">struct</span> ip *ip;
  84. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  85. <span class="enscript-type">register</span> <span class="enscript-type">const</span> <span class="enscript-type">struct</span> ip6_hdr *ip6;
  86. #<span class="enscript-reference">endif</span>
  87. u_int32_t x;
  88. <span class="enscript-type">char</span> srcid[20], dstid[20]; <span class="enscript-comment">/*fits 32bit*/</span>
  89. rp = (<span class="enscript-type">struct</span> rpc_msg *)bp;
  90. <span class="enscript-keyword">if</span> (!nflag) {
  91. snprintf(srcid, <span class="enscript-keyword">sizeof</span>(srcid), <span class="enscript-string">&quot;0x%x&quot;</span>,
  92. EXTRACT_32BITS(&amp;rp-&gt;rm_xid));
  93. strlcpy(dstid, <span class="enscript-string">&quot;sunrpc&quot;</span>, <span class="enscript-keyword">sizeof</span>(dstid));
  94. } <span class="enscript-keyword">else</span> {
  95. snprintf(srcid, <span class="enscript-keyword">sizeof</span>(srcid), <span class="enscript-string">&quot;0x%x&quot;</span>,
  96. EXTRACT_32BITS(&amp;rp-&gt;rm_xid));
  97. snprintf(dstid, <span class="enscript-keyword">sizeof</span>(dstid), <span class="enscript-string">&quot;0x%x&quot;</span>, PMAPPORT);
  98. }
  99. <span class="enscript-keyword">switch</span> (IP_V((<span class="enscript-type">struct</span> ip *)bp2)) {
  100. <span class="enscript-keyword">case</span> <span class="enscript-reference">4</span>:
  101. ip = (<span class="enscript-type">struct</span> ip *)bp2;
  102. printf(<span class="enscript-string">&quot;%s.%s &gt; %s.%s: %d&quot;</span>,
  103. ipaddr_string(&amp;ip-&gt;ip_src), srcid,
  104. ipaddr_string(&amp;ip-&gt;ip_dst), dstid, length);
  105. <span class="enscript-keyword">break</span>;
  106. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  107. <span class="enscript-keyword">case</span> <span class="enscript-reference">6</span>:
  108. ip6 = (<span class="enscript-type">struct</span> ip6_hdr *)bp2;
  109. printf(<span class="enscript-string">&quot;%s.%s &gt; %s.%s: %d&quot;</span>,
  110. ip6addr_string(&amp;ip6-&gt;ip6_src), srcid,
  111. ip6addr_string(&amp;ip6-&gt;ip6_dst), dstid, length);
  112. <span class="enscript-keyword">break</span>;
  113. #<span class="enscript-reference">endif</span>
  114. <span class="enscript-reference">default</span>:
  115. printf(<span class="enscript-string">&quot;%s.%s &gt; %s.%s: %d&quot;</span>, <span class="enscript-string">&quot;?&quot;</span>, srcid, <span class="enscript-string">&quot;?&quot;</span>, dstid, length);
  116. <span class="enscript-keyword">break</span>;
  117. }
  118. printf(<span class="enscript-string">&quot; %s&quot;</span>, tok2str(proc2str, <span class="enscript-string">&quot; proc #%u&quot;</span>,
  119. EXTRACT_32BITS(&amp;rp-&gt;rm_call.cb_proc)));
  120. x = EXTRACT_32BITS(&amp;rp-&gt;rm_call.cb_rpcvers);
  121. <span class="enscript-keyword">if</span> (x != 2)
  122. printf(<span class="enscript-string">&quot; [rpcver %u]&quot;</span>, x);
  123. <span class="enscript-keyword">switch</span> (EXTRACT_32BITS(&amp;rp-&gt;rm_call.cb_proc)) {
  124. <span class="enscript-keyword">case</span> <span class="enscript-reference">PMAPPROC_SET</span>:
  125. <span class="enscript-keyword">case</span> <span class="enscript-reference">PMAPPROC_UNSET</span>:
  126. <span class="enscript-keyword">case</span> <span class="enscript-reference">PMAPPROC_GETPORT</span>:
  127. <span class="enscript-keyword">case</span> <span class="enscript-reference">PMAPPROC_CALLIT</span>:
  128. x = EXTRACT_32BITS(&amp;rp-&gt;rm_call.cb_prog);
  129. <span class="enscript-keyword">if</span> (!nflag)
  130. printf(<span class="enscript-string">&quot; %s&quot;</span>, progstr(x));
  131. <span class="enscript-keyword">else</span>
  132. printf(<span class="enscript-string">&quot; %u&quot;</span>, x);
  133. printf(<span class="enscript-string">&quot;.%u&quot;</span>, EXTRACT_32BITS(&amp;rp-&gt;rm_call.cb_vers));
  134. <span class="enscript-keyword">break</span>;
  135. }
  136. }
  137. <span class="enscript-type">static</span> <span class="enscript-type">char</span> *
  138. <span class="enscript-function-name">progstr</span>(prog)
  139. u_int32_t prog;
  140. {
  141. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">WIN32</span>
  142. <span class="enscript-type">register</span> <span class="enscript-type">struct</span> rpcent *rp;
  143. #<span class="enscript-reference">endif</span>
  144. <span class="enscript-type">static</span> <span class="enscript-type">char</span> buf[32];
  145. <span class="enscript-type">static</span> u_int32_t lastprog = 0;
  146. <span class="enscript-keyword">if</span> (lastprog != 0 &amp;&amp; prog == lastprog)
  147. <span class="enscript-keyword">return</span> (buf);
  148. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">WIN32</span>
  149. rp = getrpcbynumber(prog);
  150. <span class="enscript-keyword">if</span> (rp == NULL)
  151. #<span class="enscript-reference">endif</span> <span class="enscript-comment">/* WIN32 */</span>
  152. (<span class="enscript-type">void</span>) snprintf(buf, <span class="enscript-keyword">sizeof</span>(buf), <span class="enscript-string">&quot;#%u&quot;</span>, prog);
  153. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">WIN32</span>
  154. <span class="enscript-keyword">else</span>
  155. strlcpy(buf, rp-&gt;r_name, <span class="enscript-keyword">sizeof</span>(buf));
  156. #<span class="enscript-reference">endif</span>
  157. <span class="enscript-keyword">return</span> (buf);
  158. }
  159. </pre>
  160. <hr />
  161. </body></html>