PERFORCE change 122029 for review
Fredrik Lindberg
fli at FreeBSD.org
Wed Jun 20 11:39:20 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=122029
Change 122029 by fli at fli_genesis on 2007/06/20 11:38:49
- Add/change record database structures
- Add record database prototypes
- Add configuration prototypes
- Removed a (now) unused member of struct cache {}
Affected files ...
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdnsd.h#3 edit
Differences ...
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdnsd.h#3 (text+ko) ====
@@ -37,6 +37,7 @@
#include "event.h"
#include "mdns.h"
#include "record.h"
+#include "var.h"
#include "debug.h"
#ifdef HAVE_PTHREAD
@@ -90,10 +91,21 @@
*/
struct cache {
struct records c_recs;
- int c_timer;
TAILQ_HEAD(, cache_res) c_list; /* time delta list */
};
+/*
+ * Database record set
+ */
+struct dbr_rec;
+struct dbr {
+ MAGIC(dbr_magic);
+ void *dbr_ctx;
+ TAILQ_HEAD(, dbr_rec) dbr_reclist;
+ struct records dbr_recs;
+ struct vars dbr_vars;
+};
+
/* Event identifier */
struct md_if_ev {
TAILQ_ENTRY(md_if_ev) ifev_next;
@@ -116,46 +128,92 @@
#define MIF_DYING 0x0001 /* Interface is going away */
#define MIF_LINKUP 0x0002 /* Link is up (carrier) */
#define MIF_LINKCHG 0x0004 /* Link state change pending */
+#define MIF_UDP4 0x0008
+#define MIF_TCP4 0x0010
+#define MIF_UDP6 0x0020
+#define MIF_TCP6 0x0040
TAILQ_HEAD(, md_if_ev) mif_evlist; /* Events on this iface */
int mif_tmr;
struct mdns mif_handle; /* low-level mdns stack handle */
struct cache mif_cache;
+ struct dbr mif_dbr;
char mif_ifnam[IFNAMSIZ];
};
/*
- * Self-claimed record state
+ * Database record resource name
*/
+struct dbr_rec {
+ struct record dr_rec;
+ MAGIC(dr_magic);
+ struct dbr *dr_dbr;
+ int dr_type;
+ int dr_state;
+ wchar_t **dr_names; /* unexpanded source strings */
+ int dr_cur; /* current alternative */
+ int dr_flags;
+#define DR_CLONE 0x01 /* record is a clone */
+ size_t dr_clones; /* number of clones */
+ union {
+ TAILQ_HEAD(recclone_head, dbr_rec) head;
+ TAILQ_ENTRY(dbr_rec) next;
+ } dr_clone;
+ struct dbr_rec *dr_chead; /* clone head */
+};
+
enum {
- DBRES_PROBING, /* Probing for uniqness */
- DBRES_ANNOUNCING, /* Annonucing a uniq name */
- DBRES_OK, /* Record is OK */
- DBRES_CONFLICT, /* Conflict with other peer */
- DBRES_UNKNOWN, /* Unknown state */
- DBRES_INVALID /* Has invalid rdata */
+ DR_UNIQUE,
+ DR_SHARED
};
-struct db_res {
- struct record_res ds_res;
- uint32_t ds_ttl;
- int ds_state;
-#define DBRES_SHARED 0x0001
-#define DBRES_UNIQUE 0x0002
- int ds_flags;
- /* vartag rdata */
+/*
+ * Record state to unique self-slaimed records
+ * We always claim name uniquness on the record level
+ */
+enum {
+ DR_TENTATIVE, /* Probe step not done */
+ DR_INVALID, /* Invalid name */
+ DR_PROBING, /* Probing for uniqness */
+ DR_ANNOUNCING, /* Annonucing a uniqe name */
+ DR_OK, /* Record is OK */
+ DR_CONFLICT, /* Conflict with other peer */
};
-struct db_rec {
- struct record dc_rec;
- /* vartag name */
+/*
+ * Database record type
+ */
+struct dbr_type {
+ struct record_type dt_type;
+ MAGIC(dt_magic);
+ struct dbr_rec *dt_rec;
+ int dt_state;
+#define DT_SHARED 0x01
+#define DT_UNIQUE 0x02
+ int dt_flags;
};
-struct db {
- struct records db_recs;
+/*
+ * Database record resource data
+ */
+struct dbr_res {
+ struct record_res ds_res;
+ MAGIC(ds_magic);
+ struct dbr_type *ds_type;
+ uint32_t ds_ttl; /* resource ttl */
+ wchar_t *ds_vdata; /* unexpanded source string */
+ wchar_t *ds_data; /* expanded source string */
+#define DS_CLONE 0x01 /* resource is a clone */
+#define DS_INVALID 0x02 /* unable to expand vdata */
+ int ds_flags;
+ size_t ds_clones; /* number of clones */
+ union {
+ TAILQ_HEAD(clone_head, dbr_res) head;
+ TAILQ_ENTRY(dbr_res) next;
+ } ds_clone;
+ struct dbr_res *ds_chead; /* clone head */
};
-
/* cache.c */
void cache_init(struct cache *);
void cache_destroy(struct cache *);
@@ -167,4 +225,15 @@
void cache_clean(struct cache *);
void cache_set_ttl(struct cache *, struct record_res *, uint32_t);
+/* dbrec.c */
+void dbr_init(struct dbr *, void *);
+void dbr_destroy(struct dbr *);
+struct dbr_rec * dbr_add(struct dbr *, wchar_t **, int);
+void dbr_del(struct dbr_rec *);
+struct dbr_res * dbr_res_add(struct dbr_rec *, uint16_t, uint32_t, wchar_t *);
+void dbr_res_del(struct dbr_res *);
+
+/* parse.y */
+int cfg_read(struct dbr *r, const char *, const char *);
+
#endif /* _MDNSD_H_ */
More information about the p4-projects
mailing list