aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-nfs.h
blob: e5ec81800158d1a69713295a15221592f9da31f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/* packet-nfs.h (c) 1999 Uwe Girlich */
/* $Id$
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#ifndef __PACKET_NFS_H__
#define __PACKET_NFS_H__

#include "packet-rpc.h"

#define NFS_PROGRAM 100003

#define FHSIZE 32

/* verifier */
#define NFS3_COOKIEVERFSIZE 8
#define NFS3_CREATEVERFSIZE 8
#define NFS3_WRITEVERFSIZE 8

/* for ftype3 */
#define NF3REG  1
#define NF3DIR  2
#define NF3BLK  3
#define NF3CHR  4
#define NF3LNK  5
#define NF3SOCK 6
#define NF3FIFO 7

/*
 * NFSv4 error codes used in code, as opposed to UI
 */
#define NFS4_OK 0
#define NFS4ERR_DENIED 10010
#define NFS4ERR_CLID_INUSE 10017

/*
 * NFSv4 file types
 */
#define NF4REG			1
#define NF4DIR			2
#define NF4BLK			3
#define NF4CHR			4
#define NF4LNK			5
#define NF4SOCK		6
#define NF4FIFO		7
#define NF4ATTRDIR	8
#define NF4NAMEDATTR	9

/*
 * Since NFSv4 "operations" are handled differently than previous NFS
 * versions, these tokens are necessary.
 */
#define NFS4_OP_ACCESS						3
#define NFS4_OP_CLOSE						4
#define NFS4_OP_COMMIT						5
#define NFS4_OP_CREATE						6
#define NFS4_OP_DELEGPURGE					7
#define NFS4_OP_DELEGRETURN				8
#define NFS4_OP_GETATTR						9
#define NFS4_OP_GETFH						10
#define NFS4_OP_LINK							11
#define NFS4_OP_LOCK							12
#define NFS4_OP_LOCKT						13
#define NFS4_OP_LOCKU						14
#define NFS4_OP_LOOKUP						15
#define NFS4_OP_LOOKUPP						16
#define NFS4_OP_NVERIFY						17
#define NFS4_OP_OPEN							18
#define NFS4_OP_OPENATTR					19
#define NFS4_OP_OPEN_CONFIRM				20
#define NFS4_OP_OPEN_DOWNGRADE			21
#define NFS4_OP_PUTFH						22
#define NFS4_OP_PUTPUBFH					23
#define NFS4_OP_PUTROOTFH					24
#define NFS4_OP_READ							25
#define NFS4_OP_READDIR						26
#define NFS4_OP_READLINK					27
#define NFS4_OP_REMOVE						28
#define NFS4_OP_RENAME						29
#define NFS4_OP_RENEW						30
#define NFS4_OP_RESTOREFH					31
#define NFS4_OP_SAVEFH						32
#define NFS4_OP_SECINFO						33
#define NFS4_OP_SETATTR						34
#define NFS4_OP_SETCLIENTID				35
#define NFS4_OP_SETCLIENTID_CONFIRM		36
#define NFS4_OP_VERIFY						37
#define NFS4_OP_WRITE						38
#define NFS4_OP_RELEASE_LOCKOWNER		39
/* Minor version 1 */
#define NFS4_OP_BACKCHANNEL_CTL       40
#define NFS4_OP_BIND_CONN_TO_SESSION  41
#define NFS4_OP_EXCHANGE_ID       42
#define NFS4_OP_CREATE_SESSION    43
#define NFS4_OP_DESTROY_SESSION   44
#define NFS4_OP_FREE_STATEID          45
#define NFS4_OP_GET_DIR_DELEGATION    46
#define NFS4_OP_GETDEVINFO        47
#define NFS4_OP_GETDEVLIST		  48
#define NFS4_OP_LAYOUTCOMMIT         49
#define NFS4_OP_LAYOUTGET	    	 50
#define NFS4_OP_LAYOUTRETURN		 51
#define NFS4_OP_SECINFO_NO_NAME       52
#define NFS4_OP_SEQUENCE             53
#define NFS4_OP_SET_SSV               54
#define NFS4_OP_TEST_STATEID          55
#define NFS4_OP_WANT_DELEGATION       56
#define NFS4_OP_DESTROY_CLIENTID      57
#define NFS4_OP_RECLAIM_COMPLETE      58

#define NFS4_OP_ILLEGAL						10044

/*
 * NFSv41 callback ops
 */
#define NFS4_OP_CB_GETATTR						3
#define NFS4_OP_CB_RECALL						4
#define NFS4_OP_CB_LAYOUTRECALL						5
#define NFS4_OP_CB_NOTIFY						6
#define NFS4_OP_CB_PUSH_DELEG						7
#define NFS4_OP_CB_RECALL_ANY						8
#define NFS4_OP_CB_RECALLABLE_OBJ_AVAIL					9
#define NFS4_OP_CB_RECALL_SLOT						10
#define NFS4_OP_CB_SEQUENCE						11
#define NFS4_OP_CB_WANTS_CANCELLED					12
#define NFS4_OP_CB_NOTIFY_LOCK						13
#define NFS4_OP_CB_NOTIFY_DEVICEID					14
#define NFS4_OP_CB_ILLEGAL						10044

/* for write */
#define UNSTABLE 0
#define DATA_SYNC 1
#define FILE_SYNC 2

/* for create */
#define UNCHECKED 0
#define GUARDED 1
#define EXCLUSIVE 2

/* for create4 */
#define UNCHECKED4 0
#define GUARDED4 1
#define EXCLUSIVE4 2
#define EXCLUSIVE4_1 3

/* pNFS layout types */
#define LAYOUT4_NFSV4_1_FILES  1
#define LAYOUT4_OSD2_OBJECTS   2
#define LAYOUT4_BLOCK_VOLUME   3

extern gboolean nfs_file_name_snooping;

extern int dissect_fhandle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
    const char *name, guint32 *hash);
extern int dissect_nfs_fh3(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree,
    const char *name, guint32 *hash);

int dissect_nfs_post_op_attr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, 
		const char* name);

void nfs_name_snoop_add_name(int xid, tvbuff_t *tvb, int name_offset, int name_len, int parent_offset, int parent_len, char *name);


extern gboolean nfs_fhandle_reqrep_matching;
typedef struct nfs_fhandle_data {
	int len;
	const unsigned char *fh;
	tvbuff_t *tvb;
} nfs_fhandle_data_t;
void dissect_fhandle_hidden(packet_info *pinfo, proto_tree *tree, int frame);

typedef int (diss_p)(tvbuff_t *tvb, int offset, proto_tree *tree, int hf);

/* Used in packet-nfsacl.c for NFS_ACL dissection */
extern int dissect_fattr(tvbuff_t *tvb, int offset, proto_tree *tree, 
	const char* name);

extern int dissect_access(tvbuff_t *tvb, int offset, proto_tree *tree,
	const char* name);

extern gint default_nfs_fhandle_type;
extern gint hf_nfs_nfsstat;

#endif /* packet-nfs.h */