📄 ip.lst
字号:
C51 COMPILER V8.18 IP 04/26/2010 19:37:30 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 04/26/2010 19:37:30 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 + -