PERFORCE change 127150 for review
Fredrik Lindberg
fli at FreeBSD.org
Wed Oct 3 14:29:36 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=127150
Change 127150 by fli at fli_nexus on 2007/10/03 21:29:26
- Add the additional section to psuedo packet.
- Add the class mdns_c_any and type mdns_t_any
- Re-arrange some structures.
- Minor whitespace and indentation fixes.
Affected files ...
.. //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdns.h#8 edit
Differences ...
==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/mdns.h#8 (text+ko) ====
@@ -76,7 +76,23 @@
*/
enum { MDNS_UDP, MDNS_TCP };
+/*
+ * Pseudo MDNS Header
+ */
+struct mdns_head {
+ uint16_t h_id; /* Query id (UC only, always 0 for MC) */
+ int h_flags;
+#define MDNS_HEAD_QUERY 0x01
+#define MDNS_HEAD_RESP 0x02
+#define MDNS_HEAD_TC 0x04
+#define MDNS_HEAD_AA 0x08
+ uint16_t h_cquestion; /* Question count */
+ uint16_t h_canswer; /* Answer count */
+ uint16_t h_cauth; /* Auth count */
+ uint16_t h_caddit; /* Additional count */
+};
+
/*
* Packet buffer
*/
@@ -100,7 +116,7 @@
char **offsets; /* Section offset pointers */
int last_offset;
TAILQ_HEAD(, mdns_pkg_res) res_head;
- } p_data[4];
+ } p_data[5];
#define p_buf(x) p_data[x].bufptr
#define p_bufseg(x) p_data[x].buf
#define p_secoff(x) p_data[x].offsets
@@ -110,7 +126,10 @@
#define p_questions 1
#define p_answers 2
#define p_auths 3
+#define p_addit 4
#define p_isrrset(x) ((x) > 1) /* 0 = qset, 1 = rrset */
+
+ struct mdns_head p_head; /* Header data */
};
/*
@@ -163,59 +182,51 @@
mdns_c_in = 1
};
-/* Length of a mdns record */
-#define MDNS_RECORD_LEN 255
+/* Special classes/types */
+#define mdns_c_any 255 /* ANY class */
+#define mdns_t_any 255 /* ANY type */
/*
- * MDNS Header
+ * Length of a mdns record, including terminating 0-length label.
+ * The effective length on wire is 253 bytes (leading/ending label).
*/
-struct mdns_head {
- uint16_t h_id; /* Query id (UC only, always 0 for MC) */
- int h_flags;
-#define MDNS_HEAD_QUERY 0x01
-#define MDNS_HEAD_RESP 0x02
-#define MDNS_HEAD_TC 0x04
-#define MDNS_HEAD_AA 0x08
- uint16_t h_cquestion; /* Question count */
- uint16_t h_canswer; /* Answer count */
- uint16_t h_cauth; /* Auth count */
- uint16_t h_caddit; /* Additional count */
-};
+#define MDNS_RECORD_LEN 255
/*
* MDNS resource set
*/
struct mdns_rrset {
- char name[MDNS_RECORD_LEN + 1]; /* rrset name */
- char *r_name;
- uint16_t r_class; /* rrset class */
- uint16_t r_type; /* Record type */
- int r_cflush; /* cache flush */
- uint32_t r_ttl; /* Time to live */
- uint16_t r_datalen; /* Length of resource data */
- char *r_data; /* Resource data */
+ char name[MDNS_RECORD_LEN + 1]; /* Private storage */
+ char *r_name; /* Record name */
+ uint16_t r_class; /* Record class */
+ uint16_t r_type; /* Record type */
+ int r_cflush; /* Cache flush? */
+ uint32_t r_ttl; /* Time to live */
+ uint16_t r_datalen; /* Length of resource data */
+ char *r_data; /* Resource data */
};
+/* Record name set macros */
#define mdns_rrset_name(rr, str) (rr)->r_name = str
#define mdns_rrset_name_dup(rr, str) \
strncpy((rr)->name, str, MDNS_RECORD_LEN); \
- (rr)->r_name = (rr)->name;
+ (rr)->r_name = (rr)->name;
/*
* MDNS question/query set
*/
struct mdns_qset {
- char name[MDNS_RECORD_LEN + 1]; /* qname */
- char *q_name;
- uint16_t q_class; /* qset class */
- uint16_t q_type; /* query type */
- int q_unicast; /* unicast desired */
+ char name[MDNS_RECORD_LEN + 1]; /* qname */
+ char *q_name;
+ uint16_t q_class; /* qset class */
+ uint16_t q_type; /* query type */
+ int q_unicast; /* unicast desired */
};
#define mdns_qset_name(qs, str) (qs)->q_name = str
#define mdns_qset_name_dup(qs, str) \
strncpy((qs)->name, str, MDNS_RECORD_LEN); \
- (qs)->q_name = (qs)->name;
+ (qs)->q_name = (qs)->name;
/*
* Packet resource
@@ -237,7 +248,7 @@
*/
#define MDNS_ENC_CHAR 0x01
#define MDNS_ENC_WCHAR 0x02
-#define MDNS_ENC_BINARY 0x04
+#define MDNS_ENC_BINARY 0x04
#define MDNS_ENC_AUTO 0x08
#define MDNS_ENC_ADDR 0x10
#define MDNS_ENC_NAME 0x20
@@ -288,6 +299,7 @@
int mdns_pkg_getquestion(struct mdns_packet *, int, struct mdns_qset *);
int mdns_pkg_getanswer(struct mdns_packet *, int, struct mdns_rrset *);
int mdns_pkg_getauth(struct mdns_packet *, int, struct mdns_rrset *);
+int mdns_pkg_getaddit(struct mdns_packet *, int, struct mdns_rrset *);
int mdns_type_atoi(const char *);
void * mdns_res_encode(uint16_t, uint16_t, void *, int, size_t, size_t *);
More information about the p4-projects
mailing list