diff options
Diffstat (limited to 'epan/dissectors/packet-afs.c')
-rw-r--r-- | epan/dissectors/packet-afs.c | 141 |
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 ) { |