发现消息必须清晰标记,才能与其他消息区分开。以下多播消息格式确保发现侦听进程可以区分发现消息:
#include <netdb.h> /* Used for MAXHOSTNAMELEN definition */ #define MAC_MULTI_MAGIC_NO 92792004 #define MAC_MULTI_VERSION 1 enum { SEND_MSG = 0, RESPONSE_MSG, LDMD_DISC_SEND, LDMD_DISC_RESP, }; typedef struct { uint32_t version_no; uint32_t magic_no; uint32_t msg_type; uint32_t resv; union { mac_lookup_t Mac_lookup; ldmd_discovery_t Ldmd_discovery; } payload; #define lookup payload.Mac_lookup #define discovery payload.Ldmd_discovery } multicast_msg_t; #define LDMD_VERSION_LEN 32 typedef struct { uint64_t mac_addr; char source_ip[INET_ADDRSTRLEN]; } mac_lookup_t; typedef struct { char ldmd_version[LDMD_VERSION_LEN]; char hostname[MAXHOSTNAMELEN]; struct in_addr ip_address; int port_no; } ldmd_discovery_t;