- Còn dữ liệu ứng dụng trong gói TCP/UDP đương nhiên là chỉ do lớp ứng dụng tạo ra mà thôị Lỡ hẹn đã lâu, hôm nay tiếp tục với giao thức DHCP, còn thằng này với HTTP nữa là xong.
4-Sửa hàm IPProcess, thêm các lệnh gọi hàm của giao thức UDP, TCP vào: Code:
//--- // Writen by NTTam - PTITHCM
//--- #include "packet.h" #include "ip.h" #include "uart.h" #include "dhcp.h" //#define UDP_DEBUG //--- //Ham gui di mot goi UDP
void udpSend(unsigned long dstIp, unsigned int dstPort, unsigned int srcPort, unsigned int len, unsigned char* udpData)
{
struct ntUDPHeader* udpHeader;
udpHeader = (struct ntUDPHeader*)(udpData - UDP_HEADER_LEN); len += UDP_HEADER_LEN;
udpHeader->desPort = HTONS(dstPort); udpHeader->srcPort = HTONS(srcPort); udpHeader->Len = HTONS(len);
udpHeader->Checksum = 0;
ipSend(dstIp, IP_PROTO_UDP, len, (unsigned char*)udpHeader); }
//--- ---
//Ham xu ly goi UDP nhan duoc, duoc goi boi ham xu ly goi IP (IPProcess) // Hien chua co ung dung chay UDP nen ham nay trong
void UDPProcess(unsigned int len, struct ntIPHeader* packet) {
dhcpIn((len - IP_HEADER_LEN - UDP_HEADER_LEN), (struct netDhcpHeader*) ((char*)packet + IP_HEADER_LEN + UDP_HEADER_LEN));
#ifdef UDP_DEBUG
printf("Rx UDP Packet\r\n"); #endif
}
//--- ---
(Nhớ cập nhật khai báo hàm bên file header nha)
3-Thêm một số include (khi dịch báo lỗi thì các bạn cũng tự tìm ra mà thêm vào thôi, chỉ luôn cho đỡ mắc công kiếm): cho đỡ mắc công kiếm):
#include <avr/pgmspacẹh>//// vào “tcp.h”#include "dhcp.h"//// vào “ntAVRnet.h” #include "dhcp.h"//// vào “ntAVRnet.h”
#include "udp.h" và #include "icmp.h" vào “ip.h”
4-Sửa hàm IPProcess, thêm các lệnh gọi hàm của giao thức UDP, TCP vào:Code: Code:
void IPProcess(unsigned int len, struct ntIPHeader* packet) {
// check IP ađressing, stop processing if not for me and not a broadcast
(HTONL(packet->desIPAđr) != (ipGetConfig()->ip|ipGetConfig()- >netmask)) &&
(HTONL(packet->desIPAđr) != 0xFFFFFFFF) && (ipGetConfig()->ip != 0x00000000) )
return;
// handle ICMP packet
if( packet->Protocol == IP_PROTO_ICMP ) {
#ifdef IP_DEBUG
printf("IP->Rx: ICMP/IP packet\r\n"); //icmpPrintHeader((icmpip_hdr*)packet); #endif
icmpIpIn((struct ntIPHeader*)packet); }
else if( packet->Protocol == IP_PROTO_UDP ) {
#ifdef IP_DEBUG
printf("IP->Rx: UDP/IP packet\r\n");
//debugPrintHexTable(NetBufferLen-14, &NetBuffer[14]); #endif
UDPProcess(len, ((struct ntIPHeader*)packet) );//// }
else if( packet->Protocol == IP_PROTO_TCP ) {
#ifdef IP_DEBUG
printf("IP->Rx: TCP/IP packet\r\n"); #endif
TCPProcess((unsigned char *)packet,len-((packet->verHdrLen & 0x0F)<<2));//// } else { #ifdef IP_DEBUG printf("IP->Rx: IP packet\r\n"); #endif } } //--- ---