From owner-p4-projects@FreeBSD.ORG Wed Jun 20 11:39:20 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 357BC16A4DE; Wed, 20 Jun 2007 11:39:20 +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 BE75816A469 for ; Wed, 20 Jun 2007 11:39:19 +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 AECD513C468 for ; Wed, 20 Jun 2007 11:39:19 +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 l5KBdJ1Z053069 for ; Wed, 20 Jun 2007 11:39:19 GMT (envelope-from fli@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l5KBdJkK053060 for perforce@freebsd.org; Wed, 20 Jun 2007 11:39:19 GMT (envelope-from fli@FreeBSD.org) Date: Wed, 20 Jun 2007 11:39:19 GMT Message-Id: <200706201139.l5KBdJkK053060@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 122029 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: Wed, 20 Jun 2007 11:39:20 -0000 http://perforce.freebsd.org/chv.cgi?CH=122029 Change 122029 by fli@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_ */