aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-afs.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-afs.c')
-rw-r--r--epan/dissectors/packet-afs.c141
1 files changed, 127 insertions, 14 deletions
diff --git a/epan/dissectors/packet-afs.c b/epan/dissectors/packet-afs.c
index 05e23d6cbb..c7fc16bd46 100644
--- a/epan/dissectors/packet-afs.c
+++ b/epan/dissectors/packet-afs.c
@@ -36,9 +36,10 @@
#endif
#include <stdio.h>
-
#include <string.h>
+
#include <glib.h>
+
#include <epan/packet.h>
#include <epan/conversation.h>
#include <epan/addr_resolv.h>
@@ -46,7 +47,119 @@
#include <epan/strutil.h>
#include "packet-rx.h"
-#include "packet-afs.h"
+
+#define AFS_PORT_FS 7000
+#define AFS_PORT_CB 7001
+#define AFS_PORT_PROT 7002
+#define AFS_PORT_VLDB 7003
+#define AFS_PORT_KAUTH 7004
+#define AFS_PORT_VOL 7005
+#define AFS_PORT_ERROR 7006 /* Doesn't seem to be used */
+#define AFS_PORT_BOS 7007
+#define AFS_PORT_UPDATE 7008
+#define AFS_PORT_RMTSYS 7009
+#define AFS_PORT_BACKUP 7021
+
+#ifndef AFSNAMEMAX
+#define AFSNAMEMAX 256
+#endif
+
+#ifndef AFSOPAQUEMAX
+#define AFSOPAQUEMAX 1024
+#endif
+
+#define PRNAMEMAX 64
+#define VLNAMEMAX 65
+#define KANAMEMAX 64
+#define BOSNAMEMAX 256
+
+#define PRSFS_READ 1 /* Read files */
+#define PRSFS_WRITE 2 /* Write files */
+#define PRSFS_INSERT 4 /* Insert files into a directory */
+#define PRSFS_LOOKUP 8 /* Lookup files into a directory */
+#define PRSFS_DELETE 16 /* Delete files */
+#define PRSFS_LOCK 32 /* Lock files */
+#define PRSFS_ADMINISTER 64 /* Change ACL's */
+
+#define CB_TYPE_EXCLUSIVE 1
+#define CB_TYPE_SHARED 2
+#define CB_TYPE_DROPPED 3
+
+#define OPCODE_LOW 0
+#define OPCODE_HIGH 66000 /* arbitrary, is just a fuzzy check for encrypted traffic */
+#define VOTE_LOW 10000
+#define VOTE_HIGH 10007
+#define DISK_LOW 20000
+#define DISK_HIGH 20013
+
+#define FILE_TYPE_FILE 1
+#define FILE_TYPE_DIR 2
+#define FILE_TYPE_LINK 3
+
+struct afs_header {
+ guint32 opcode;
+};
+
+struct afs_volsync {
+ guint32 spare1;
+ guint32 spare2;
+ guint32 spare3;
+ guint32 spare4;
+ guint32 spare5;
+ guint32 spare6;
+};
+
+struct afs_status {
+ guint32 InterfaceVersion;
+ guint32 FileType;
+ guint32 LinkCount;
+ guint32 Length;
+ guint32 DataVersion;
+ guint32 Author;
+ guint32 Owner;
+ guint32 CallerAccess;
+ guint32 AnonymousAccess;
+ guint32 UnixModeBits;
+ guint32 ParentVnode;
+ guint32 ParentUnique;
+ guint32 SegSize;
+ guint32 ClientModTime;
+ guint32 ServerModTime;
+ guint32 Group;
+ guint32 SyncCount;
+ guint32 spare1;
+ guint32 spare2;
+ guint32 spare3;
+ guint32 spare4;
+};
+
+struct afs_volumeinfo {
+ guint32 Vid;
+ guint32 Type;
+ guint32 Type0;
+ guint32 Type1;
+ guint32 Type2;
+ guint32 Type3;
+ guint32 Type4;
+ guint32 ServerCount;
+ guint32 Server0;
+ guint32 Server1;
+ guint32 Server2;
+ guint32 Server3;
+ guint32 Server4;
+ guint32 Server5;
+ guint32 Server6;
+ guint32 Server7;
+ guint16 Part0;
+ guint16 Part1;
+ guint16 Part2;
+ guint16 Part3;
+ guint16 Part4;
+ guint16 Part5;
+ guint16 Part6;
+ guint16 Part7;
+};
+
static int proto_afs = -1;
static int hf_afs_fs = -1;
@@ -418,7 +531,7 @@ static gint ett_afs_vldb_flags = -1;
i_orxs = tvb_get_ntohl(tvb, offset); \
len_orxs = ((i_orxs+4-1)/4)*4 + 4; \
proto_tree_add_item(tree, field, tvb, offset-4, len_orxs, \
- ENC_ASCII|ENC_BIG_ENDIAN); \
+ ENC_ASCII|ENC_NA); \
offset += len_orxs; \
}
@@ -1314,15 +1427,15 @@ static const value_string volume_types[] = {
};
struct afs_request_key {
- guint32 conversation, epoch, cid, callnumber;
- guint16 service;
+ guint32 conversation, epoch, cid, callnumber;
+ guint16 service;
};
struct afs_request_val {
- guint32 opcode;
- guint req_num;
- guint rep_num;
- nstime_t req_time;
+ guint32 opcode;
+ guint req_num;
+ guint rep_num;
+ nstime_t req_time;
};
static GHashTable *afs_request_hash = NULL;
@@ -1471,10 +1584,10 @@ dissect_afs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
opcode = 0;
if(!pinfo->fd->flags.visited){
if ( !request_val && !reply) {
- new_request_key = se_alloc(sizeof(struct afs_request_key));
+ new_request_key = se_new(struct afs_request_key);
*new_request_key = request_key;
- request_val = se_alloc(sizeof(struct afs_request_val));
+ request_val = se_new(struct afs_request_val);
request_val -> opcode = tvb_get_ntohl(tvb, offset);
request_val -> req_num = pinfo->fd->num;
request_val -> rep_num = 0;
@@ -1905,7 +2018,7 @@ dissect_fs_request(tvbuff_t *tvb, struct rxinfo *rxinfo, proto_tree *tree, int o
break;
case 134: /* Store ACL */
OUT_FS_AFSFid("Target");
- offset = dissect_acl(tvb, rxinfo, tree, offset);
+ /* offset = */ dissect_acl(tvb, rxinfo, tree, offset);
break;
case 135: /* Store Status */
OUT_FS_AFSFid("Target");
@@ -2963,9 +3076,9 @@ dissect_backup_reply(tvbuff_t *tvb, struct rxinfo *rxinfo, proto_tree *tree, int
}
static void
-dissect_backup_request(tvbuff_t *tvb _U_, struct rxinfo *rxinfo _U_, proto_tree *tree _U_, int offset, int opcode)
+dissect_backup_request(tvbuff_t *tvb _U_, struct rxinfo *rxinfo _U_, proto_tree *tree _U_, int offset _U_, int opcode)
{
- offset += 4; /* skip the opcode */
+ /* offset += 4; */ /* skip the opcode */
switch ( opcode )
{