/opensource.apple.com/source/tcpdump/tcpdump-11/tcpdump/print-ipx.c
C | 239 lines | 190 code | 27 blank | 22 comment | 2 complexity | 938c8565161130da87fcb63da690f7b1 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
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>print-ipx.c</title>
- <style type="text/css">
- .enscript-comment { font-style: italic; color: rgb(178,34,34); }
- .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
- .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
- .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
- .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
- .enscript-string { font-weight: bold; color: rgb(188,143,143); }
- .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
- .enscript-type { font-weight: bold; color: rgb(34,139,34); }
- .enscript-highlight { text-decoration: underline; color: 0; }
- </style>
- </head>
- <body id="top">
- <h1 style="margin:8px;" id="f1">print-ipx.c <span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
- <hr/>
- <div></div>
- <pre>
- <span class="enscript-comment">/*
- * Copyright (c) 1994, 1995, 1996
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
- * the University nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Format and print Novell IPX packets.
- * Contributed by Brad Parker (<a href="mailto:brad@fcr.com">brad@fcr.com</a>).
- */</span>
- #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">lint</span>
- <span class="enscript-type">static</span> <span class="enscript-type">const</span> <span class="enscript-type">char</span> rcsid[] _U_ =
- <span class="enscript-string">"@(#) $Header: /cvs/root/tcpdump/tcpdump/print-ipx.c,v 1.1.1.4 2004/02/05 19:30:54 rbraun Exp $"</span>;
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_CONFIG_H</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"config.h"</span>
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><tcpdump-stdinc.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><stdlib.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><stdio.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><string.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"interface.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"addrtoname.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"ipx.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"extract.h"</span>
- <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 *);
- <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);
- <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);
- <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);
- <span class="enscript-comment">/*
- * Print IPX datagram packets.
- */</span>
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">ipx_print</span>(<span class="enscript-type">const</span> u_char *p, u_int length)
- {
- <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;
- TCHECK(ipx->srcSkt);
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"%s.%04x > "</span>,
- ipxaddr_string(EXTRACT_32BITS(ipx->srcNet), ipx->srcNode),
- EXTRACT_16BITS(&ipx->srcSkt));
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"%s.%04x:"</span>,
- ipxaddr_string(EXTRACT_32BITS(ipx->dstNet), ipx->dstNode),
- EXTRACT_16BITS(&ipx->dstSkt));
- <span class="enscript-comment">/* take length from ipx header */</span>
- TCHECK(ipx->length);
- length = EXTRACT_16BITS(&ipx->length);
- ipx_decode(ipx, (u_char *)ipx + ipxSize, length - ipxSize);
- <span class="enscript-keyword">return</span>;
- <span class="enscript-reference">trunc</span>:
- printf(<span class="enscript-string">"[|ipx %d]"</span>, length);
- }
- <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 net, <span class="enscript-type">const</span> u_char *node)
- {
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> line[256];
- snprintf(line, <span class="enscript-keyword">sizeof</span>(line), <span class="enscript-string">"%08x.%02x:%02x:%02x:%02x:%02x:%02x"</span>,
- net, node[0], node[1], node[2], node[3], node[4], node[5]);
- <span class="enscript-keyword">return</span> line;
- }
- <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 *ipx, <span class="enscript-type">const</span> u_char *datap, u_int length)
- {
- <span class="enscript-type">register</span> u_short dstSkt;
- dstSkt = EXTRACT_16BITS(&ipx->dstSkt);
- <span class="enscript-keyword">switch</span> (dstSkt) {
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NCP</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-ncp %d"</span>, length);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_SAP</span>:
- ipx_sap_print((u_short *)datap, length);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_RIP</span>:
- ipx_rip_print((u_short *)datap, length);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NETBIOS</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-netbios %d"</span>, length);
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">TCPDUMP_DO_SMB</span>
- ipx_netbios_print(datap, length);
- #<span class="enscript-reference">endif</span>
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_DIAGNOSTICS</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-diags %d"</span>, length);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_NWLINK_DGM</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-nwlink-dgm %d"</span>, length);
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">TCPDUMP_DO_SMB</span>
- ipx_netbios_print(datap, length);
- #<span class="enscript-reference">endif</span>
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">IPX_SKT_EIGRP</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-eigrp %d"</span>, length);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-reference">default</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" ipx-#%x %d"</span>, dstSkt, length);
- <span class="enscript-keyword">break</span>;
- }
- }
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">ipx_sap_print</span>(<span class="enscript-type">const</span> u_short *ipx, u_int length)
- {
- <span class="enscript-type">int</span> command, i;
- TCHECK(ipx[0]);
- command = EXTRACT_16BITS(ipx);
- ipx++;
- length -= 2;
- <span class="enscript-keyword">switch</span> (command) {
- <span class="enscript-keyword">case</span> <span class="enscript-reference">1</span>:
- <span class="enscript-keyword">case</span> <span class="enscript-reference">3</span>:
- <span class="enscript-keyword">if</span> (command == 1)
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-sap-req"</span>);
- <span class="enscript-keyword">else</span>
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-sap-nearest-req"</span>);
- TCHECK(ipx[0]);
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" %s"</span>, ipxsap_string(htons(EXTRACT_16BITS(&ipx[0]))));
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">2</span>:
- <span class="enscript-keyword">case</span> <span class="enscript-reference">4</span>:
- <span class="enscript-keyword">if</span> (command == 2)
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-sap-resp"</span>);
- <span class="enscript-keyword">else</span>
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-sap-nearest-resp"</span>);
- <span class="enscript-keyword">for</span> (i = 0; i < 8 && length > 0; i++) {
- TCHECK2(ipx[25], 10);
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" %s '"</span>, ipxsap_string(htons(EXTRACT_16BITS(&ipx[0]))));
- fn_print((u_char *)&ipx[1], (u_char *)&ipx[1] + 48);
- printf(<span class="enscript-string">"' addr %s"</span>,
- ipxaddr_string(EXTRACT_32BITS(&ipx[25]), (u_char *)&ipx[27]));
- ipx += 32;
- length -= 64;
- }
- <span class="enscript-keyword">break</span>;
- <span class="enscript-reference">default</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-sap-?%x"</span>, command);
- <span class="enscript-keyword">break</span>;
- }
- <span class="enscript-keyword">return</span>;
- <span class="enscript-reference">trunc</span>:
- printf(<span class="enscript-string">"[|ipx %d]"</span>, length);
- }
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">ipx_rip_print</span>(<span class="enscript-type">const</span> u_short *ipx, u_int length)
- {
- <span class="enscript-type">int</span> command, i;
- TCHECK(ipx[0]);
- command = EXTRACT_16BITS(ipx);
- ipx++;
- length -= 2;
- <span class="enscript-keyword">switch</span> (command) {
- <span class="enscript-keyword">case</span> <span class="enscript-reference">1</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-rip-req"</span>);
- <span class="enscript-keyword">if</span> (length > 0) {
- TCHECK(ipx[3]);
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" %u/%d.%d"</span>, EXTRACT_32BITS(&ipx[0]),
- EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
- }
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-reference">2</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-rip-resp"</span>);
- <span class="enscript-keyword">for</span> (i = 0; i < 50 && length > 0; i++) {
- TCHECK(ipx[3]);
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">" %u/%d.%d"</span>, EXTRACT_32BITS(&ipx[0]),
- EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
- ipx += 4;
- length -= 8;
- }
- <span class="enscript-keyword">break</span>;
- <span class="enscript-reference">default</span>:
- (<span class="enscript-type">void</span>)printf(<span class="enscript-string">"ipx-rip-?%x"</span>, command);
- <span class="enscript-keyword">break</span>;
- }
- <span class="enscript-keyword">return</span>;
- <span class="enscript-reference">trunc</span>:
- printf(<span class="enscript-string">"[|ipx %d]"</span>, length);
- }
- </pre>
- <hr />
- </body></html>