?? ip.lst
字號:
C51 COMPILER V8.18 IP 06/19/2010 21:01:39 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE IP
OBJECT MODULE PLACED IN ip.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ip.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "ip.h"
2 #include "tcp.h"
3 #include "ARP.h"
4 #include "UDP.h"
5 #include "ICMP.h"
6 #include "rtl8019.h"
7 xdata ST_IP_HEAD_FORMAT gstIphead;
8
9 xdata UWORK8 IPLocalAddress_buf[IP_LEN]; // 本地IP地址
10 xdata UWORK8 SubNetMask_buf[IP_LEN]; // 子網掩碼
11 xdata UWORK8 GateWay_buf[IP_LEN]; // 網關
12 xdata UWORK8 IPSourceddress_buf[IP_LEN]; // IP地址
13 xdata UWORK8 IPDestAddress_buf[IP_LEN]; /* 目標IP地址 */
14 UWORK16 SourcePort; //源端口號
15 UWORK16 DesPort; //目標端口號
16
17 /*********************************************************************
18 函數名: void IpSend(void)
19 功能: Ip發送數據
20 輸入: 發送數據的長度
21 輸出: 將數據打包成IP包
22 返回: None
23 日期: 2004/12/28
24 *********************************************************************/
25 void IpSend(void)
26 {
27 1 ST_IP_HEAD_FORMAT *pIpHeadBuff;
28 1 MAC_Remote_buf[12] = 0x08; // IP協議
29 1 MAC_Remote_buf[13] = 0x00;
30 1 pIpHeadBuff = (ST_IP_HEAD_FORMAT *)&NetSend_buf[0]; // IP頭
31 1 memcpy(&NetSend_buf[0],&gstIphead,20);
32 1 pIpHeadBuff->usCheckSum = 0;
33 1 pIpHeadBuff->usCheckSum = CheckSum((UWORK16 *)&NetSend_buf[0],20); // 計算IP頭校驗和
34 1
35 1 //SerialSendbuf((UWORK8 *)&NetSend_buf[0],gstIphead.usTotalLen); //讀取IP總的數據長度
36 1 SendEthernetPacket(pIpHeadBuff->usTotalLen);
37 1 }
38 /*********************************************************************
39 函數名: void IpOrRouter(void)
40 功能: IP路由選擇
41 輸入: 初始化或者改變IP的時候
42 輸出: 判斷IP還是路由
43 返回: None
44 日期: 2005/01/24
45 更新: 2006/05/21
46 *********************************************************************/
47 void IpOrRouter(void)
48 {
49 1 UWORK32 ulLocalIP,ulRemoteIP,ulMask;
50 1 UWORK8 ucaTemp[4],ucLoop;
51 1
52 1 memcpy((UWORK8 *)&ulLocalIP,&IPLocalAddress_buf[0],IP_LEN);
53 1 memcpy((UWORK8 *)&ulMask,&SubNetMask_buf[0],IP_LEN);
54 1
55 1 for(ucLoop = 0; ucLoop < REMOTE_IP_NUM; ucLoop++) // 目的IP地址 /
C51 COMPILER V8.18 IP 06/19/2010 21:01:39 PAGE 2
56 1 {
57 2 memset(&ucaTemp[0],0,4);
58 2 if(0 == memcmp(&ucaTemp[0],&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN))
59 2 {
60 3 ArpCache_Buf[ucLoop].ucIPValible = 0; // 沒有合法的IP,規定0.0.0.0為非
-法IP
61 3 }
62 2 else
63 2 {
64 3 ArpCache_Buf[ucLoop].ucIPValible = 1;
65 3
66 3 memcpy((UWORK8 *)&ulRemoteIP,&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN);
67 3
68 3 if((ulLocalIP & ulMask) == (ulRemoteIP & ulMask))
69 3 {
70 4 ArpCache_Buf[ucLoop].ucIpOrRouter = 0; // 網絡號相同,直接交付
71 4 memcpy(&ArpCache_Buf[ucLoop].ucaArpIp[0],&ArpCache_Buf[ucLoop].ucaIP[0],IP_LEN);
72 4 }
73 3 else
74 3 {
75 4 ArpCache_Buf[ucLoop].ucIpOrRouter = 1; // 網絡號不相同,使用路由間接交
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -