icmp.c

来自「包括EPA协议栈」· C语言 代码 · 共 38 行

C
38
字号
#include "tcpip.h"
#include <string.h>

#define ICMP_TYPE_REPLYECHO 0
#define ICMP_TYPE_UNREACHABLE 3
#define ICMP_TYPE_REQUESTECHO 8

uint8 ICMPInput(PSock psock) {
	uint8 type, code;

	type = psock->payload[0];
	code = psock->payload[1];
	switch(type) {
		case ICMP_TYPE_REQUESTECHO:
			ICMPOutput(psock->src_ip, ICMP_TYPE_REPLYECHO, 0, psock->length - 4, psock->payload + 4);
			PutSock(psock);
			return (0);
		default:
			PutSock(psock);
			return (1);
	}
}

uint8 ICMPOutput(uint32 ip, uint8 type, uint8 code, uint16 length, Octet data[]) {
	uint16 chksum;
	PSock psock;
	
	psock = GetSock(PROTOCOL_UDP_OR_ICMP, length + 4, 0, ip, NISelect(ip));
	psock->payload[0] = type;
	psock->payload[1] = code;
	h2n16(0, psock->payload + 2);
	memcpy(psock->payload + 4, data, length);
	chksum = ChkSum(psock->payload, psock->length);
	h2n16(chksum, psock->payload + 2);
	IPOutput(psock, ICMP_PROTOCOL);
	return (0);
}

⌨️ 快捷键说明

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