• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/ap/gpl/timemachine/netatalk-2.2.5/include/atalk/
1/*
2 * Copyright (c) 2003 the Netatalk Team
3 * Copyright (c) 2003 Rafal Lewczuk <rlewczuk@pronet.pl>
4 * Copyright (c) 2010 Frank Lahm
5 *
6 * This program is free software; you can redistribute and/or modify
7 * it under the terms of the GNU General Public License as published
8 * by the Free Software Foundation version 2 of the License or later
9 * version if explicitly stated by any of above copyright holders.
10 *
11 */
12
13/*
14 * This file contains all generic CNID related stuff
15 * declarations. Included:
16 * - CNID factory, which retrieves (eventually instantiates)
17 *   CNID objects on demand
18 * - selection of CNID backends (default, detected by volume)
19 * - full set of CNID operations needed by server core.
20 */
21
22#ifndef _ATALK_CNID__H
23#define _ATALK_CNID__H 1
24
25#include <atalk/adouble.h>
26#include <atalk/list.h>
27
28/* CNID object flags */
29#define CNID_FLAG_PERSISTENT   0x01      /* This backend implements DID persistence */
30#define CNID_FLAG_MANGLING     0x02      /* This backend has name mangling feature. */
31#define CNID_FLAG_SETUID       0x04      /* Set db owner to parent folder owner. */
32#define CNID_FLAG_BLOCK        0x08      /* block signals in update. */
33#define CNID_FLAG_NODEV        0x10      /* don't use device number only inode */
34#define CNID_FLAG_LAZY_INIT    0x20      /* */
35#define CNID_FLAG_MEMORY       0x40  /* this is a memory only db */
36#define CNID_FLAG_INODE        0x80  /* in cnid_add the inode is authoritative */
37
38#define CNID_INVALID   0
39/* first valid ID */
40#define CNID_START     17
41
42#define CNID_ERR_PARAM 0x80000001
43#define CNID_ERR_PATH  0x80000002
44#define CNID_ERR_DB    0x80000003
45#define CNID_ERR_CLOSE 0x80000004   /* the db was not open */
46#define CNID_ERR_MAX   0x80000005
47
48/*
49 * This is instance of CNID database object.
50 */
51struct _cnid_db {
52    u_int32_t flags;             /* Flags describing some CNID backend aspects. */
53    char *volpath;               /* Volume path this particular CNID db refers to. */
54    void *_private;              /* back-end speficic data */
55
56    cnid_t (*cnid_add)         (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
57                                char *name, const size_t, cnid_t hint);
58    int    (*cnid_delete)      (struct _cnid_db *cdb, cnid_t id);
59    cnid_t (*cnid_get)         (struct _cnid_db *cdb, const cnid_t did, char *name, const  size_t);
60    cnid_t (*cnid_lookup)      (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
61                                char *name, const size_t);
62    cnid_t (*cnid_nextid)      (struct _cnid_db *cdb);
63    char * (*cnid_resolve)     (struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
64    int    (*cnid_update)      (struct _cnid_db *cdb, const cnid_t id, const struct stat *st,
65                                const cnid_t did, char *name, const size_t len);
66    void   (*cnid_close)       (struct _cnid_db *cdb);
67    int    (*cnid_getstamp)    (struct _cnid_db *cdb, void *buffer, const size_t len);
68    cnid_t (*cnid_rebuild_add) (struct _cnid_db *, const struct stat *, const cnid_t,
69                                char *, const size_t, cnid_t);
70    int    (*cnid_find)        (struct _cnid_db *cdb, char *name, size_t namelen,
71                                void *buffer, size_t buflen);
72};
73typedef struct _cnid_db cnid_db;
74
75/*
76 * Consolidation of args passedn from main cnid_open to modules cnid_XXX_open, so
77 * that it's easier to add aditional args as required.
78 */
79struct cnid_open_args {
80    const char *dir;
81    mode_t mask;
82    uint32_t flags;
83    const char *cnidserver;      /* for dbd */
84    const char *cnidport;        /* for dbd */
85};
86
87/*
88 * CNID module - represents particular CNID implementation
89 */
90struct _cnid_module {
91    char *name;
92    struct list_head db_list;   /* CNID modules are also stored on a bidirectional list. */
93    struct _cnid_db *(*cnid_open)(struct cnid_open_args *args);
94    u_int32_t flags;            /* Flags describing some CNID backend aspects. */
95
96};
97typedef struct _cnid_module cnid_module;
98
99/* Inititalize the CNID backends */
100void cnid_init();
101
102/* Registers new CNID backend module */
103void cnid_register(struct _cnid_module *module);
104
105/* This function opens a CNID database for selected volume. */
106struct _cnid_db *cnid_open(const char *volpath,
107                           mode_t mask,
108                           char *type,
109                           int flags,
110                           const char *cnidsrv,
111                           const char *cnidport);
112cnid_t cnid_add        (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
113                        const char *name, const size_t len, cnid_t hint);
114int    cnid_delete     (struct _cnid_db *cdb, cnid_t id);
115cnid_t cnid_get        (struct _cnid_db *cdb, const cnid_t did, char *name,const size_t len);
116int    cnid_getstamp   (struct _cnid_db *cdb, void *buffer, const size_t len);
117cnid_t cnid_lookup     (struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
118                        char *name, const size_t len);
119char  *cnid_resolve    (struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
120int    cnid_update     (struct _cnid_db *cdb, const cnid_t id, const struct stat *st,
121                        const cnid_t did, char *name, const size_t len);
122cnid_t cnid_rebuild_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
123                        char *name, const size_t len, cnid_t hint);
124int    cnid_find       (struct _cnid_db *cdb, const char *name, size_t namelen,
125                        void *buffer, size_t buflen);
126void   cnid_close      (struct _cnid_db *db);
127
128#endif
129