]>
Commit | Line | Data |
---|---|---|
b7080c8e A |
1 | /* |
2 | * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights | |
7 | * Reserved. This file contains Original Code and/or Modifications of | |
8 | * Original Code as defined in and that are subject to the Apple Public | |
9 | * Source License Version 1.0 (the 'License'). You may not use this file | |
10 | * except in compliance with the License. Please obtain a copy of the | |
11 | * License at http://www.apple.com/publicsource and read it before using | |
12 | * this file. | |
13 | * | |
14 | * The Original Code and all software distributed under the License are | |
15 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
16 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
17 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
18 | * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the | |
19 | * License for the specific language governing rights and limitations | |
20 | * under the License." | |
21 | * | |
22 | * @APPLE_LICENSE_HEADER_END@ | |
23 | */ | |
24 | /* | |
25 | * Copyright (c) 1992, 1993, 1994, 1995, 1996 | |
26 | * The Regents of the University of California. All rights reserved. | |
27 | * | |
28 | * Redistribution and use in source and binary forms, with or without | |
29 | * modification, are permitted provided that: (1) source code distributions | |
30 | * retain the above copyright notice and this paragraph in its entirety, (2) | |
31 | * distributions including binary code include the above copyright notice and | |
32 | * this paragraph in its entirety in the documentation or other materials | |
33 | * provided with the distribution, and (3) all advertising materials mentioning | |
34 | * features or use of this software display the following acknowledgement: | |
35 | * ``This product includes software developed by the University of California, | |
36 | * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of | |
37 | * the University nor the names of its contributors may be used to endorse | |
38 | * or promote products derived from this software without specific prior | |
39 | * written permission. | |
40 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | |
41 | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
42 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
43 | */ | |
44 | ||
45 | #ifndef lint | |
46 | static const char rcsid[] = | |
47 | "@(#) $Header: /cvs/Darwin/Commands/NeXT/network_cmds/tcpdump.tproj/print-sunrpc.c,v 1.1.1.1 1999/05/02 03:58:34 wsanchez Exp $ (LBL)"; | |
48 | #endif | |
49 | ||
50 | #include <sys/param.h> | |
51 | #include <sys/time.h> | |
52 | #include <sys/socket.h> | |
53 | ||
54 | #if __STDC__ | |
55 | struct mbuf; | |
56 | struct rtentry; | |
57 | #endif | |
58 | #include <net/if.h> | |
59 | ||
60 | #include <netinet/in.h> | |
61 | #include <netinet/if_ether.h> | |
62 | #include <netinet/in_systm.h> | |
63 | #include <netinet/ip.h> | |
64 | #include <netinet/ip_var.h> | |
65 | ||
66 | #include <rpc/rpc.h> | |
67 | #ifdef HAVE_RPC_RPCENT_H | |
68 | #include <rpc/rpcent.h> | |
69 | #endif | |
70 | #include <rpc/pmap_prot.h> | |
71 | ||
72 | #include <ctype.h> | |
73 | #include <netdb.h> | |
74 | #include <stdio.h> | |
75 | #include <string.h> | |
76 | ||
77 | #include "interface.h" | |
78 | #include "addrtoname.h" | |
79 | ||
80 | static struct tok proc2str[] = { | |
81 | { PMAPPROC_NULL, "null" }, | |
82 | { PMAPPROC_SET, "set" }, | |
83 | { PMAPPROC_UNSET, "unset" }, | |
84 | { PMAPPROC_GETPORT, "getport" }, | |
85 | { PMAPPROC_DUMP, "dump" }, | |
86 | { PMAPPROC_CALLIT, "call" }, | |
87 | { 0, NULL } | |
88 | }; | |
89 | ||
90 | /* Forwards */ | |
91 | static char *progstr(u_int32_t); | |
92 | ||
93 | void | |
94 | sunrpcrequest_print(register const u_char *bp, register u_int length, | |
95 | register const u_char *bp2) | |
96 | { | |
97 | register const struct rpc_msg *rp; | |
98 | register const struct ip *ip; | |
99 | u_int32_t x; | |
100 | ||
101 | rp = (struct rpc_msg *)bp; | |
102 | ip = (struct ip *)bp2; | |
103 | ||
104 | if (!nflag) | |
105 | (void)printf("%s.%x > %s.sunrpc: %d", | |
106 | ipaddr_string(&ip->ip_src), | |
107 | (u_int32_t)ntohl(rp->rm_xid), | |
108 | ipaddr_string(&ip->ip_dst), | |
109 | length); | |
110 | else | |
111 | (void)printf("%s.%x > %s.%x: %d", | |
112 | ipaddr_string(&ip->ip_src), | |
113 | (u_int32_t)ntohl(rp->rm_xid), | |
114 | ipaddr_string(&ip->ip_dst), | |
115 | PMAPPORT, | |
116 | length); | |
117 | printf(" %s", tok2str(proc2str, " proc #%u", | |
118 | (u_int32_t)ntohl(rp->rm_call.cb_proc))); | |
119 | x = ntohl(rp->rm_call.cb_rpcvers); | |
120 | if (x != 2) | |
121 | printf(" [rpcver %u]", x); | |
122 | ||
123 | switch (ntohl(rp->rm_call.cb_proc)) { | |
124 | ||
125 | case PMAPPROC_SET: | |
126 | case PMAPPROC_UNSET: | |
127 | case PMAPPROC_GETPORT: | |
128 | case PMAPPROC_CALLIT: | |
129 | x = ntohl(rp->rm_call.cb_prog); | |
130 | if (!nflag) | |
131 | printf(" %s", progstr(x)); | |
132 | else | |
133 | printf(" %u", x); | |
134 | printf(".%u", (u_int32_t)ntohl(rp->rm_call.cb_vers)); | |
135 | break; | |
136 | } | |
137 | } | |
138 | ||
139 | static char * | |
140 | progstr(prog) | |
141 | u_int32_t prog; | |
142 | { | |
143 | register struct rpcent *rp; | |
144 | static char buf[32]; | |
145 | static lastprog = 0; | |
146 | ||
147 | if (lastprog != 0 && prog == lastprog) | |
148 | return (buf); | |
149 | rp = getrpcbynumber(prog); | |
150 | if (rp == NULL) | |
151 | (void) sprintf(buf, "#%u", prog); | |
152 | else | |
153 | strcpy(buf, rp->r_name); | |
154 | return (buf); | |
155 | } |