From owner-p4-projects@FreeBSD.ORG Sat Jun 2 12:26:31 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 46A8616A469; Sat, 2 Jun 2007 12:26:31 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 089BB16A41F for ; Sat, 2 Jun 2007 12:26:31 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id ED92A13C458 for ; Sat, 2 Jun 2007 12:26:30 +0000 (UTC) (envelope-from fli@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l52CQUJQ009491 for ; Sat, 2 Jun 2007 12:26:30 GMT (envelope-from fli@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l52CQUNV009482 for perforce@freebsd.org; Sat, 2 Jun 2007 12:26:30 GMT (envelope-from fli@FreeBSD.org) Date: Sat, 2 Jun 2007 12:26:30 GMT Message-Id: <200706021226.l52CQUNV009482@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to fli@FreeBSD.org using -f From: Fredrik Lindberg To: Perforce Change Reviews Cc: Subject: PERFORCE change 120774 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Jun 2007 12:26:31 -0000 http://perforce.freebsd.org/chv.cgi?CH=120774 Change 120774 by fli@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 #endif +#include #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_ */