📄 netif.lst
字号:
C51 COMPILER V7.06 NETIF 11/06/2008 08:54:10 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE NETIF
OBJECT MODULE PLACED IN .\NetIf.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\TCPIP\NetIf.c BROWSE DEBUG OBJECTEXTEND PRINT(.\NetIf.lst) OBJECT(.\NetI
-f.obj)
stmt level source
1 /*
2 * Copyright (c) 2003 Electric Application Laboratory of NAN KAI University
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25 * OF SUCH DAMAGE.
26 *
27 * Author: Li Zhanglin <wzzlin@nankai.edu.cn>
28 *
29 */
30
31 #include "..\GloblDef\GloblDef.h"
32 #include "..\TCPIP\TCPIPmem.h"
33 #include "..\TCPIP\IP.h"
34 #include "..\TCPIP\Netif.h"
35
36 /* You can get a new netif from NetIfPool */
37 static struct SNetIf DT_XDATA NetIfPool[NET_IF_MAX_NUM];
38
39 /* list hearder of free Netifs buffer */
40 static struct SNetIf DT_XDATA * DT_XDATA NetIfFreeList;
41
42 /* list header of Netifs */
43 static struct SNetIf DT_XDATA * DT_XDATA NetIfList;
44
45 //初始化网络接口
46 void NetIfInit() REENTRANT_MUL
47 {
48 1 WORD count;
49 1
50 1 /* inti NetIfList */
51 1 NetIfList = NULL;
52 1
53 1 /* inti FreeList, chain up NetIfPool */
54 1 for(count = 0, NetIfFreeList = NULL; count < NET_IF_MAX_NUM; count++)
C51 COMPILER V7.06 NETIF 11/06/2008 08:54:10 PAGE 2
55 1 {
56 2 NetIfPool[count].pNext = NetIfFreeList;
57 2 NetIfFreeList = &NetIfPool[count];
58 2 }
59 1 }
60
61 /* add a netif to list, return NULL if insufficient mem */
62 struct SNetIf DT_XDATA * NetIfAdd(DWORD IPAddr, DWORD NetMask,DWORD GateWay,
63 void (DT_CODE * input)(struct SNetIf DT_XDATA * NetIf) REENTRANT_SIG,
64 BOOL (DT_CODE * output)(struct SMemHead DT_XDATA *MemHead,struct SNetIf DT_XDATA* NetIf,DWORD DestI
-P) REENTRANT_SIG,
65 void DT_XDATA * Info) REENTRANT_MUL
66 {
67 1 struct SNetIf DT_XDATA * NetIf;
68 1
69 1 /* get netif from free list */
70 1 NetIf = NetIfFreeList;
71 1 NetIfFreeList = NetIfFreeList->pNext;
72 1
73 1 /* if add more than NET_IF_MAX_NUM return NULL */
74 1 if(NetIf == NULL)
75 1 return NULL;
76 1 else
77 1 {
78 2 NetIf->IPAddr = htonl(IPAddr);
79 2 NetIf->NetMask = htonl(NetMask);
80 2 NetIf->GateWay = htonl(GateWay);
81 2 NetIf->input = input;
82 2 NetIf->output = output;
83 2 NetIf->Info = Info;
84 2
85 2 /* add to the head of the list */
86 2 NetIf->pNext = NetIfList;
87 2 NetIfList = NetIf;
88 2
89 2 return NetIf;
90 2 }
91 1 }
92
93 /* find a netif which NetIf->NetMask & NetIf->NetAddr ==
94 NetIf->NetMask & IPAddr */
95 struct SNetIf DT_XDATA * NetIfFindRout(IP_ADDR IPAddr) REENTRANT_SIG
96 {
97 1 struct SNetIf DT_XDATA *NetIf;
98 1 for(NetIf = NetIfList; NetIf != NULL; NetIf = NetIf->pNext)
99 1 {
100 2 if((NetIf->NetMask & NetIf->IPAddr) == (NetIf->NetMask & IPAddr))
101 2 return NetIf;
102 2 }
103 1
104 1 /* if can't find any suitable Netif, return NetIfList. That is the
105 1 first netif is the default Netif*/
106 1 return NetIfList;
107 1 }
108
109 struct SNetIf DT_XDATA * NetIfFindIP(IP_ADDR IPAddr) REENTRANT_MUL
110 {
111 1 struct SNetIf DT_XDATA *pNetIf;
112 1 for(pNetIf = NetIfList; pNetIf != NULL; pNetIf = pNetIf->pNext)
113 1 {
114 2 if(pNetIf->IPAddr == IPAddr)
115 2 break;
C51 COMPILER V7.06 NETIF 11/06/2008 08:54:10 PAGE 3
116 2 }
117 1 return pNetIf;
118 1 }
119
120 /* net inteftimer. use to packup packet from every net interface */
121 void NetIfTimer() REENTRANT_MUL
122 {
123 1 struct SNetIf DT_XDATA * NetIf;
124 1
125 1 /* if netif has data to come in */
126 1 for(NetIf = NetIfList; NetIf != NULL; NetIf = NetIf->pNext)
127 1 NetIf->input(NetIf);
128 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 598 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 24 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -