?? netif.lst
字號:
C51 COMPILER V6.12 NETIF 05/19/2009 14:55:28 PAGE 1
C51 COMPILER V6.12, 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 void NetIfInit() REENTRANT_MUL
46 {
47 1 WORD count;
48 1
49 1 /* inti NetIfList */
50 1 NetIfList = NULL;
51 1
52 1 /* inti FreeList, chain up NetIfPool */
53 1 for(count = 0, NetIfFreeList = NULL; count < NET_IF_MAX_NUM; count++)
54 1 {
C51 COMPILER V6.12 NETIF 05/19/2009 14:55:28 PAGE 2
55 2 NetIfPool[count].pNext = NetIfFreeList;
56 2 NetIfFreeList = &NetIfPool[count];
57 2 }
58 1 }
59
60 /* add a netif to list, return NULL if insufficient mem */
61 struct SNetIf DT_XDATA * NetIfAdd(DWORD IPAddr, DWORD NetMask,DWORD GateWay,
62 void (DT_CODE * input)(struct SNetIf DT_XDATA * NetIf) REENTRANT_SIG,
63 BOOL (DT_CODE * output)(struct SMemHead DT_XDATA *MemHead,struct SNetIf DT_XDATA* NetIf,DWORD DestI
-P) REENTRANT_SIG,
64 void DT_XDATA * Info) REENTRANT_MUL
65 {
66 1 struct SNetIf DT_XDATA * NetIf;
67 1
68 1 /* get netif from free list */
69 1 NetIf = NetIfFreeList;
70 1 NetIfFreeList = NetIfFreeList->pNext;
71 1
72 1 /* if add more than NET_IF_MAX_NUM return NULL */
73 1 if(NetIf == NULL)
74 1 return NULL;
75 1 else
76 1 {
77 2 NetIf->IPAddr = htonl(IPAddr);
78 2 NetIf->NetMask = htonl(NetMask);
79 2 NetIf->GateWay = htonl(GateWay);
80 2 NetIf->input = input;
81 2 NetIf->output = output;
82 2 NetIf->Info = Info;
83 2
84 2 /* add to the head of the list */
85 2 NetIf->pNext = NetIfList;
86 2 NetIfList = NetIf;
87 2
88 2 return NetIf;
89 2 }
90 1 }
91
92 /* find a netif which NetIf->NetMask & NetIf->NetAddr ==
93 NetIf->NetMask & IPAddr */
94 struct SNetIf DT_XDATA * NetIfFindRout(IP_ADDR IPAddr) REENTRANT_SIG
95 {
96 1 struct SNetIf DT_XDATA *NetIf;
97 1 for(NetIf = NetIfList; NetIf != NULL; NetIf = NetIf->pNext)
98 1 {
99 2 if((NetIf->NetMask & NetIf->IPAddr) == (NetIf->NetMask & IPAddr))
100 2 return NetIf;
101 2 }
102 1
103 1 /* if can't find any suitable Netif, return NetIfList. That is the
104 1 first netif is the default Netif*/
105 1 return NetIfList;
106 1 }
107
108 struct SNetIf DT_XDATA * NetIfFindIP(IP_ADDR IPAddr) REENTRANT_MUL
109 {
110 1 struct SNetIf DT_XDATA *pNetIf;
111 1 for(pNetIf = NetIfList; pNetIf != NULL; pNetIf = pNetIf->pNext)
112 1 {
113 2 if(pNetIf->IPAddr == IPAddr)
114 2 break;
115 2 }
C51 COMPILER V6.12 NETIF 05/19/2009 14:55:28 PAGE 3
116 1 return pNetIf;
117 1 }
118
119 /* net inteftimer. use to packup packet from every net interface */
120 void NetIfTimer() REENTRANT_MUL
121 {
122 1 struct SNetIf DT_XDATA * NetIf;
123 1
124 1 /* if netif has data to come in */
125 1 for(NetIf = NetIfList; NetIf != NULL; NetIf = NetIf->pNext)
126 1 NetIf->input(NetIf);
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 618 ----
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 + -