|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
大千世界,人海茫茫 |
| 作者:local_mach 欄目:ARM技術(shù) |
得到ZLG315的許可,也得到另一伙伴的許可,發(fā)布一些代碼, 本人并不贊成不經(jīng)過你的大腦就直接用,發(fā)布代碼的原意是 讓閣下知道原理而自己去挖掘更深層的東西,所在版本不是 很高,但對于想學(xué)習(xí)的人來說,足夠中的足夠了,相信過了 幾個(gè)星期,你就完全領(lǐng)會(huì)到的周立功IP的精神所在. 由于涉及到版權(quán)的問題,PPP協(xié)議只有文件名,沒有代碼, TFTP也是同理。 這些代碼都是我的心血,原本是創(chuàng)業(yè)用的,然,大千世界, 世事無常,速度問題,盡失良機(jī),本已塵封的代碼,不知 道能否起到一點(diǎn)用處 |
| 2樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:00:00 發(fā)布:
硬件層文件 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_HARDWARE.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 硬件驅(qū)動(dòng)層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_HARDWARE_GLOBALS // 定義硬件驅(qū)動(dòng)層全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: void mE_HARDWARE_DELAY_TIMER(uint16 TIMER_DATA) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 硬件控制時(shí)間延時(shí) 輸入?yún)?shù): uint16 TIMER_DATA: 時(shí)間長度 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ void mE_HARDWARE_DELAY_TIMER(uint16 TIMER_DATA) { uint16 result; for(result=0;result<TIMER_DATA;result++) ; } /***************************************************************************************** 函數(shù)名稱: void mE_HARDWARE_SET_PIN_FUN(uint8 PORT.html">PORT,uint8 Pin,uint32 Func) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 設(shè)置引腳功能 輸入?yún)?shù): uint8 PORT: 端口 uint8 PIN: 引腳 uint32 FUNC: 功能 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ void mE_HARDWARE_SET_PIN_FUN(uint8 PORT,uint8 INTRODUCING,uint32 FUNCTION) { uint32 TEMP_REGISTER,TEMP = 3; SWITCH(PORT) { case mE_HARDWARE_ARM_PORT_0: if(INTRODUCING > mE_HARDWARE_ARM_PORT_0_PIN) break; if(FUNCTION > mE_HARDWARE_ARM_PORT_0_FUN) break; if(INTRODUCING <= 15) { OS_ENTER_CRITICAL(); TEMP = TEMP << (INTRODUCING * 2); TEMP = ~TEMP; TEMP_REGISTER = PINSEL0 & TEMP; TEMP = 0; TEMP = TEMP | FUNCTION; TEMP = TEMP << (INTRODUCING * 2); PINSEL0 = TEMP_REGISTER | TEMP; OS_EXIT_CRITICAL(); } else if((INTRODUCING >= 16) && (INTRODUCING <= 31)) { OS_ENTER_CRITICAL(); INTRODUCING = INTRODUCING - 16; TEMP = TEMP << (INTRODUCING * 2); &nb |
|
| 3樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:02:00 發(fā)布:
硬件層文件 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_HARDWARE.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: 硬件驅(qū)動(dòng)層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約頭文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_HARDWARE_H // 頭文件保護(hù) #define mE_HARDWARE_H // 頭文件保護(hù) #ifdef mE_HARDWARE_GLOBALS // 定義硬件驅(qū)動(dòng)層全局變量 #define mE_HARDWARE_EXT // 硬件驅(qū)動(dòng)層內(nèi)部變量 #else #define mE_HARDWARE_EXT extern // 硬件驅(qū)動(dòng)層外部變量 #endif /********************************************************************************************* 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 基本定義 注意: 其它說明: 端口0數(shù)據(jù)范圍定義 *********************************************************************************************/ #define mE_HARDWARE_ARM_PORT_0 0 // 端口0 #define mE_HARDWARE_ARM_PORT_0_PIN 31 // 端口0引腳最大值 #define mE_HARDWARE_ARM_PORT_0_VALUE 1 // 引腳值最大值 #define mE_HARDWARE_ARM_PORT_0_IO 1 // 引腳值方向最大值 #define mE_HARDWARE_ARM_PORT_0_FUN 4 // 引腳值功能最大值 /********************************************************************************************* 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 基本定義 注意: 其它說明: 端口1數(shù)據(jù)范圍定義 *********************************************************************************************/ #define mE_HARDWARE_ARM_PORT_1 1 // 端口1 #define mE_HARDWARE_ARM_PORT_1_PIN 31 // 端口1引腳最大值 #define mE_HARDWARE_ARM_PORT_1_VALUE 1 // 引腳值最大值 #define mE_HARDWARE_ARM_PORT_1_IO 1 // 引腳值方向最大值 #define mE_HARDWARE_ARM_PORT_1_FUN 4 // 引腳值功能最大值 /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 其它說明: 芯片硬件地址、控制引腳 *****************************************************************************************/ #define mE_HARDWARE_INT_PORT 1 // 中斷引腳 #define mE_HARDWARE_INT_PIN 19 // 中斷引腳 #define mE_HARDWARE_RST_PORT 1 & |
|
| 4樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:03:00 發(fā)布:
以太網(wǎng)層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ETHERNET.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 以太網(wǎng)層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_ETHERNET_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 第一塊網(wǎng)卡配置 其它說明: 網(wǎng)絡(luò)參數(shù) 0x81-0xA0,先修改再編譯再寫程序 *****************************************************************************************/ uint8 mE_MY_IP_1ID[4] = {192,168,1,2}; // IP地址 uint8 mE_MY_GATEWAY_1ID[4] = {192,168,1,1}; // 網(wǎng)關(guān) uint8 mE_MY_IP_MARK_1ID[4] = {255,255,0,0}; // 掩碼 uint8 mE_MY_MAC_1ID[6] = {0x81,0x54,0x46,0xA9,0xF7,0x46}; // MAC地址 uint8 mE_MY_INET_1ID[6] = {0x20,0x06,0x02,0x20,0x00,0x46}; // 網(wǎng)絡(luò)系列號(hào) uint8 mE_MY_MAC_1MOOR[6] = {0x81,0x54,0x46,0xA9,0xF7,0x46}; // 固定的MAC地址 /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 第二塊網(wǎng)卡配置 其它說明: 網(wǎng)絡(luò)參數(shù) 0x81-0xA0,先修改再編譯再寫程序 *****************************************************************************************/ #if (mE_MAX_NET_WORK_CARD >= 2) uint8 mE_MY_IP_2ID[4] = {192,168,1,3}; // IP地址 uint8 mE_MY_GATEWAY_2ID[4] = {192,168,1,1}; // 網(wǎng)關(guān) uint8 mE_MY_IP_MARK_2ID[4] = {255,255,0,0}; // 掩碼 uint8 mE_MY_MAC_2ID[6] = {0x81,0x54,0x46,0xA9,0xF7,0x42}; // MAC地址 uint8 mE_MY_INET_2ID[6] = {0x81,0x54,0x46,0xA9,0xF7,0x42}; // 網(wǎng)絡(luò)系列號(hào) uint8 mE_MY_MAC_2MOOR[6] = {0x81,0x54,0x46,0xA9,0xF7,0x42}; // 固定的MAC地址 #endif /***************************************************************************************** 函數(shù)名稱: uint8 mE_ETHERNET_INITIALIZE(void) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 設(shè)置網(wǎng)絡(luò)接口參數(shù) 輸入?yún)?shù): 無 輸出參數(shù): 0: 設(shè)置成功 1: 設(shè)置失敗 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 設(shè)置以太網(wǎng)卡本地參數(shù) 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_ETHERNET_INITIALIZE(void) { uint8 i; for(i=0; i<4; i++) { mE_NETWORK_CARD_PORT[0].MY_IP[i] = mE_MY_IP_1ID[i]; mE_NETWORK_CARD_PORT[0].MY_GATEWAY[i] = mE_MY_GATEWAY_1ID[i]; mE_NETWORK_CARD_PORT[0].MY_IP_MARK[i] = mE_MY_IP_MARK_1ID[i]; #if (mE_MAX_NET_WORK_CARD >= 2) mE_NETWORK_CARD_PORT[1].MY_IP[i] = mE_MY_IP_2ID[i]; mE_NETWORK_CARD_PORT[1].MY_GATEWAY[i] = mE_MY_GATEWAY_2ID[i]; mE_NETWORK_CARD_PORT[1].MY_IP_MARK[i] = mE_MY_IP_MARK_2ID[i]; #endif } for(i=0; i<6; i++) { mE_NETWORK_CARD_PORT[0].MY_MAC[i] = mE_MY_MAC_1ID[i]; #if (mE_MAX_NET_WORK_CARD >= 2) mE_NETWORK_CARD_PORT[1].MY_MAC[i] = mE_MY_MAC_2ID[i];   |
|
| 5樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:04:00 發(fā)布:
以太網(wǎng)層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ETHERNET.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: 以太網(wǎng)層 其它說明: 影舞者 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_ETHERNET_H // 頭文件保護(hù) #define mE_ETHERNET_H // 頭文件保護(hù) #ifdef mE_ETHERNET_GLOBALS // 定義以太網(wǎng)層全局變量 #define mE_ETHERNET_EXT // 以太網(wǎng)層內(nèi)部變量 #else #define mE_ETHERNET_EXT extern // 以太網(wǎng)層外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 其它說明: Ethernet II標(biāo)準(zhǔn)是一種比較舊的標(biāo)準(zhǔn) Ethernet II標(biāo)準(zhǔn) IEEE 802.3標(biāo)準(zhǔn) 報(bào)頭 8字節(jié) 報(bào)頭 8字節(jié) 目標(biāo)地址 6字節(jié) 目標(biāo)地址 6字節(jié) 源地址 6字節(jié) 源地址 6字節(jié) 以太網(wǎng)類型 2字節(jié) 長度 2字節(jié)(DSAP--有效負(fù)載) 有效負(fù)載 46...1500字節(jié) DSAP 1字節(jié)(目標(biāo)節(jié)點(diǎn)下一層協(xié)議) 幀檢查序列 4字節(jié) SSAP 1字節(jié)(源節(jié)點(diǎn)下一層協(xié)議) 控件 1或2字節(jié) 有效負(fù)載 42...1496字節(jié) 幀檢查序列 4字節(jié) 二種協(xié)議不同之處是以太網(wǎng)類型變成幀長度,可以把IEEE 802.3幀的DSAP、SSAP、控件都看作 Ethernet II幀有效負(fù)載的一部分.在接收到一幀數(shù)據(jù)時(shí),判斷它是Ethernet II幀還是 IEEE 802.3幀可以由Ethernet II幀的以太網(wǎng)類型來判斷,大于等于1500就是Ethernet II幀, 小于1500就是IEEE 802.3幀 *****************************************************************************************/ /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 以太網(wǎng)層幀頭結(jié)構(gòu) 其它說明: 類型: 0x0800-IP協(xié)議、0x0806-ARP協(xié)議、0x8035-RARP、0x86DD-IPv6協(xié)議、0x880B-PPP協(xié)議 *****************************************************************************************/ typedef struct __mE_ETHERNET_HEAD{ uint8 Dest_MacId[6]; // 目的網(wǎng)卡地址 uint8 Source_MacId[6]; |
|
| 6樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:05:00 發(fā)布:
ARP地址協(xié)議解析層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ARP.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: ARP地址協(xié)議解析層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_ARP_H // 頭文件保護(hù) #define mE_ARP_H // 頭文件保護(hù) #ifdef mE_ARP_GLOBALS // 定義全局變量 #define mE_ARP_EXT // 內(nèi)部變量 #else #define mE_ARP_EXT extern // 外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 其它說明: 硬件類型: 0x0001-以太網(wǎng)、0x0006-令牌網(wǎng)、0x0015-幀中繼網(wǎng) 協(xié)議類型: 0x0800-IP協(xié)議 *****************************************************************************************/ /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: ARP幀結(jié)構(gòu),ARP報(bào)文的內(nèi)容總長28字節(jié) 其它說明: ARP幀的以太網(wǎng)類型: 0x0806 操作方式:0x0001-ARP請求幀,0x0002-ARP應(yīng)答幀,0x0008-反轉(zhuǎn)ARP地址請求幀,0x0009-反轉(zhuǎn)ARP地址應(yīng)答幀 *****************************************************************************************/ typedef struct __mE_ARP_HEAD{ uint16 HardwareType; // 硬件類型 uint16 ProtocalType; // 協(xié)議類型 uint8 HardwareLen; // 硬件地址長度(MAC字節(jié)數(shù)) uint8 ProtocalLen; // 協(xié)議地址長度(MAC字節(jié)數(shù)) uint16 Operation; // 操作方式 uint8 SourceMacId[6]; // 發(fā)送端硬件地址 uint8 SourceIp[4]; // 發(fā)送端協(xié)議地址 uint8 DestMacId[6]; // 接收端硬件地址 uint8 DestId[4]; // 接收端協(xié)議地址 }mE_ARP_HEAD; /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 接口函數(shù) 其它說明: ************************************* |
|
| 7樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:06:00 發(fā)布:
ARP地址協(xié)議解析層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ARP.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 地址協(xié)議解析ARP層 其它說明: 影舞者 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_ARP_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint8 mE_ARP_ANSWER(uint8 * ARP_REC_PTR,uint8 NETWORK_CARD) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 對方請求本地ARP物理地址 輸入?yún)?shù): uint8 *ARP_REC_PTR: 接收到的ARP請求包的指針 uint8 NETWORK_CARD: 網(wǎng)卡號(hào) 輸出參數(shù): 0: 發(fā)送成功 1: 發(fā)送失敗 2: 對方IP請求非本機(jī),不作任何數(shù)據(jù)回應(yīng) 函數(shù)扇出清單: 函數(shù)扇入清單: mE_ETHERNET_SEND_FRAME(); 用到的公共資源: 其它說明: 地址協(xié)議解析ARP層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_ARP_ANSWER(uint8 * ARP_REC_PTR,uint8 NETWORK_CARD) { struct _pkst TxdArp; uint8 i,result,SEND_ARP_MAC[6]; // 表示目標(biāo)IP地址是網(wǎng)關(guān) if(((mE_ARP_HEAD *)ARP_REC_PTR)->DestId[0] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[0]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->DestId[1] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[1]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->DestId[2] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[2]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->DestId[3] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[3]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[0] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY[0]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[1] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY[1]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[2] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY[2]) if(((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[3] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY[3]) { OS_ENTER_CRITICAL(); // 關(guān)中斷保護(hù)數(shù)據(jù) mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[0] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[0]; mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[1] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[1]; mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[2] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[2]; mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[3] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[3]; mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[4] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[4]; mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_GATEWAY_MAC[5] = ((mE_ARP_HEAD *)ARP_REC_PTR)->SourceMacId[5]; mE_NETWORK_CARD_PORT[NETWORK_CARD].GATEWAY_IP_TTL = mE_MAX_ARP_TTL_TIMER; OS_EXIT_CRITICAL(); // 開中斷退出保護(hù) goto IN_ARP_ANSWER_CODE; } // 如果目標(biāo)IP地址是本機(jī)IP,如果發(fā)送方屬于本網(wǎng)段 if(( (mE_ARP_HEAD *)ARP_REC_PTR)->DestId[0] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[0]) if(( (mE_ARP_HEAD *)ARP_REC_PTR)->DestId[1] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[1]) if(( (mE_ARP_HEAD *)ARP_REC_PTR)->DestId[2] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[2]) if(( (mE_ARP_HEAD *)ARP_REC_PTR)->DestId[3] == mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[3]) if((((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[0]&mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP_MARK[0]) == (mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[0]&mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP_MARK[0])) if((((mE_ARP_HEAD *)ARP_REC_PTR)->SourceIp[1]&mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP_MARK[1]) == (mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[1]&mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP_MARK[1])) if((((mE_ARP_HEAD *)ARP_REC_PTR)->SourceI |
|
| 8樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:07:00 發(fā)布:
ICMP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ICMP.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: ICMP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_ICMP_H // 頭文件保護(hù) #define mE_ICMP_H // 頭文件保護(hù) #ifdef mE_ICMP_GLOBALS // 定義全局變量 #define mE_ICMP_EXT // 定義內(nèi)部變量 #else #define mE_ICMP_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 其它說明: ICMP類型 0 - 回應(yīng)應(yīng)答(PING應(yīng)答) 11 - 超時(shí)(差錯(cuò)報(bào)文) 3 - 無法到達(dá)目的地 12 - IP報(bào)的參數(shù)設(shè)錯(cuò)了(差錯(cuò)報(bào)文) 4 - 源中斷(差錯(cuò)報(bào)文) 13 - 時(shí)間戳請求 5 - 重定向(差錯(cuò)報(bào)文) 14 - 時(shí)間戳應(yīng)答 8 - 回應(yīng)請求(PING請求) 17 - 地址掩碼請求 9 - 路由通過 18 - 地址掩碼應(yīng)答 10 - 路由選擇 出錯(cuò)代碼封裝 0 - 網(wǎng)絡(luò)不可達(dá) 1 - 主機(jī)不可達(dá) 2 - 協(xié)議不可用 3 - 端口不可達(dá) 4 - 需要段和DF設(shè)置 5 - 源路由失敗 類型 1字節(jié) 代碼 1字節(jié) 校驗(yàn) 2字節(jié) 未定義 4字節(jié) IP信息頭和8字節(jié)的數(shù)據(jù)報(bào) 28字節(jié) *****************************************************************************************/ /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: ICMP回應(yīng)應(yīng)答(請求)頭數(shù)據(jù) 其它說明: ICMP基本封裝、ICMP回應(yīng)應(yīng)答(請求)封裝不一樣 標(biāo)識(shí)符: PING一般發(fā)送0x0100或0x0200,如果是回應(yīng)應(yīng)答,就應(yīng)該保持標(biāo)識(shí)符與回應(yīng)請求相同 序列號(hào): 如果是回應(yīng)應(yīng)答,就應(yīng)該保持序列號(hào)與回應(yīng)請求相同 *****************************************************************************************/ typedef struct __mE_ICMP_HEAD{ uint8 Type; // ICMP幀類型 uint8 Option; // 錯(cuò)誤代碼(差錯(cuò)報(bào)文才有,其它全為0) uint16 Crc; // 校驗(yàn)和 |
|
| 9樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:08:00 發(fā)布:
ICMP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_ICMP.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: ICMP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_ICMP_GLOBALS // 包含進(jìn)外部變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_ICMP_CREATE_HEAD_CRC(mE_ICMP_CRC ICMP_PK) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 產(chǎn)生ICMP數(shù)據(jù)段的校驗(yàn)和 輸入?yún)?shù): mE_ICMP_CRC ICMP_PK: 數(shù)據(jù) 輸出參數(shù): 16位的校驗(yàn)和 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: PING命令的數(shù)據(jù)包是32字節(jié),報(bào)頭是8字節(jié),總共是40字節(jié),也就是20字 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_ICMP_CREATE_HEAD_CRC(mE_ICMP_CRC ICMP_PK) { uint8 i; mE_WORDS_CRC CrcTemp; CrcTemp.dwords = 0; for(i=0;i<20;i++) CrcTemp.dwords = CrcTemp.dwords + ICMP_PK.words.wordbuf[i]; while(CrcTemp.words.high>0) CrcTemp.dwords = (uint32)(CrcTemp.words.high + CrcTemp.words.low); CrcTemp.words.low = 0xffff - CrcTemp.words.low; return (CrcTemp.words.low); } /***************************************************************************************** 函數(shù)名稱: uint16 mE_ICMP_CREATE_ERROR_CRC(mE_ICMP_CRC ICMP_PK) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 產(chǎn)生ICMP數(shù)據(jù)段的校驗(yàn)和 輸入?yún)?shù): mE_ICMP_CRC ICMP_PK: 數(shù)據(jù) 輸出參數(shù): 16位的校驗(yàn)和 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 傳輸錯(cuò)誤報(bào)告,數(shù)據(jù)28字節(jié),報(bào)頭是8字節(jié),總共是36字節(jié),也就是18字 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_ICMP_CREATE_ERROR_CRC(mE_ICMP_CRC ICMP_PK) { uint8 i; mE_WORDS_CRC CrcTemp; CrcTemp.dwords = 0; for(i=0;i<18;i++) CrcTemp.dwords = CrcTemp.dwords + ICMP_PK.words.wordbuf[i]; while(CrcTemp.words.high > 0) CrcTemp.dwords = (uint32)(CrcTemp.words.high + CrcTemp.words.low); CrcTemp.words.low = 0xffff - CrcTemp.words.low; return (CrcTemp.words.low); } /***************************************************************************************** 函數(shù)名稱: uint8 mE_ICMP_SEND_FRAME(uint8 TYPE,uint8 OPTION,uint8 * SOUR_IP,uint8 * DEST_IP,uint8 * REC_FRAME) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 處理ICMP錯(cuò)誤包 輸入?yún)?shù): uint8 TYPE: 類型 uint8 OPTION: 方式 uint8 * SOUR_IP: 源IP uint8 * DEST_IP: 目標(biāo)IP uint8 * REC_FRAME: 數(shù)據(jù) 輸出參數(shù): &nbs |
|
| 10樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:08:00 發(fā)布:
IP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_IP.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: IP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_IP_H // 頭文件保護(hù) #define mE_IP_H // 頭文件保護(hù) #ifdef mE_IP_GLOBALS // 定義全局變量 #define mE_IP_EXT // 內(nèi)部變量 #else #define mE_IP_EXT extern // 外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: PPP協(xié)議報(bào)文類型 其它說明: *****************************************************************************************/ #define mE_PPP_TCP 0x06 // TCP 類型 #define mE_PPP_UDP 0x11 // UDP 類型 #define mE_PPP_ICMP 0x01 // ICMP類型 /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 4字節(jié)結(jié)構(gòu) 其它說明: 數(shù)據(jù)校驗(yàn)計(jì)算 *****************************************************************************************/ typedef union __mE_WORDS_CRC{ uint32 dwords; struct {uint16 low; uint16 high; }words; struct {uint8 byte0;uint8 byte1;uint8 byte2;uint8 byte3;}bytes; }mE_WORDS_CRC; /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 其它說明: IP報(bào)頭結(jié)構(gòu) 版本: 4BIT位 IP報(bào)頭長度: 4BIT位,為4的倍數(shù),一般是5*4=20 服務(wù)類型: 傳輸?shù)姆⻊?wù)質(zhì)量(速度、穩(wěn)定、可靠性) 總長度: IP報(bào)頭+有效負(fù)載 標(biāo)識(shí)符: IP報(bào)號(hào)碼 標(biāo)志: 3BIT位 分段偏移量: 13BIT位,分段時(shí)使用 生存時(shí)間: 生存周期,也就是轉(zhuǎn)發(fā)最大次數(shù) 協(xié)議: TCP-6、UDP-17、ICMP-1、IGMP-2 信息頭校驗(yàn)和: 僅檢查IP報(bào)頭 源IP: 發(fā)送方 目的IP: 接收方 IP選項(xiàng)和填充字符: 長度是4個(gè)字節(jié)的倍數(shù),最多40字節(jié),一般是0字節(jié) *****************************************************************************************/ /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 20字節(jié) 其它說明: IP報(bào)頭結(jié)構(gòu) *****************************************************************************************/ typedef struct __mE_IP_HEAD{ uint8 VerandIphLen; // 版本與頭長度 uint8 ServerType; &n |
|
| 11樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:10:00 發(fā)布:
IP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_IP.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: IP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_IP_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_IP_CREATE_HEAD_CRC(uint8 * IP_HEAD) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 產(chǎn)生IP首部的校驗(yàn)和 輸入?yún)?shù): uint8 *IP_HEAD: IP報(bào)頭的指針 輸出參數(shù): 16位的校驗(yàn)和 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: IP報(bào)頭結(jié)構(gòu)為20個(gè)字節(jié) 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_IP_CREATE_HEAD_CRC(uint8 * IP_HEAD) { uint8 i; mE_WORDS_CRC CrcTemp; CrcTemp.dwords = 0; for(i=0;i<10;i++) { CrcTemp.dwords = CrcTemp.dwords+((uint32)IP_HEAD[2*i]<<8)+(uint32)IP_HEAD[2*i+1]; } while(CrcTemp.words.high > 0) { CrcTemp.dwords = (uint32)(CrcTemp.words.high+CrcTemp.words.low); } CrcTemp.words.low = 0xffff - CrcTemp.words.low; return (CrcTemp.words.low); } /***************************************************************************************** 函數(shù)名稱: uint8 mE_IP_SEND_FRAME(struct _pkst * TXD_DATA,uint8 * DEST_IP,uint8 * SOUR_IP,uint8 PROTOCOL) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 發(fā)送IP包 輸入?yún)?shù): struct _pkst * TXD_DATA: 發(fā)送數(shù)據(jù)結(jié)構(gòu)指針 uint8 * DEST_IP: 目標(biāo)IP地址 uint8 * SOUR_IP: 源IP地址 uint8 PROTOCOL: 下一層協(xié)議,例如TCP協(xié)議或UDP協(xié)議 輸出參數(shù): 0: 發(fā)送IP包成功 1: 發(fā)送IP包失敗 2: 源IP不是自身IP,不做數(shù)據(jù)處理 3: 沒有MAC,發(fā)送不成功 4: 沒有申請到發(fā)送權(quán) 函數(shù)扇出清單: 函數(shù)扇入清單: mE_ETHERNET_SEND_PACKED(); 用到的公共資源: 其它說明: IP協(xié)議層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_IP_SEND_FRAME(struct _pkst * TXD_DATA,uint8 * DEST_IP,uint8 * SOUR_IP,uint8 PROTOCOL) { uint8 Ip_Head_Uint8[20]; uint8 error,result; uint8 NETWORK_CARD; mE_IP_CRC Ip_Head; static uint16 Ip_Frame_Index = 1; struct _pkst TxdIpData; // 判斷源IP是不是自己的 for(NETWORK_CARD=0;NETWORK_CARD<mE_MAX_NET_WORK_CARD;NETWORK_CARD++) // 判斷源IP是不是自己 { if(mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[0] == SOUR_IP[0]) if(mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[1] == SOUR_IP[1]) if(mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[2] == SOUR_IP[2]) if(mE_NETWORK_CARD_PORT[NETWORK_CARD].MY_IP[3] == SOUR_IP[3]) break; } // |
|
| 12樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:11:00 發(fā)布:
UDP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_UDP.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: UDP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_UDP_H // 頭文件保護(hù) #define mE_UDP_H // 頭文件保護(hù) #ifdef mE_UDP_GLOBALS // 定義全局變量 #define mE_UDP_EXT // 定義內(nèi)部變量 #else #define mE_UDP_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: UDP偽報(bào)頭數(shù)據(jù) 其它說明: 不被發(fā)送 *****************************************************************************************/ typedef struct __mE_UDP_HEAD{ uint8 SourceIp[4]; // 源IP uint8 DestId[4]; // 目的IP uint8 Reserve; // 未定義 uint8 NextProtocal; // 下一層協(xié)議 uint16 TotalLen; // 長度 }mE_UDP_HEAD; /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: UDP報(bào)文數(shù)據(jù) 其它說明: 報(bào)頭8字節(jié) *****************************************************************************************/ typedef struct __mE_UDP_DATA{ uint16 SourcePort; // 源端口 uint16 DestPort; // 目的端口 uint16 Length; // 長度UDP頭+數(shù)據(jù) uint16 Crc; // 校驗(yàn)和,包括偽頭部,UDP頭部,數(shù)據(jù) uint8 UDPdata[mE_MAX_UDP_DATA]; // UDP數(shù)據(jù) }mE_UDP_DATA; /******************************************************************************** |
|
| 13樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:12:00 發(fā)布:
UDP協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_UDP.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: UDP協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_UDP_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_UDP_CREATE_HEAD_CRC(uint8 *check,uint16 length) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 計(jì)算校驗(yàn)和 輸入?yún)?shù): uint8 *check: 被校驗(yàn)數(shù)據(jù)起始地址 輸出參數(shù): uint16 length: 被校驗(yàn)數(shù)據(jù)長度,單位字 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: UDP協(xié)議層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_UDP_CREATE_HEAD_CRC(uint8 *check,uint16 length) { uint32 sum = 0, i; for (i=0;i<(length)/2;i++) // 16位計(jì)算 { sum = sum + ((uint32)check[2*i]<<8)+(uint32)check[2*i+1]; } if(length&0x0001) // 長度為奇數(shù)個(gè)時(shí),要進(jìn)行該操作 { sum = sum + ((uint32)check[2*i]<<8); } sum = (sum&0xffff)+((sum>>16)&0xffff); // 高16位和低16位相加 if(sum & 0xffff0000) // 表示有進(jìn)位 { sum++; } return ((uint16)(~((sum)&0xffff))); // 數(shù)據(jù)取反 } /***************************************************************************************** 函數(shù)名稱: uint8 mE_UDP_RECE_FRAME(mE_IP_RECE_PTR * UDP_RECE_FRAME) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: UDP解包 輸入?yún)?shù): uint8 * Ip: IP報(bào)頭的指針 輸出參數(shù): 0: 本地沒有端口號(hào)與對方發(fā)送數(shù)據(jù)端口號(hào)對應(yīng) 1: 套接字里沒有空緩沖區(qū)接收數(shù)據(jù) 2: 數(shù)據(jù)入緩沖區(qū),發(fā)出信號(hào)量 函數(shù)扇出清單: 函數(shù)扇入清單: mE_ICMP_SEND_FRAME(); 用到的公共資源: 其它說明: UDP協(xié)議層,使用報(bào)頭結(jié)構(gòu) 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_UDP_RECE_FRAME(mE_IP_RECE_PTR * RECE_FRAME) { uint8 i,j; static uint8 mE_UDP_RECE_INDEX = 0; // 搬移數(shù)據(jù) OS_ENTER_CRITICAL(); memcpy(&(mE_UDP_RECE_STRUCTS[mE_UDP_RECE_INDEX]),(* RECE_FRAME).Rec_Data_Ptr,(* RECE_FRAME).Length); OS_EXIT_CRITICAL(); // 高8位與低8位交換 mE_UDP_RECE_STRUCTS[mE_UDP_RECE_INDEX].DestPort = mE_CRC_SWAP_INT16(mE_UDP_RECE_STRUCTS[mE_UDP_RECE_INDEX].DestPort); // 有可能組播,是否有對應(yīng)的端口號(hào)與對方一樣 for(i=0;i<mE_MAX_UDP_LINKS;i++) { if(mE_UDP_RECE_SOCKETS[i].My_Port == mE_UDP_RECE_STRUCTS[mE_UDP_RECE_INDEX].DestPort) | |
| 14樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:14:00 發(fā)布:
定時(shí)器 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TIMER.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: 定時(shí)器 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_TIMER_H // 頭文件保護(hù) #define mE_TIMER_H // 頭文件保護(hù) #ifdef mE_TIMER_GLOBALS // 定義全局變量 #define mE_TIMER_EXT // 定義內(nèi)部變量 #else #define mE_TIMER_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 刷新ARP表生存時(shí)間 其它說明: *****************************************************************************************/ mE_TIMER_EXT void mE_TIMER_ARP_UPDATE(void); #endif /***************************************************************************************** ********************************END OF FILE********************************************* *****************************************************************************************/ |
|
| 15樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:15:00 發(fā)布:
定時(shí)器 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TIMER.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 定時(shí)器 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_TIMER_GLOBALS // 包含進(jìn)全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint8 mE_TIMER_ARP_UPDATE(void) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 時(shí)間刷新ARP表 輸入?yún)?shù): 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 一秒定時(shí)器 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ void mE_TIMER_ARP_UPDATE(void) { uint8 index,NETWORK_CARD; OS_ENTER_CRITICAL(); for(NETWORK_CARD=0;NETWORK_CARD<mE_MAX_NET_WORK_CARD;NETWORK_CARD++) { for(index=0;index<mE_MAX_ARP_TERM;index++) { if(mE_NETWORK_CARD_PORT[NETWORK_CARD].ARP_TERM[index].TTL > 0) mE_NETWORK_CARD_PORT[NETWORK_CARD].ARP_TERM[index].TTL--; } if(mE_NETWORK_CARD_PORT[NETWORK_CARD].GATEWAY_IP_TTL > 0) mE_NETWORK_CARD_PORT[NETWORK_CARD].GATEWAY_IP_TTL--; } OS_EXIT_CRITICAL(); } /***************************************************************************************** ********************************END OF FILE********************************************* *****************************************************************************************/ |
|
| 16樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:16:00 發(fā)布:
數(shù)據(jù)變換處理 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TRADE.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: 數(shù)據(jù)變換處理 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_TRADE_H // 頭文件保護(hù) #define mE_TRADE_H // 頭文件保護(hù) #ifdef mE_TRADE_GLOBALS // 定義全局變量 #define mE_TRADE_EXT // 定義內(nèi)部變量 #else #define mE_TRADE_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 程序應(yīng)用接口 其它說明: *****************************************************************************************/ mE_TRADE_EXT uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE); // 格式轉(zhuǎn)換 #endif /***************************************************************************************** ********************************END OF FILE********************************************* *****************************************************************************************/ |
|
| 17樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:17:00 發(fā)布:
數(shù)據(jù)校驗(yàn)協(xié)議層 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_CRC.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 數(shù)據(jù)校驗(yàn)協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_TRADE_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 16位數(shù)據(jù)高、低8位交換 輸入?yún)?shù): uint16 SWAP_VALUE: 16位數(shù)據(jù) 輸出參數(shù): 16位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE) { uint16 TEMP; TEMP = (SWAP_VALUE & 0xff00) >> 8; SWAP_VALUE = (SWAP_VALUE & 0x00ff) << 8; return (SWAP_VALUE + TEMP); } /***************************************************************************************** 函數(shù)名稱: uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 32位數(shù)據(jù)交換 輸入?yún)?shù): uint32 SWAP_VALUE: 32位數(shù)據(jù) 輸出參數(shù): 32位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE) { mE_WORDS_CRC TEMP132,TEMP232; TEMP232.dwords = SWAP_VALUE; TEMP132.bytes.byte0 = TEMP232.bytes.byte3; TEMP132.bytes.byte1 = TEMP232.bytes.byte2; TEMP132.bytes.byte2 = TEMP232.bytes.byte1; TEMP132.bytes.byte3 = TEMP232.bytes.byte0; return (TEMP132.dwords); } /***************************************************************************************** 函數(shù)名稱: uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 二個(gè)8位的組成16位的 輸入?yún)?shù): uint8 * SWAP_VALUE: 二個(gè)8位的數(shù)據(jù) 輸出參數(shù): 16位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE) { uint16 TEMP16; TEMP16 = ((uint16)(SWAP_VALUE[0])) << 8; TEMP16 = TEMP16 + (uint16)(SWAP_VALUE[1]); return (TEMP16); } /***************************************************************************************** 函數(shù)名稱: uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 四個(gè)8位組成32位 輸入?yún)?shù): uint8 * SWAP_VALUE: 4個(gè)8位數(shù)據(jù) 輸出參數(shù): 32位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE) { uint32 TEMP32; TEMP32 = ((uint32)(SWAP_VALUE[0])) << 24; TEMP32 = TEMP32 + (((uint32)(SWAP_VALUE[1])) << 16); TEMP32 = TEMP32 + (((uint32)(SWAP_VALUE[2])) << 8); TEMP32 = TEMP32 + (uint32)(SWAP_VALUE[3]); & |
|
| 18樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:18:00 發(fā)布:
SOCKET接口 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_SOCKET.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: SOCKET接口 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_SOCKET_H // 頭文件保護(hù) #define mE_SOCKET_H // 頭文件保護(hù) #ifdef mE_SOCKET_GLOBALS // 定義全局變量 #define mE_SOCKET_EXT // 定義內(nèi)部變量 #else #define mE_SOCKET_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: TCPIP參數(shù) 其它說明: *****************************************************************************************/ #define mE_PF_INET 0 // 類型 #define mE_AF_INET 1 // 類型 #define mE_SOCKET_STREAM 0 // 通信類型 #define mE_SOCKET_DGRAM 1 // 通信類型 #define mE_TCP_PROTOCOL 0 // TCP協(xié)議類型 #define mE_UDP_PROTOCOL 1 // UDP協(xié)議類型 #define mE_INVALID_SOCKET 0xFF // SOCKET創(chuàng)建不成功值 #define mE_INVALID_BIND 0xFF // 綁定失敗 #define mE_PARA_IP 1 // IP參數(shù) #define mE_PARA_MAC 2 // 物理參數(shù) #define mE_PARA_MARK 3 // 掩碼參數(shù) #define mE_PARA_GATEWAY 4 // 網(wǎng)關(guān)參數(shù) /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 套接字的數(shù)據(jù)結(jié)構(gòu) 其它說明: *****************************************************************************************/ typedef struct __mE_SOCKETS{ uint8 &nbs |
|
| 19樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:22:00 發(fā)布:
SOCKET接口 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_SOCKET.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: SOCKET接口 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_SOCKET_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 版本信息 其它說明: *****************************************************************************************/ CHAR * mE_TCPIP_VERSIONS = "1.1.3"; /***************************************************************************************** 函數(shù)名稱: uint8 mE_SOCKET_INITIALIZE(void) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 初始化SOCKET 輸入?yún)?shù): 輸出參數(shù): 0: 成功 1: 失敗 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 影舞者 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_SOCKET_INITIALIZE(void) { uint8 index; for(index=0;index<mE_MAX_SOCKET_LINKS;index++) { mE_TCPIP_SOCKETS[index].State = 0; // 使用狀態(tài) mE_TCPIP_SOCKETS[index].Protocol = 0xff; // 協(xié)議類型 mE_TCPIP_SOCKETS[index].AF = 0xff; // 備用 mE_TCPIP_SOCKETS[index].Type = 0xff; // 服務(wù)類型 mE_TCPIP_SOCKETS[index].My_Ip[0] = 0xff; // IP地址 mE_TCPIP_SOCKETS[index].My_Ip[1] = 0xff; mE_TCPIP_SOCKETS[index].My_Ip[2] = 0xff; mE_TCPIP_SOCKETS[index].My_Ip[3] = 0xff; mE_TCPIP_SOCKETS[index].My_Port = 0; // 端口 mE_TCPIP_SOCKETS[index].Max_Tcp_Queue = 0; // TCP端口最大連接參數(shù) // mE_TCPIP_SOCKETS[index].Tcp_Queue[i] = 0xFF; // 連接狀態(tài)指針 mE_TCPIP_SOCKETS[index].Udp_Queue = mE_MAX_UDP_LINKS; // 指向UDP收緩沖區(qū) } return 0; } /***************************************************************************************** 函數(shù)名稱: uint8 mE_TCPIP_INITIALIZE(void) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 以太網(wǎng)初始化 輸入?yún)?shù): 輸出參數(shù): 0: 初始化成功 1: 初始化失敗 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 影舞者 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_TCPIP_INITIALIZE(void) { #if (mE_TCPIP_DEBUG_STATE == 1) mE_DEBUG_STRING("\n TCPIP V4 以太網(wǎng)初始化",1); #endif mE_IP_SEND_POWERS = OSSemCreate(1) |
|
| 20樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:23:00 發(fā)布:
SOCKET接口 /***************************************************************************************** 函數(shù)名稱: uint16 mE_SEND(uint8 NUM,uint8 * BUF,uint16 LEN,uint16 FLAGS) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: TCP端口發(fā)送數(shù)據(jù) 輸入?yún)?shù): uint8 NUM: mE_TCP_SOCKET索引 uint8 * BUF: 數(shù)據(jù) uint16 LEN: 發(fā)送長度 uint16 FLAGS: 備用 輸出參數(shù): 0: 失敗 LEN: 成功 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: SOCKET接口 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_SEND(uint8 NUM,uint8 * BUF,uint16 LEN,uint16 FLAGS) { uint8 err,i; uint16 TEMP; struct _pkst TxdData; if((mE_TCP_SOCKET[NUM].Dest_Max_Seg_Size >= LEN)&&(mE_TCP_SOCKET[NUM].State == mE_TCP_STATE_ESTABLISHED)) { mE_TCP_SOCKET[NUM].SenPassSeq = mE_TCP_SOCKET[NUM].SenFutureSeq; mE_TCP_SOCKET[NUM].SenPassAck = mE_TCP_SOCKET[NUM].SenPassAck; mE_TCP_SOCKET[NUM].SenFutureSeq = mE_TCP_SOCKET[NUM].SenPassSeq + LEN; mE_TCP_SOCKET[NUM].RecFutureAck = mE_TCP_SOCKET[NUM].SenPassSeq + LEN; mE_TCP_HEAD_HANDLE(NUM,0x5000 + mE_TCP_PSH + mE_TCP_ACK); // headlength 0x20, mE_TCP_SOCKET[NUM].TcpDHeadUint8[2] = ((LEN+20)&0XFF00)>>8; mE_TCP_SOCKET[NUM].TcpDHeadUint8[3] = (LEN+20)&0X00FF; OS_ENTER_CRITICAL(); memcpy(&(mE_TCP_SOCKET[NUM].TcpHeadUint8[20]),BUF,LEN); OS_EXIT_CRITICAL(); TEMP = LEN + 32; TEMP = mE_TCP_CHECKSUM1(NUM,TEMP); // 12+20 mE_TCP_SOCKET[NUM].TcpHeadUint8[16] = (TEMP & 0xff00)>>8; mE_TCP_SOCKET[NUM].TcpHeadUint8[17] = TEMP & 0x00ff; TxdData.STPTR = NULL; TxdData.LENGTH = 20 + LEN; TxdData.DAPTR = mE_TCP_SOCKET[NUM].TcpHeadUint8; for(i=0;i<mE_MAX_TCP_SEND;i++) { if(mE_IP_SEND_FRAME(&TxdData,mE_TCP_SOCKET[NUM].Dest_Ip,mE_TCP_SOCKET[NUM].My_Ip,6)) { mE_TCP_SOCKET[NUM].StaSem = mE_TCP_SOCKET[NUM].StaSem | 0x01; OSSemPend(TCP_SEM_SEND_SUCESS[NUM],100,&err); if((err == OS_NO_ERR)) // 等待信號(hào) return LEN; if(mE_TCP_SOCKET[NUM].State != mE_TCP_STATE_ESTABLISHED) return 0; } } } return 0; } /***************************************************************************************** 函數(shù)名稱: uint16 mE_RECV(uint8 NUM,uint8 * BUF,uint16 LEN,uint16 FLAGS) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: TCP端口接收數(shù)據(jù) 輸入?yún)?shù): uint8 NUM: mE_TCP_SOCKET索引 uint8 * BUF: 數(shù)據(jù) uint16 LEN: 發(fā)送長度 uint16 FLAGS: 備用 輸出參數(shù): 接收數(shù)據(jù)長度 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: SOCKET接口 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *************************************** |
|
| 21樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:27:00 發(fā)布:
PPP #include "mE_LCP.H" // 連接文件 #include "mE_NCP.H" // 網(wǎng)絡(luò)文件 #include "mE_PAP.H" // 認(rèn)證文件 #include "mE_PPP.H" // 狀態(tài)機(jī)文件 #include "mE_TFTP.H" // TFTP接口 #include "mE_CHAP.H" // 認(rèn)證文件 #include "mE_IPCP.H" // 網(wǎng)絡(luò)文件 #include "mE_MODEM.H" // MODEM文件 以上為PPP協(xié)議,版權(quán)問題,恕不能發(fā)布 |
|
| 22樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:29:00 發(fā)布:
說過了 只是學(xué)習(xí)用,版本不是很高,還有一些不合理的東西, 在條件苛求下可能會(huì)出現(xiàn)些問題,在寬條件下,不成 問題。有問題經(jīng)過閣下的大腦先分析原理 |
|
| 23樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/29 16:41:00 發(fā)布:
祝大家好運(yùn) 相信過了幾個(gè)星期,你就完全領(lǐng)會(huì)到的周立功IP的精神所在. 并且跳出他的精神所在,能修改出屬于自己網(wǎng)絡(luò)的IP協(xié)議棧 |
|
| 24樓: | >>參與討論 |
| 作者: eleven11 于 2006/3/29 22:07:00 發(fā)布:
樓主你這樣還不如放某個(gè)部分的補(bǔ)丁 直接粘貼復(fù)制原來的部分,如果有人真想了解tcp的細(xì)節(jié)的話,我是推薦直接看zlip的,zlip是從lwip簡化的,lwip是從BSD來的,BSD是完整的實(shí)現(xiàn)了tcp的協(xié)議棧,真要debug一個(gè)別人的tcp,真的不如一開始直接看一個(gè)簡單成熟完整的例子,這是我血的教訓(xùn),當(dāng)然應(yīng)用領(lǐng)域不同,tcp的要求也不同,在局域網(wǎng)里面不大可能會(huì)丟包,因此對tcp的流控重傳算法并不怎么在意,某些tcp只是過一定的時(shí)間重發(fā)一次或是按照{(diào)1,2,4,8,16,32,64}的時(shí)間來進(jìn)行重發(fā),但在廣域網(wǎng),只有擁有相對完整的算法控制才能有效的保證tcp的質(zhì)量,這些算法都是幾十年實(shí)踐得出的理論, 我所以推薦zlip,不僅是因?yàn)樗鄬?shí)現(xiàn)了比較完整的算法,而且代碼質(zhì)量也很好,所有的大型軟件說到底都是用結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)逆湵韥磉M(jìn)行維護(hù),zlgip的DEMO版本有2個(gè)主要的缺點(diǎn),一個(gè)是沒有比較完整的流控重傳算法,應(yīng)用領(lǐng)域受限,一個(gè)就是關(guān)中斷太多太長,應(yīng)該盡量避免關(guān)中斷,關(guān)中斷可是連基準(zhǔn)定時(shí)中斷都不被響應(yīng)的,所以我放棄修改他 我可能話說多了,我只是感到tcp我走了很多彎路,而且可能有些人仍會(huì)走同樣的彎路,如果我一開始就走正確的學(xué)習(xí)道路,我學(xué)習(xí)tcp的時(shí)間至少可以少走2個(gè)月的彎路, * - 本貼最后修改時(shí)間:2006-3-31 9:02:29 修改者:eleven11 |
|
| 25樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/30 8:42:00 發(fā)布:
我現(xiàn)在也是在做LINUX的網(wǎng)絡(luò),深感開源的好處才發(fā)布的 我說過了,只是給想學(xué)習(xí)原理的人看,不是直接應(yīng)用, 如果說ZLGIP和我修改的IP比較起來,我相信我的更直 觀更好理解,我的注釋比較多,大部是重要點(diǎn)。只是 二個(gè)的協(xié)議棧精神是差不多。 其實(shí)不管哪個(gè)TCPIP,原理都是差不多的,只要掌握它 分層結(jié)構(gòu),都不會(huì)很難,我原先是用ZLGIP入門的,然 后看了UIP,發(fā)現(xiàn)它們各有各個(gè)特色,ZLIP分層不錯(cuò), 出問題很好調(diào)試,UIP很節(jié)約內(nèi)存,但只是一個(gè)沒有經(jīng) 過嚴(yán)格測試的東西,我在用它做PPP的時(shí)候花了我一個(gè) 月,后來不得不放棄,自己在ZLGIP上重寫PPP,只用 了半個(gè)月時(shí)間。 因?yàn)槭菍W(xué)習(xí)用,所以版本不是很高,TCP沒有貼出來, 因?yàn)樯婕鞍鏅?quán)問題,我不想惹朋友的麻煩,呵呵。 現(xiàn)在在研究LINUX系統(tǒng),感覺異常郁悶 |
|
| 26樓: | >>參與討論 |
| 作者: liaisong 于 2006/3/31 8:40:00 發(fā)布:
兄弟上還差mE_TCP.C和mE_TCPIP.H和mE_TRADE.C和mE_CRC.H 我昨天整理了下,上面的文件如以下: mE_HARDWARE.C mE_ETHERNET.C mE_ARP.C mE_ICMP.C mE_IP.C mE_UDP.C mE_TIMER.C mE_CRC.C mE_SOCKET.C mE_HARDWARE.H mE_ETHERNET.H mE_ARP.H mE_ICMP.H mE_IP.H mE_UDP.H mE_TIMER.H mE_TRADE.H mE_SOCKET.H 編譯下來有200多err. 希望兄臺(tái)能否貼上來.或者給發(fā)一個(gè)包那就更方便了 liaisong569@sina.com 想學(xué)TCP/IP能夠得到高人幫助肯定能省下不少時(shí)間 再此先謝謝你了. |
|
| 27樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/31 11:15:00 發(fā)布:
沒有mE_CRC文件,只有mE_TRADE文件 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TRADE.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: 數(shù)據(jù)校驗(yàn)協(xié)議層 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_TRADE_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 16位數(shù)據(jù)高、低8位交換 輸入?yún)?shù): uint16 SWAP_VALUE: 16位數(shù)據(jù) 輸出參數(shù): 16位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE) { uint16 TEMP; TEMP = (SWAP_VALUE & 0xff00) >> 8; SWAP_VALUE = (SWAP_VALUE & 0x00ff) << 8; return (SWAP_VALUE + TEMP); } /***************************************************************************************** 函數(shù)名稱: uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 32位數(shù)據(jù)交換 輸入?yún)?shù): uint32 SWAP_VALUE: 32位數(shù)據(jù) 輸出參數(shù): 32位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE) { mE_WORDS_CRC TEMP132,TEMP232; TEMP232.dwords = SWAP_VALUE; TEMP132.bytes.byte0 = TEMP232.bytes.byte3; TEMP132.bytes.byte1 = TEMP232.bytes.byte2; TEMP132.bytes.byte2 = TEMP232.bytes.byte1; TEMP132.bytes.byte3 = TEMP232.bytes.byte0; return (TEMP132.dwords); } /***************************************************************************************** 函數(shù)名稱: uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 二個(gè)8位的組成16位的 輸入?yún)?shù): uint8 * SWAP_VALUE: 二個(gè)8位的數(shù)據(jù) 輸出參數(shù): 16位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE) { uint16 TEMP16; TEMP16 = ((uint16)(SWAP_VALUE[0])) << 8; TEMP16 = TEMP16 + (uint16)(SWAP_VALUE[1]); return (TEMP16); } /***************************************************************************************** 函數(shù)名稱: uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 四個(gè)8位組成32位 輸入?yún)?shù): uint8 * SWAP_VALUE: 4個(gè)8位數(shù)據(jù) 輸出參數(shù): 32位數(shù)據(jù) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: 硬件驅(qū)動(dòng)層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE) { uint32 TEMP32; TEMP32 = ((uint32)(SWAP_VALUE[0])) << 24; TEMP32 = TEMP32 + (((uint32)(SWAP_VALUE[1])) << 16); TEMP32 = TEMP32 + (((uint32)(SWAP_VALUE[2])) << 8); TEMP32 = TEMP32 + (uint32)(SWAP_VALUE |
|
| 28樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/31 11:16:00 發(fā)布:
是頭文件說明弄錯(cuò)了,低版本的沒有改過來 /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TRADE.H 生成日期: 2005.1.1 作者: 影舞者 功能說明: 數(shù)據(jù)變換處理 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #ifndef mE_TRADE_H // 頭文件保護(hù) #define mE_TRADE_H // 頭文件保護(hù) #ifdef mE_TRADE_GLOBALS // 定義全局變量 #define mE_TRADE_EXT // 定義內(nèi)部變量 #else #define mE_TRADE_EXT extern // 定義外部變量 #endif /***************************************************************************************** 版權(quán)所有: 影舞者 版本號(hào): 1.0.1 生成日期: 2005.1.1 功能說明: 程序應(yīng)用接口 其它說明: *****************************************************************************************/ mE_TRADE_EXT uint16 mE_CRC_SWAP_INT16(uint16 SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint32 mE_CRC_SWAP_INT32(uint32 SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint16 mE_CRC_CHAR2_TO_INT16(uint8 * SWAP_VALUE); // 格式轉(zhuǎn)換 mE_TRADE_EXT uint32 mE_CRC_CHAR4_TO_INT32(uint8 * SWAP_VALUE); // 格式轉(zhuǎn)換 #endif /***************************************************************************************** ********************************END OF FILE********************************************* *****************************************************************************************/ |
|
| 29樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/31 11:25:00 發(fā)布:
TCP /***************************************************************************************** 版權(quán)所有: XXXXXXXXXXXXXXXXXXXXXXXXX 版本號(hào): 1.0.1 文件名: mE_TCP.C 生成日期: 2005.1.1 作者: 影舞者 功能說明: TCP層協(xié)議 其它說明: 所屬文件關(guān)系: 本文件為工程規(guī)約代碼文件 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ #define mE_TCP_GLOBALS // 定義全局變量 #include "mE_TCPIP.H" // 以太網(wǎng)文件 /***************************************************************************************** 函數(shù)名稱: uint16 mE_TCP_CREATE_HEAD_CRC(uint8 *check,uint16 length) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 計(jì)算校驗(yàn)和 輸入?yún)?shù): uint8 *check: 被校驗(yàn)數(shù)據(jù)起始地址 輸出參數(shù): uint16 length: 被校驗(yàn)數(shù)據(jù)長度,單位字 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: UDP協(xié)議層 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_TCP_CREATE_HEAD_CRC(uint8 *check,uint16 length) { uint32 sum = 0, i; for (i=0;i<(length)/2;i++) // 16位計(jì)算 { sum = sum + ((uint32)check[2*i]<<8)+(uint32)check[2*i+1]; } if(length&0x0001) // 長度為奇數(shù)個(gè)時(shí),要進(jìn)行該操作 { sum = sum + ((uint32)check[2*i]<<8); } sum = (sum&0xffff)+((sum>>16)&0xffff); // 高16位和低16位相加 if(sum & 0xffff0000) // 表示有進(jìn)位 { sum++; } return ((uint16)(~((sum)&0xffff))); // 數(shù)據(jù)取反 } /***************************************************************************************** 函數(shù)名稱: uint16 mE_TCP_CHECKSUM1(uint8 num,uint16 length) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 計(jì)算校驗(yàn)和 輸入?yún)?shù): uint8 num: 被校驗(yàn)數(shù)據(jù)起始地址 uint16 length: 被校驗(yàn)數(shù)據(jù)長度,單位字 輸出參數(shù): ~((sum)&0xffff)) 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: TCP層協(xié)議 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint16 mE_TCP_CHECKSUM1(uint8 num,uint16 length) { uint16 i; uint32 sum = 0; for (i=0;i<6;i++) { sum = sum + ((uint32)mE_TCP_SOCKET[num].TcpDHeadUint8[2*i]<<8) + (uint32)mE_TCP_SOCKET[num].TcpDHeadUint8[2*i+1]; } length = length-12; i = 0; while(i<(length/2)) { sum = sum + ((uint32)mE_TCP_SOCKET[num].TcpHeadUint8[2*i]<<8) + (uint32)mE_TCP_SOCKET[num].TcpHeadUint8[2*i+1]; i++; } if(length&0x0001) // 長度為奇數(shù)個(gè)時(shí),要進(jìn)行該操作 { sum = sum + (uint32)(mE_TCP_SOCKET[num].TcpH |
|
| 30樓: | >>參與討論 |
| 作者: local_mach 于 2006/3/31 11:26:00 發(fā)布:
TCP /***************************************************************************************** 函數(shù)名稱: void mE_TCP_CLOSE_WAIT(uint8 num) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: TCP等待關(guān)閉狀態(tài)的處理 輸入?yún)?shù): 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: TCP層協(xié)議 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ void mE_TCP_CLOSE_WAIT(uint8 num) { uint16 i; return; mE_TCP_SOCKET[num].Send_Next++; i = mE_TCP_PACKED.Tcp_Data.SourcePort; mE_TCP_PACKED.Tcp_Data.SourcePort = mE_TCP_PACKED.Tcp_Data.DestPort; mE_TCP_PACKED.Tcp_Data.DestPort = i; mE_TCP_PACKED.Tcp_Data.SeqNum = mE_TCP_SOCKET[num].Send_Next; mE_TCP_PACKED.Tcp_Data.AckNum = mE_TCP_SOCKET[num].Rcv_Next; mE_TCP_PACKED.Tcp_Data.Control = mE_TCP_FIN+mE_TCP_ACK; mE_TCP_SOCKET[num].Sent_UnAck = mE_TCP_SOCKET[num].Send_Next; mE_TCP_SOCKET[num].State = mE_TCP_STATE_CLOSED; mE_TCP_SOCKET[num].State = mE_TCP_STATE_LAST_ACK ; } /***************************************************************************************** 函數(shù)名稱: void mE_TCP_LAST_ACK(uint8 num) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: 接收到TCP_RST,TCP_SYN或TCP_ACK報(bào)文時(shí),關(guān)閉連接 輸入?yún)?shù): 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: TCP層協(xié)議 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ void mE_TCP_LAST_ACK(uint8 num) { if(mE_TCP_PACKED.Tcp_Data.Control&(mE_TCP_RST+mE_TCP_SYN+mE_TCP_ACK)) { mE_DELETE_SOCKET(num); // 對方不接受請求,關(guān)閉本地連接 } } /***************************************************************************************** 函數(shù)名稱: uint8 mE_TCP_ESTABLISHED(uint8 num) 版本號(hào): 1.0.1 生成日期: 2005.1.1 作者: 影舞者 功能說明: TCP通信狀態(tài) 輸入?yún)?shù): 輸出參數(shù): 函數(shù)扇出清單: 函數(shù)扇入清單: 用到的公共資源: 其它說明: TCP層協(xié)議 修改記錄: 記錄1: 修改者: 修改日期: 修改內(nèi)容: 修改原因: *****************************************************************************************/ uint8 mE_TCP_ESTABLISHED(uint8 num) { uint16 i,TEMP; struct _pkst TxdData; if(mE_TCP_PACKED.Tcp_Data.Control&(mE_TCP_RST+mE_TCP_SYN)) { mE_DELETE_SOCKET(num); return (0); } if(mE_TCP_PACKED.Tcp_Data.Control&(mE_TCP_FIN)) { mE_TCP_SOCKET[num].RecPassSeq = mE_TCP_PACKED.Tcp_Data.SeqNum; mE_TCP_SOCKET[num].RecPassAck = mE_TCP_PACKED.Tcp_Data.AckNum; mE_TCP_SOCKET[num].SenPassSeq = mE_TCP_SOCKET[num].RecPassAck; mE_TCP_SOCKET[num].SenPassAck = mE_TCP_SOCKET[num].RecPassSeq+1; mE_TCP_SOCKET[num].SenFutureSeq = mE_TCP_SOCKET[num].SenPassSeq; mE_TCP_SOCKET[num].RecFutureAck = mE_TCP_SOCKET[num].SenPassSeq+1; mE_TCP_HEAD_HANDLE(num ,0x5000 + mE_TCP_ACK); // headlength 0x20, mE_TCP_SOCKET[num].TcpDHeadUint8[2] = 0; mE_TCP_SOCKET[num].TcpDHeadUint8[3] = 20; mE_TCP_PACKED.Tcp_Head.TotalLen = 20; mE_TCP_PACKED.Tcp_Data.Crc = mE_TCP_CHECKSUM1(num,32); // 12+28 mE_TCP_SOCKET[num].TcpHeadUint8[16] = (mE_TCP_PACKED.Tcp_Data.Crc&0xff00)>>8; mE_TCP_SOCKET[num].TcpHeadUint8[17] = mE_TCP_PACKED.Tcp_Data.Crc&0x00ff; TxdData.STPTR = NULL; TxdData.LENGTH = 20; TxdData.DAPTR = mE_TCP_SOCKET[num].TcpHeadUint |
|
| 31樓: | >>參與討論 |
| 作者: liaisong 于 2006/3/31 11:45:00 發(fā)布:
收到謝謝你了.回去再試試. |
|
| 32樓: | >>參與討論 |
| 作者: hexenzhou 于 2006/4/1 8:04:00 發(fā)布:
! 好人呀,頂! |
|
| 33樓: | >>參與討論 |
| 作者: liwenz 于 2006/4/1 13:29:00 發(fā)布:
編這么多可要時(shí)間 |
|
| 34樓: | >>參與討論 |
| 作者: linsf 于 2006/4/2 20:58:00 發(fā)布:
頂一個(gè) 先保存再好好研究 |
|
| 35樓: | >>參與討論 |
| 作者: likee 于 2006/4/2 21:30:00 發(fā)布:
頂一下,不過暫時(shí)不知道拿來干什么用的. |
|
| 36樓: | >>參與討論 |
| 作者: galy 于 2006/4/3 12:53:00 發(fā)布:
大蝦,我也將做一個(gè)tcp/ip的產(chǎn)品. 可不知道如何下手,能不能打個(gè)包發(fā)給我galyhu@yahoo.com.cn 非常謝謝! |
|
| 37樓: | >>參與討論 |
| 作者: zusen 于 2006/4/3 14:19:00 發(fā)布:
樓主,我也在研究TCP/IP中 能用E_mail發(fā)一份給我嗎???zusen@21cn.com 多謝了,以后還請多多指教 |
|
| 38樓: | >>參與討論 |
| 作者: yezi00 于 2006/8/5 17:24:00 發(fā)布:
求助 最近在學(xué)習(xí)TCP/IP,希望得到摟主的幫助,如果可以的話,給我一個(gè)源碼包吧,好好學(xué)習(xí)下,郵箱:yinsebotao@163.com |
|
| 39樓: | >>參與討論 |
| 作者: liujun1898 于 2006/11/9 17:57:00 發(fā)布:
ppp 你寫的這個(gè)到底是不是完整的啊,我覺得和ppp有什么關(guān)系呢,你用的是網(wǎng)卡,不需要用ppp撥號(hào)的吧 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |