+ cnid_t (*cnid_add) (struct _cnid_db *cdb, const struct stat *st, cnid_t did,
+ const char *name, size_t, cnid_t hint);
+ int (*cnid_delete) (struct _cnid_db *cdb, cnid_t id);
+ cnid_t (*cnid_get) (struct _cnid_db *cdb, cnid_t did, const char *name, size_t);
+ cnid_t (*cnid_lookup) (struct _cnid_db *cdb, const struct stat *st, cnid_t did,
+ const char *name, size_t);
+ cnid_t (*cnid_nextid) (struct _cnid_db *cdb);
+ char * (*cnid_resolve) (struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
+ int (*cnid_update) (struct _cnid_db *cdb, cnid_t id, const struct stat *st,
+ cnid_t did, const char *name, size_t len);
+ void (*cnid_close) (struct _cnid_db *cdb);
+ int (*cnid_getstamp) (struct _cnid_db *cdb, void *buffer, const size_t len);
+ cnid_t (*cnid_rebuild_add) (struct _cnid_db *, const struct stat *, cnid_t,
+ const char *, size_t, cnid_t);
+ int (*cnid_find) (struct _cnid_db *cdb, const char *name, size_t namelen,
+ void *buffer, size_t buflen);
+ int (*cnid_wipe) (struct _cnid_db *cdb);
+};
+typedef struct _cnid_db cnid_db;
+
+/*
+ * Consolidation of args passedn from main cnid_open to modules cnid_XXX_open, so
+ * that it's easier to add aditional args as required.
+ */
+struct cnid_open_args {
+ const char *dir;
+ mode_t mask;
+ uint32_t flags;
+
+ /* for dbd */
+ const char *cnidserver;
+ const char *cnidport;
+
+ /* for MySQL */
+ const void *obj;
+ char *voluuid;
+};
+
+/*
+ * CNID module - represents particular CNID implementation
+ */
+struct _cnid_module {
+ char *name;
+ struct list_head db_list; /* CNID modules are also stored on a bidirectional list. */
+ struct _cnid_db *(*cnid_open)(struct cnid_open_args *args);
+ uint32_t flags; /* Flags describing some CNID backend aspects. */