]> arthur.barton.de Git - netatalk.git/blob - include/atalk/cnid_private.h
f5f825faa362f806e124cf3e0e32280166756a9c
[netatalk.git] / include / atalk / cnid_private.h
1 /*
2  *  Common defines for cnid
3  */
4
5 #ifndef _ATALK_CNID_PRIVATE_H
6 #define _ATALK_CNID_PRIVATE_H 1
7
8 #define CNID_DB_MAGIC   0x434E4944U  /* CNID */
9 #define CNID_DATA_MAGIC 0x434E4945U  /* CNIE */
10
11 #define CNID_OFS                 0
12 #define CNID_LEN                 4
13  
14 #define CNID_DEV_OFS             CNID_LEN
15 #define CNID_DEV_LEN             8
16  
17 #define CNID_INO_OFS             (CNID_DEV_OFS + CNID_DEV_LEN)
18 #define CNID_INO_LEN             8
19  
20 #define CNID_DEVINO_OFS          CNID_LEN
21 #define CNID_DEVINO_LEN          (CNID_DEV_LEN + CNID_INO_LEN)
22  
23 #define CNID_TYPE_OFS            (CNID_DEVINO_OFS + CNID_DEVINO_LEN)
24 #define CNID_TYPE_LEN            4
25  
26 #define CNID_DID_OFS             (CNID_TYPE_OFS + CNID_TYPE_LEN)
27 #define CNID_DID_LEN             CNID_LEN
28  
29 #define CNID_NAME_OFS            (CNID_DID_OFS + CNID_DID_LEN)
30 #define CNID_HEADER_LEN          (CNID_NAME_OFS)
31
32 #define CNIDFLAG_ROOTINFO_RO     (1 << 0)
33 #define CNIDFLAG_DB_RO           (1 << 1)
34
35 /* special key/data pair we use to store current cnid and database stamp in cnid2.db */
36
37 #define ROOTINFO_KEY    "\0\0\0\0"
38 #define ROOTINFO_KEYLEN 4
39
40 /* 
41    Rootinfo data, fields as they are used by normal entries for CNIDs (for reference):
42    4 bytes: CNID 
43    8 bytes: dev
44    8 bytes: inode
45    4 bytes: is a file/directory (type)
46    4 bytes: DID
47    x bytes: name
48
49    Contents in Rootinfo entry:
50    4 bytes: 0
51    8 bytes: db stamp: struct stat.st_ctime of database file
52    8 bytes: unused
53    4 bytes: last used CNID
54    4 bytes: version as htonl(uint32_t)
55    9 bytes: name "RootInfo"
56 */
57 #define ROOTINFO_DATA    "\0\0\0\0" \
58                          "\0\0\0\0\0\0\0\0" \
59                          "\0\0\0\0\0\0\0\0" \
60                          "\0\0\0\0" \
61                          "\0\0\0\0" \
62                          "RootInfo"
63 #define ROOTINFO_DATALEN (3*4 + 2*8 + 9)
64
65 /* 
66  * CNID version history:
67  * 0: up to Netatalk 2.1.x
68  * 1: starting with 2.2, additional name index, used in cnid_find
69  */
70 #define CNID_VERSION_0               0
71 #define CNID_VERSION_1               1
72 #define CNID_VERSION_UNINTIALIZED_DB UINT32_MAX
73
74 /* Current CNID version */
75 #define CNID_VERSION CNID_VERSION_1
76
77 #endif