音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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
硬件層文件
/*****************************************************************************************
版權(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
硬件層文件
/*****************************************************************************************
版權(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
以太網(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
以太網(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
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
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
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
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
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
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
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
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
定時(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
定時(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
數(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
數(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
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
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
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
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
說過了
只是學(xué)習(xí)用,版本不是很高,還有一些不合理的東西,

在條件苛求下可能會(huì)出現(xiàn)些問題,在寬條件下,不成

問題。有問題經(jīng)過閣下的大腦先分析原理

23樓: >>參與討論
local_mach
祝大家好運(yùn)
相信過了幾個(gè)星期,你就完全領(lǐng)會(huì)到的周立功IP的精神所在.

并且跳出他的精神所在,能修改出屬于自己網(wǎng)絡(luò)的IP協(xié)議棧

24樓: >>參與討論
eleven11
樓主你這樣還不如放某個(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
我現(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
兄弟上還差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
沒有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
是頭文件說明弄錯(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
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
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
收到謝謝你了.回去再試試.
 
32樓: >>參與討論
hexenzhou
!
好人呀,頂!

33樓: >>參與討論
liwenz
編這么多可要時(shí)間
 
34樓: >>參與討論
linsf
頂一個(gè)
先保存再好好研究

35樓: >>參與討論
likee
頂一下,不過暫時(shí)不知道拿來干什么用的.
 
36樓: >>參與討論
galy
大蝦,我也將做一個(gè)tcp/ip的產(chǎn)品.
可不知道如何下手,能不能打個(gè)包發(fā)給我galyhu@yahoo.com.cn 非常謝謝!

37樓: >>參與討論
zusen
樓主,我也在研究TCP/IP中
能用E_mail發(fā)一份給我嗎???zusen@21cn.com 多謝了,以后還請多多指教

38樓: >>參與討論
yezi00
求助
最近在學(xué)習(xí)TCP/IP,希望得到摟主的幫助,如果可以的話,給我一個(gè)源碼包吧,好好學(xué)習(xí)下,郵箱:yinsebotao@163.com

39樓: >>參與討論
liujun1898
ppp
你寫的這個(gè)到底是不是完整的啊,我覺得和ppp有什么關(guān)系呢,你用的是網(wǎng)卡,不需要用ppp撥號(hào)的吧

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
周公,請教你們Easyarm2200套裝CD中隨附PPP軟件包問題
現(xiàn)在買2210有PPP軟件包,我們以前買的現(xiàn)在能補(bǔ)給嗎?
SmartARM2200的TFT顯示問題!
LPC2292在UCOSII操作系統(tǒng)看門狗的問題?
u-boot 移植到 smartarm 2200 ???
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)