Sau đó ta gọi hàm của giao thức ethernet để gửi dữ liệu đị

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 44 - 45)

Trong hàm này, ta có sử dụng 1 giá trị là TTL (Time To Live) để điền vào trường TTL trong Header IP (xem lại cấu trúc Header IP). Giá trị này cần được định nghĩa trước. Ta thêm định Header IP (xem lại cấu trúc Header IP). Giá trị này cần được định nghĩa trước. Ta thêm định nghĩa này vào file “ip.h”:

Code:

#define IP_TIME_TO_LIVE 128 //gia tri Time-To-Live

(TTL) mặc định cho header IP

Có thời gian sẽ giải thích ý nghĩa của trường TTL sau nhé.Và hàm xử lý khi nhận được 1 gói tin IP: Và hàm xử lý khi nhận được 1 gói tin IP:

Code:

//--- ---

//Ham xu ly goi IP, duoc goi boi giao thuc ethernet khi paket type duoc xac dinh la IP

void IPProcess(unsigned int len, struct ntIPHeader* packet) {

// check IP ađressing, stop processing if not for me and not a broadcast

if( (HTONL(packet->desIPAđr) != ipGetConfig()->ip) &&

(HTONL(packet->desIPAđr) != (ipGetConfig()->ip|ipGetConfig()- >netmask)) &&

(HTONL(packet->desIPAđr) != 0xFFFFFFFF) ) 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 } } //--- --- Giải thích:

- Khi nhận được 1 gói IP, việc đầu tiên giao thức IP cần làm là kiểm tra lại địa chỉ IP xem có phải là gửi cho mình không: và ta chỉ nhận nếu đúng địa chỉ hoặc địa chỉ là IP broadcast (lưu ý đây là

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 44 - 45)