发现消息必须清晰标记,才能与其他消息区分开。以下多播消息格式确保发现侦听进程可以区分发现消息:
#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;