⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packet.c

📁 Net-CDP-0.09 cdp相关源包
💻 C
字号:
/* * $Id: packet.c,v 1.2 2005/07/21 07:08:23 mchapman Exp $ */#include <system.h>#include <encoding.h>#ifdef HAVE_SYS_UTSNAME_H# include <sys/utsname.h>#endif /* HAVE_SYS_UTSNAME_H */struct cdp_packet *cdp_packet_generate(const cdp_t *cdp) {	struct cdp_packet *packet;	char *device_id;	char *ios_version;	char *platform;	struct utsname uts;	assert(cdp);	if (!uname(&uts)) {		device_id = strdup(uts.nodename);		ios_version = SALLOC(			strlen(uts.sysname) +			strlen(uts.release) +			strlen(uts.version) +			strlen(uts.machine) +			10		);		sprintf(ios_version, "%s %s %s %s",			uts.sysname,			uts.release,			uts.version,			uts.machine		);		platform = strdup(uts.sysname);	} else		device_id = ios_version = platform = NULL;	packet = CALLOC(1, struct cdp_packet);	packet->packet = MALLOC_VOIDP(BUFSIZ);	packet->packet_length = BUFSIZ;	packet->version = 1;	packet->ttl = 180;	packet->device_id = device_id;	NEW(packet->capabilities, CDP_CAP_HOST, uint32_t);	packet->ios_version = ios_version;	packet->platform = platform;	if (cdp) {		if (cdp->addresses)			packet->addresses = cdp_llist_dup(cdp->addresses);		packet->port_id = strdup(cdp->port);		if (cdp->duplex)			DUP(packet->duplex, cdp->duplex, uint8_t);	}	return packet;}struct cdp_packet *cdp_packet_dup(const struct cdp_packet *packet) {	struct cdp_packet *dup;	assert(packet);	dup = CALLOC(1, struct cdp_packet);	dup->packet = MALLOC_VOIDP(BUFSIZ);	dup->packet_length = BUFSIZ;	dup->version = packet->version;	dup->ttl = packet->ttl;	if (packet->device_id) dup->device_id = strdup(packet->device_id);	if (packet->addresses)		dup->addresses = cdp_llist_dup(packet->addresses);	if (packet->port_id) dup->port_id = strdup(packet->port_id);	if (packet->capabilities)		DUP(dup->capabilities, packet->capabilities, uint32_t);	if (packet->ios_version) dup->ios_version = strdup(packet->ios_version);	if (packet->platform) dup->platform = strdup(packet->platform);	if (packet->ip_prefixes)		dup->ip_prefixes = cdp_llist_dup(packet->ip_prefixes);	if (packet->vtp_mgmt_domain)		dup->vtp_mgmt_domain = strdup(packet->vtp_mgmt_domain);	if (packet->native_vlan)		DUP(dup->native_vlan, packet->native_vlan, uint16_t);	if (packet->duplex) DUP(dup->duplex, packet->duplex, uint8_t);	if (packet->appliance)		DUP(dup->appliance, packet->appliance, struct cdp_appliance);	if (packet->appliance_query)		DUP(dup->appliance_query, packet->appliance_query,			 struct cdp_appliance);	if (packet->power_consumption)		DUP(dup->power_consumption, packet->power_consumption,			uint16_t);	if (packet->mtu) DUP(dup->mtu, packet->mtu, uint32_t);	if (packet->extended_trust)		DUP(dup->extended_trust, packet->extended_trust, uint8_t);	if (packet->untrusted_cos)		DUP(dup->untrusted_cos, packet->untrusted_cos, uint8_t);	if (packet->mgmt_addresses)		dup->mgmt_addresses = cdp_llist_dup(packet->mgmt_addresses);	return dup;}voidcdp_packet_free(struct cdp_packet *packet) {	assert(packet);	if (packet->packet) FREE(packet->packet);	if (packet->device_id) FREE(packet->device_id);	if (packet->addresses) cdp_llist_free(packet->addresses);	if (packet->port_id) FREE(packet->port_id);	if (packet->capabilities) FREE(packet->capabilities);	if (packet->ios_version) FREE(packet->ios_version);	if (packet->platform) FREE(packet->platform);	if (packet->ip_prefixes) cdp_llist_free(packet->ip_prefixes);	if (packet->vtp_mgmt_domain) FREE(packet->vtp_mgmt_domain);	if (packet->native_vlan) FREE(packet->native_vlan);	if (packet->duplex) FREE(packet->duplex);	if (packet->appliance) FREE(packet->appliance);	if (packet->appliance_query) FREE(packet->appliance_query);	if (packet->power_consumption) FREE(packet->power_consumption);	if (packet->mtu) FREE(packet->mtu);	if (packet->extended_trust) FREE(packet->extended_trust);	if (packet->untrusted_cos) FREE(packet->untrusted_cos);	if (packet->mgmt_addresses) cdp_llist_free(packet->mgmt_addresses);	FREE(packet);}intcdp_packet_update(struct cdp_packet *packet, char *errors) {	assert(packet);	assert(errors);	if ((packet->packet_length = cdp_encode(packet, packet->packet, BUFSIZ)) == 0) {		strcpy(errors, "Generated packet too large");		return -1;	}	/* Update my own concept of checksum */	packet->checksum = cdp_decode_checksum(packet->packet, packet->packet_length);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -