亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ip.c

?? 單片機c語言程序設計100例--基于PIC+PROTEUS
?? C
字號:
/*********************************************************************
 *
 *                  PIC IP Module for Microchip TCP/IP Stack
 *
 *********************************************************************
 * FileName:        IP.C
 * Dependencies:    string.h
 *                  StackTsk.h
 *                  Helpers.h
 *                  IP.h
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
 * Complier:        Microchip C18 v3.02 or higher
 *					Microchip C30 v2.01 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * This software is owned by Microchip Technology Inc. ("Microchip") 
 * and is supplied to you for use exclusively as described in the 
 * associated software agreement.  This software is protected by 
 * software and other intellectual property laws.  Any use in 
 * violation of the software license may subject the user to criminal 
 * sanctions as well as civil liability.  Copyright 2006 Microchip
 * Technology Inc.  All rights reserved.
 *
 * This software is provided "AS IS."  MICROCHIP DISCLAIMS ALL 
 * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED 
 * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 
 * INFRINGEMENT.  Microchip shall in no event be liable for special, 
 * incidental, or consequential damages.
 *
 *
 * Author               Date    Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Nilesh Rajbharti     4/27/01 Original        (Rev 1.0)
 * Nilesh Rajbharti     2/9/02  Cleanup
 * Nilesh Rajbharti     5/22/02 Rev 2.0 (See version.log for detail)
 * Howard Schlunder		8/31/04	Beta Rev 0.9 (See version.log for detail)
 * Howard Schlunder		1/5/06	Improved DMA checksum efficiency
 ********************************************************************/

#include <string.h>

#include "..\Include\StackTsk.h"
#include "..\Include\Helpers.h"
#include "..\Include\MAC.h"
#include "..\Include\IP.h"

// This is left shifted by 4.  Actual value is 0x04.
#define IPv4                (0x40u)
#define IP_VERSION          IPv4

// IHL (Internet Header Length) is # of DWORDs in a header.
// Since, we do not support options, our IP header length will be
// minimum i.e. 20 bytes : IHL = 20 / 4 = 5.
#define IP_IHL              (0x05)

#define IP_SERVICE_NW_CTRL  (0x07)
#define IP_SERVICE_IN_CTRL  (0x06)
#define IP_SERVICE_ECP      (0x05)
#define IP_SERVICE_OVR      (0x04)
#define IP_SERVICE_FLASH    (0x03)
#define IP_SERVICE_IMM      (0x02)
#define IP_SERVICE_PRIOR    (0x01)
#define IP_SERVICE_ROUTINE  (0x00)

#define IP_SERVICE_N_DELAY  (0x00)
#define IP_SERCICE_L_DELAY  (0x08)
#define IP_SERVICE_N_THRPT  (0x00)
#define IP_SERVICE_H_THRPT  (0x10)
#define IP_SERVICE_N_RELIB  (0x00)
#define IP_SERVICE_H_RELIB  (0x20)

#define IP_SERVICE          (IP_SERVICE_ROUTINE | IP_SERVICE_N_DELAY)

#define MY_IP_TTL           (100)  // Time-To-Live in Seconds




static WORD _Identifier = 0;
static BYTE IPHeaderLen;


static void SwapIPHeader(IP_HEADER* h);




/*********************************************************************
 * Function:        BOOL IPGetHeader( IP_ADDR    *localIP,
 *                                    NODE_INFO  *remote,
 *                                    BYTE        *Protocol,
 *                                    WORD        *len)
 *
 * PreCondition:    MACGetHeader() == TRUE
 *
 * Input:           localIP     - Local node IP Address as received
 *                                in current IP header.
 *                                If this information is not required
 *                                caller may pass NULL value.
 *                  remote      - Remote node info
 *                  Protocol    - Current packet protocol
 *                  len         - Current packet data length
 *
 * Output:          TRUE, if valid packet was received
 *                  FALSE otherwise
 *
 * Side Effects:    None
 *
 * Note:            Only one IP message can be received.
 *                  Caller may not transmit and receive a message
 *                  at the same time.
 *
 ********************************************************************/
BOOL IPGetHeader(IP_ADDR *localIP,
                 NODE_INFO *remote,
                 BYTE *protocol,
                 WORD *len)
{
    WORD_VAL    CalcChecksum;
    IP_HEADER   header;

#if defined(NON_MCHP_MAC)
    WORD_VAL    ReceivedChecksum;
    WORD        checksums[2];
    BYTE        optionsLen;
#define MAX_OPTIONS_LEN     (40)            // As per RFC 791.
    BYTE        options[MAX_OPTIONS_LEN];
#endif

    // Read IP header.
    MACGetArray((BYTE*)&header, sizeof(header));

    // Make sure that this is an IPv4 packet.
    if ( (header.VersionIHL & 0xf0) != IP_VERSION )
    	return FALSE;

#if !defined(NON_MCHP_MAC)
	IPHeaderLen = (header.VersionIHL & 0x0f) << 2;
	
	// Validate the IP header.  If it is correct, the checksum 
	// will come out to 0x0000 (because the header contains a 
	// precomputed checksum).  A corrupt header will have a 
	// nonzero checksum.
	CalcChecksum.Val = MACCalcRxChecksum(0, IPHeaderLen);

	// Seek to the end of the IP header
	MACSetRxBuffer(IPHeaderLen);	

    if(CalcChecksum.Val)
#else
    
    // Calculate options length in this header, if there is any.
    // IHL is in terms of numbers of 32-bit DWORDs; i.e. actual
    // length is 4 times IHL.
    optionsLen = ((header.VersionIHL & 0x0f) << 2) - sizeof(header);

    // If there is any option(s), read it so that we can include them
    // in checksum calculation.
    if ( optionsLen > MAX_OPTIONS_LEN )
        return FALSE;

    if ( optionsLen > 0 )
        MACGetArray(options, optionsLen);

    // Save header checksum; clear it and recalculate it ourselves.
    ReceivedChecksum.Val = header.HeaderChecksum;
    header.HeaderChecksum = 0;

    // Calculate checksum of header including options bytes.
    checksums[0] = ~CalcIPChecksum((BYTE*)&header, sizeof(header));

    // Calculate Options checksum too, if they are present.
    if ( optionsLen > 0 )
        checksums[1] = ~CalcIPChecksum((BYTE*)options, optionsLen);
    else
        checksums[1] = 0;

    CalcChecksum.Val  = CalcIPChecksum((BYTE*)checksums,
                                            2 * sizeof(WORD));

    // Make sure that checksum is correct
    if ( ReceivedChecksum.Val != CalcChecksum.Val )
#endif
    {
        // Bad packet. The function caller will be notified by means of the FALSE 
        // return value and it should discard the packet.
        return FALSE;
    }

    // Network to host conversion.
    SwapIPHeader(&header);

    // If caller is intrested, return destination IP address
    // as seen in this IP header.
    if ( localIP )
        localIP->Val    = header.DestAddress.Val;

    remote->IPAddr.Val  = header.SourceAddress.Val;
    *protocol           = header.Protocol;
#if !defined(NON_MCHP_MAC)
    *len 				= header.TotalLength - IPHeaderLen;
#else
    *len                = header.TotalLength - optionsLen -
                            sizeof(header);
#endif                           

    return TRUE;
}




/*********************************************************************
 * Function: WORD IPPutHeader(NODE_INFO *remote,
 *           				  BYTE protocol,
 *                			  WORD len)
 *
 * PreCondition:    IPIsTxReady() == TRUE
 *
 * Input:           *remote     - Destination node address
 *                  protocol    - Current packet protocol
 *                  len         - Current packet data length
 *
 * Output:          (WORD)0
 *
 * Side Effects:    None
 *
 * Note:            Only one IP message can be transmitted at any
 *                  time.
 ********************************************************************/
WORD IPPutHeader(NODE_INFO *remote,
                 BYTE protocol,
                 WORD len)
{
    IP_HEADER   header;
    
    IPHeaderLen = sizeof(IP_HEADER);

    header.VersionIHL       = IP_VERSION | IP_IHL;
    header.TypeOfService    = IP_SERVICE;
    header.TotalLength      = sizeof(header) + len;
    header.Identification   = ++_Identifier;
    header.FragmentInfo     = 0;
    header.TimeToLive       = MY_IP_TTL;
    header.Protocol         = protocol;
    header.HeaderChecksum   = 0;
	header.SourceAddress 	= AppConfig.MyIPAddr;

    header.DestAddress.Val = remote->IPAddr.Val;

    SwapIPHeader(&header);

#if defined(NON_MCHP_MAC)
    header.HeaderChecksum   = CalcIPChecksum((BYTE*)&header,
                                                sizeof(header));
#endif

    MACPutHeader(&remote->MACAddr, MAC_IP, (sizeof(header)+len));
    MACPutArray((BYTE*)&header, sizeof(header));

#if !defined(NON_MCHP_MAC)
	header.HeaderChecksum = MACCalcTxChecksum(0, sizeof(header));
	MACSetTxBuffer(CurrentTxBuffer, 10);	// 10 is the offset in header to the HeaderChecksum member
	MACPutArray((BYTE*)&header.HeaderChecksum, 2);
	MACSetTxBuffer(CurrentTxBuffer, sizeof(header));	// Seek back to the end of the packet
#endif	
	
    return 0x0;

}

/*********************************************************************
 * Function:        IPSetRxBuffer(WORD Offset)
 *
 * PreCondition:    IPHeaderLen must have been intialized by 
 *					IPGetHeader() or IPPutHeader()
 *
 * Input:           Offset from beginning of IP data field
 *
 * Output:          Next Read/Write access to receive buffer is
 *                  set to Offset 
 *
 * Side Effects:    None
 *
 * Note:            None
 *
 ********************************************************************/
void IPSetRxBuffer(WORD Offset) 
{
	MACSetRxBuffer(Offset+IPHeaderLen);
}



static void SwapIPHeader(IP_HEADER* h)
{
    h->TotalLength      = swaps(h->TotalLength);
    h->Identification   = swaps(h->Identification);
    h->HeaderChecksum   = swaps(h->HeaderChecksum);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久91精品国产一区二区精品| 91激情五月电影| 亚洲欧美激情小说另类| 欧美日韩一区成人| 丁香婷婷综合激情五月色| 亚洲成人精品一区二区| 欧美日韩精品三区| 成人精品免费看| 五月激情综合婷婷| 国产精品私房写真福利视频| 欧美日韩精品免费| 高清不卡一区二区| 日本中文字幕一区二区视频 | 国产精品国产三级国产普通话三级 | 在线免费观看不卡av| 亚洲不卡一区二区三区| 精品日韩在线一区| 在线观看免费成人| 丰满放荡岳乱妇91ww| 热久久免费视频| 亚洲天堂中文字幕| 久久嫩草精品久久久精品| 欧美无乱码久久久免费午夜一区| 国产福利精品一区二区| 秋霞午夜av一区二区三区| 亚洲男同性恋视频| 中文字幕av一区二区三区高| 日韩女优视频免费观看| 欧美三级在线看| 99久久精品免费| 亚洲综合激情小说| 国产精品女人毛片| 26uuu国产在线精品一区二区| 欧美日本在线看| 欧美性猛片aaaaaaa做受| 99视频一区二区| 国产一区欧美日韩| 裸体歌舞表演一区二区| 亚洲bdsm女犯bdsm网站| 亚洲裸体在线观看| 成人免费在线播放视频| 欧美极品美女视频| 欧美v亚洲v综合ⅴ国产v| 欧美日韩国产在线观看| 大陆成人av片| 国产成人精品免费看| 精品一区二区三区免费毛片爱| 亚洲成人一区二区在线观看| 亚洲一区二区在线播放相泽| 亚洲免费观看在线观看| 亚洲欧洲av一区二区三区久久| 精品欧美一区二区久久| 日韩欧美国产精品| 日韩视频免费直播| 精品日韩欧美在线| 久久伊99综合婷婷久久伊| 久久婷婷久久一区二区三区| 久久青草国产手机看片福利盒子| 精品处破学生在线二十三| 亚洲精品一区二区三区精华液| 日韩视频一区在线观看| 精品国产伦理网| 国产亚洲精品精华液| 国产欧美一区二区精品秋霞影院| 国产午夜精品久久| 国产欧美精品一区二区色综合| 国产欧美精品区一区二区三区| 精品国产99国产精品| 26uuu亚洲综合色欧美| 国产精品人妖ts系列视频| 国产精品久久毛片a| 一区二区三区四区在线播放 | 亚洲一区二区三区视频在线播放| 亚洲五码中文字幕| 日韩国产在线观看一区| 九色综合国产一区二区三区| 国产一区美女在线| 国产成人av一区二区三区在线观看| 成人午夜看片网址| 欧美色欧美亚洲另类二区| 日韩码欧中文字| 天涯成人国产亚洲精品一区av| 韩国午夜理伦三级不卡影院| 99久久久无码国产精品| 日韩午夜精品电影| 久久综合色8888| 国产精品每日更新在线播放网址 | 麻豆免费看一区二区三区| 亚洲素人一区二区| 欧美激情一区二区| 国产精品人成在线观看免费| 1024精品合集| 日韩高清电影一区| 91网页版在线| 成人av电影在线观看| 欧美日韩激情一区二区| 国产精品狼人久久影院观看方式| 精品国产髙清在线看国产毛片| 日韩欧美亚洲另类制服综合在线| 欧美日韩一二三| 久久久久久一级片| 一区二区三区四区高清精品免费观看| 美女一区二区视频| 男女男精品视频网| 奇米亚洲午夜久久精品| 一区二区理论电影在线观看| 精品少妇一区二区三区| 91精品国产入口在线| 精品国产伦一区二区三区观看体验 | 洋洋成人永久网站入口| 图片区小说区国产精品视频| 国产盗摄视频一区二区三区| 99久久精品免费看国产| 久久精品一区二区三区av| 久久久久国产精品麻豆ai换脸 | 99v久久综合狠狠综合久久| 欧美一区二区视频免费观看| 国产精品久久久久四虎| 蜜桃视频免费观看一区| 成人一区在线看| 911精品国产一区二区在线| 国产精品视频一二三区| 美女久久久精品| 欧美日韩精品一区二区| 亚洲男人的天堂在线观看| 福利一区二区在线| 日韩女优av电影在线观看| 香蕉成人啪国产精品视频综合网| 波多野结衣中文一区| 日韩一区二区三区在线视频| 亚洲综合av网| 色妹子一区二区| 国产精品毛片a∨一区二区三区| 婷婷久久综合九色国产成人| 色八戒一区二区三区| 中文字幕精品一区二区精品绿巨人| 青青国产91久久久久久| 欧美性视频一区二区三区| 自拍偷拍亚洲欧美日韩| 不卡影院免费观看| 中文字幕一区二区三区色视频| 99精品国产热久久91蜜凸| 一区二区三区中文字幕| 在线看日本不卡| 日韩成人精品视频| 精品国产一区二区三区av性色| 国产精品系列在线观看| 国产精品欧美一区二区三区| 成人黄色电影在线| 国产精品久久久久aaaa樱花| 91热门视频在线观看| 亚洲观看高清完整版在线观看| 欧美日韩亚洲综合一区二区三区| 午夜视频在线观看一区二区三区| 91精品啪在线观看国产60岁| 精品一区二区三区的国产在线播放 | 成人一区二区视频| 亚洲三级理论片| 欧美日韩三级在线| 久久精品国产精品亚洲红杏| 久久精品男人天堂av| 成人aa视频在线观看| 亚洲综合另类小说| 2021久久国产精品不只是精品| 成人av电影在线| 亚洲香蕉伊在人在线观| 51精品视频一区二区三区| 亚洲国产日日夜夜| 欧美美女bb生活片| 日韩精品一区在线观看| 蜜桃精品在线观看| 久久精品欧美一区二区三区不卡| www.亚洲精品| 久久精品在这里| 国产成人久久精品77777最新版本| 久久久久久久国产精品影院| 国产高清不卡一区| 亚洲精品免费视频| 在线一区二区三区四区五区 | 欧美一区二区三区精品| 韩国精品主播一区二区在线观看 | 久久精品国产亚洲a| 欧美不卡一区二区| 成人性生交大片免费看中文网站| 国产精品天美传媒沈樵| 欧美在线三级电影| 精品无码三级在线观看视频| 久久婷婷色综合| 欧美精品日韩一本| 国产a精品视频| 亚洲成人中文在线| 国产精品无人区| 欧美日韩一本到| 成人精品国产免费网站| 免费av成人在线| 亚洲欧美在线aaa| 欧美电影免费观看高清完整版在| 成人激情小说网站| 伦理电影国产精品| 国产精品蜜臀av|