📄 udp.c
字号:
#include "tcpip.h"
#include "router.h"
#if EPA_MODULE_EN > 0
#include "epa.h"
#endif // EPA_MODULE_EN
#if PTP_MODULE_EN > 0
#include "ptp_module.h"
#endif // PTP_MODULE_EN
uint8 UDPInput(PSock psock) {
uint16 dst_port, length, chksum;
n2h16(psock->payload, &psock->src_port);
n2h16(psock->payload + 2, &dst_port);
n2h16(psock->payload + 4, &length);
n2h16(psock->payload + 6, &chksum);
#if UDP_VALIDCHK_EN > 0
if(length != psock->length) {
PutSock(psock);
return (1);
}
h2n32(psock->srcip, psock->payload - 12);
h2n32(psock->pni->ip, psock->payload - 8);
*(psock->payload - 4) = 0;
*(psock->payload - 3) = UDP_PROTOCOL;
h2n16(psock->length, psock->payload - 2);
if(ChkSum(psock->payload - 12, length + 12)) {
PutSock(psock);
return (1);
}
#endif // UDP_VALIDCHK_EN
ShiftSock(psock, PROTOCOL_UDP_OR_ICMP, PROTOCOL_UDP_DATA);
switch(dst_port) {
#if EPA_MODULE_EN > 0
case EPA_PORT:
OSQPost(gpEPAMsgQ, psock);
break;
#endif // EPA_MODULE_EN
#if RIP_MODULE_EN >0
case RIP_PORT:
RIPInput(psock);
break;
#endif //RIP_MODULE_EN
#if PTP_MODULE_EN > 0
case PTP_EVENT_PORT:
case PTP_GERNERAL_PORT:
OSQPost(gpPTProcMsgQ, psock);
break;
#endif // PTP_MODULE_EN
default:
PutSock(psock);
}
return (0);
}
uint8 UDPOutput(PSock psock) {
#if UDP_VALIDCHK_EN > 0
uint16 chksum;
#endif // UDP_VALIDCHK_EN
ShiftSock(psock, PROTOCOL_UDP_DATA, PROTOCOL_UDP_OR_ICMP);
h2n16(psock->src_port, psock->payload);
h2n16(psock->dst_port, psock->payload + 2);
h2n16(psock->length, psock->payload + 4);
psock->payload[6] = 0;
psock->payload[7] = 0;
#if UDP_VALIDCHK_EN
h2n32(psock->pni->ip, psock->payload - 12);
h2n32(psock->dstip, psock->payload - 8);
*(psock->payload - 4) = 0;
*(psock->payload - 3) = UDP_PROTOCOL;
h2n16(psock->length, psock->payload - 2);
chksum = ChkSum(psock->payload - 12, 8 + psock->length);
h2n16(chksum, psock->payload + 6);
#endif // UDP_VALIDCHK_EN
IPOutput(psock, UDP_PROTOCOL);
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -