PERFORCE change 120774 for review
Fredrik Lindberg
fli at FreeBSD.org
Sat Jun 2 12:26:31 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=120774
Change 120774 by fli at fli_genesis on 2007/06/02 12:25:30
- Add a mDNS record cache (record database consumer).
- Add structures related to self-claimed records (not complete).
- Add some interface specific flags,
MIF_DYING Interface was lost, waiting for resources to free.
MIF_LINKCHG Link up/down switch in progress.
- Add a list of per-interface active events.
Affected files ...
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/cache.c#1 add
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdnsd.h#2 edit
Differences ...
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdnsd.h#2 (text+ko) ====
@@ -31,10 +31,13 @@
#ifdef HAVE_PTHREAD
#include <pthread.h>
#endif
+#include <time.h>
#include "wqueue.h"
#include "event.h"
#include "mdns.h"
+#include "record.h"
+#include "debug.h"
#ifdef HAVE_PTHREAD
#define RW_RLOCK(g,f) pthread_rwlock_rdlock(&(g)->f)
@@ -71,18 +74,97 @@
};
/*
+ * Cache resouce record
+ */
+struct cache_res {
+ MAGIC(cr_magic);
+ struct record_res cr_res;
+ TAILQ_ENTRY(cache_res) cr_next;
+ uint32_t cr_ttl_rel;
+ uint32_t cr_ttl_abs;
+ time_t cr_ctime;
+};
+
+/*
+ * Cache record set
+ */
+struct cache {
+ struct records c_recs;
+ int c_timer;
+ TAILQ_HEAD(, cache_res) c_list; /* time delta list */
+};
+
+/* Event identifier */
+struct md_if_ev {
+ TAILQ_ENTRY(md_if_ev) ifev_next;
+ int ifev_id;
+};
+
+/*
* Interface state information
*/
struct md_if {
+ MAGIC(mif_magic);
TAILQ_ENTRY(md_if) mif_next;
#ifdef HAVE_PTHREAD
pthread_rwlock_t mif_lock;
#endif
struct md_glob *mif_glob; /* back pointer */
+ int mif_refcnt;
int mif_index; /* interface index */
int mif_flags;
-#define MDIF_LINKUP 0x0001
+#define MIF_DYING 0x0001 /* Interface is going away */
+#define MIF_LINKUP 0x0002 /* Link is up (carrier) */
+#define MIF_LINKCHG 0x0004 /* Link state change pending */
+ 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;
+ char mif_ifnam[IFNAMSIZ];
+};
+
+
+/*
+ * Self-claimed record state
+ */
+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 */
+};
+
+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 */
};
+struct db_rec {
+ struct record dc_rec;
+ /* vartag name */
+};
+
+struct db {
+ struct records db_recs;
+};
+
+
+/* cache.c */
+void cache_init(struct cache *);
+void cache_destroy(struct cache *);
+int cache_add(struct cache *, struct mdns_rrset *, struct record_res **);
+int cache_del(struct cache *, struct record_res *);
+struct record_res * cache_find(struct cache *, char *, uint16_t);
+struct record_res * cache_find_next(struct record_res *);
+void cache_purge(struct cache *, time_t, char *, uint16_t);
+void cache_clean(struct cache *);
+void cache_set_ttl(struct cache *, struct record_res *, uint32_t);
+
#endif /* _MDNSD_H_ */
More information about the p4-projects
mailing list