PERFORCE change 125246 for review

Fredrik Lindberg fli at FreeBSD.org
Thu Aug 16 16:26:44 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=125246

Change 125246 by fli at fli_nexus on 2007/08/16 23:26:19

	- Add mdns_cache_flush() - flushes the cache
	- Add mdns_cache_view() - view cache content

Affected files ...

.. //depot/projects/soc2007/fli-mdns_sd/libmdns/libmdns.c#3 edit
.. //depot/projects/soc2007/fli-mdns_sd/libmdns/mdns.h#3 edit

Differences ...

==== //depot/projects/soc2007/fli-mdns_sd/libmdns/libmdns.c#3 (text+ko) ====

@@ -707,6 +707,94 @@
 	return (0);
 }
 
+int
+mdns_cache_flush(struct mdns *m, unsigned int ifidx)
+{
+	int mid, error;
+	struct mdns_msg *mm;
+	struct mipc_cache_flush mcf;
+
+	mcf.mcf_ifidx = ifidx;
+
+	mid = docmd(m, MIM_CACHE_FLUSH, 1, &mcf,
+	    sizeof(struct mipc_cache_flush));
+	if (mid < 0)
+		return (-1);
+
+	mm = msg_wait(m, mid, NULL);
+	if (mm == NULL)
+		return (-1);
+
+	error = errormsg(mm);
+	msg_free(mm);
+	if (error >= 0)
+		return (-1);
+	return (0);
+}
+
+int
+mdns_cache_list(struct mdns *m, unsigned int ifidx, struct mdns_cache **mc)
+{
+	int mid, offset, error, validres;
+	char *pkg;
+	size_t sz;
+	struct mdns_msg *mm;
+	struct mdns_cache *mcp;
+	struct mipc_cache *mic;
+	struct mipc_cache_list mcl;
+
+	if (ifidx == 0)
+		return (-1);
+
+	mcl.mcl_ifidx = ifidx;
+	mid = docmd(m, MIM_CACHE_LIST, 1, &mcl, sizeof(struct mipc_cache_list));
+	if (mid < 0)
+		return (-1);
+
+	sz = 0;
+	offset = 0;
+	mcp = NULL;
+	validres = 1;
+	do {
+		mm = msg_wait(m, mid, NULL);
+
+		if (mm->mm_msgtype == MIM_CACHE) {
+			mic = (struct mipc_cache *)mm->mm_buf;
+			pkg = mm->mm_buf + sizeof(struct mipc_cache);
+
+			mcp = realloc(mcp,
+			    (offset + 1) * sizeof(struct mdns_cache));
+			mcp[offset].mc_rrset.mr_class = mic->mc_class;
+			mcp[offset].mc_rrset.mr_type = mic->mc_type;
+			mcp[offset].mc_rrset.mr_ttl = mic->mc_ttl;
+			mcp[offset].mc_rrset.mr_reslen = mic->mc_reslen;
+			mcp[offset].mc_rrset.mr_ifidx = ifidx;
+			mcp[offset].mc_rrset.mr_family = AF_UNSPEC;
+			mcp[offset].mc_ttl_left = mic->mc_ttl_left;
+
+			memcpy(mcp[offset].mc_rrset.mr_name, pkg,
+			    mic->mc_reclen * sizeof(wchar_t));
+			mcp[offset].mc_rrset.mr_name[mic->mc_reclen] = L'\0';
+
+			pkg += (mic->mc_reclen * sizeof(wchar_t));
+
+			mcp[offset].mc_rrset.mr_res = malloc(mic->mc_reslen);
+			memcpy(mcp[offset].mc_rrset.mr_res, pkg,
+			    mic->mc_reslen);
+
+			offset++;
+		}
+		else if (mm->mm_msgtype == MIM_ACK)
+			validres = 0;
+		else if ((error = errormsg(mm)) >= 0)
+			validres = 0;
+		msg_free(mm);
+	} while (validres);
+
+	*mc = mcp;
+	return (offset);
+}
+
 static int
 errormsg(struct mdns_msg *mm)
 {

==== //depot/projects/soc2007/fli-mdns_sd/libmdns/mdns.h#3 (text+ko) ====

@@ -86,6 +86,17 @@
 #define MDNS_RES_DEFAULT (0)	/* Default resource type */
 #define MDNS_RES_POINTER (-1)	/* Resource is a resource set pointer */
 
+/* Cache entry */
+struct mdns_cache {
+	uint32_t		mc_ttl_left;
+	struct mdns_rrset	mc_rrset;
+};
+
+int		mdns_cache_list(struct mdns *, unsigned int,
+    struct mdns_cache **);
+/* Request to flush cache */
+int		mdns_cache_flush(struct mdns *, unsigned int);
+
 /* Array to class (integer) translation */
 int		mdns_atoc(const char *);
 /* Class (integer) to array translation */


More information about the p4-projects mailing list