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

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

?? ip.c

?? pic18f66j60單片機tcp/ip協議中的ip協議程序
?? 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一区二区三区免费野_久草精品视频
久久se这里有精品| 91久久一区二区| 五月天精品一区二区三区| **欧美大码日韩| 亚洲男人电影天堂| 亚洲自拍偷拍综合| 午夜欧美2019年伦理| 视频一区在线视频| 国产九色sp调教91| av不卡免费电影| 欧美主播一区二区三区| 欧美浪妇xxxx高跟鞋交| 日韩精品资源二区在线| 久久精品在这里| 亚洲情趣在线观看| 五月天精品一区二区三区| 久色婷婷小香蕉久久| 国产呦萝稀缺另类资源| 成人免费av资源| 在线看日本不卡| 欧美刺激午夜性久久久久久久| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美中文一区二区三区| 欧美另类久久久品| 久久先锋影音av| 日韩理论在线观看| 三级精品在线观看| 大桥未久av一区二区三区中文| 91久久一区二区| 欧美成人乱码一区二区三区| 欧美激情一二三区| 日日欢夜夜爽一区| 99精品久久免费看蜜臀剧情介绍| 欧美精选一区二区| 国产精品久久一卡二卡| 日韩高清一区二区| 成人av网址在线观看| 日韩一级黄色片| 亚洲精品视频在线看| 久久精品国产网站| 欧美性大战久久| 六月丁香婷婷色狠狠久久| 成人av在线观| 精品99999| 亚洲一区中文日韩| 高清国产午夜精品久久久久久| 欧美日本在线播放| 亚洲少妇屁股交4| 国产老肥熟一区二区三区| 欧美熟乱第一页| 中文字幕在线免费不卡| 久久精品国产77777蜜臀| 欧美三级中文字幕在线观看| 一区二区中文字幕在线| 国产寡妇亲子伦一区二区| 欧美一级二级在线观看| 亚洲综合清纯丝袜自拍| 成人免费视频播放| 久久久九九九九| 国产一区二区影院| 精品国免费一区二区三区| 午夜精品影院在线观看| 一本色道久久加勒比精品| 国产精品天美传媒| 国产 日韩 欧美大片| 精品国产3级a| 国产真实精品久久二三区| 日韩一区二区视频在线观看| 偷拍日韩校园综合在线| 91麻豆精品91久久久久同性| 亚洲曰韩产成在线| 欧美男同性恋视频网站| 亚洲123区在线观看| 欧美四级电影网| 丝瓜av网站精品一区二区 | 欧美日韩国产区一| 亚洲高清免费观看高清完整版在线观看| 91在线观看成人| 亚洲视频一二三| 欧美系列一区二区| 亚洲chinese男男1069| 欧美日韩激情一区二区| 日韩黄色免费网站| 日韩丝袜美女视频| 激情偷乱视频一区二区三区| 久久精品人人做| 成人网页在线观看| 亚洲人精品一区| 欧美一区二区视频在线观看2020 | 成人午夜视频免费看| 国产精品久久久久久久久久免费看 | 中文字幕在线不卡国产视频| 91免费看`日韩一区二区| 亚洲免费看黄网站| 欧美日韩免费不卡视频一区二区三区| 亚洲国产一区二区三区| 亚洲欧美日韩中文播放| 欧美撒尿777hd撒尿| 国内久久婷婷综合| 国产精品电影院| 欧美三级中文字幕| 国产麻豆9l精品三级站| 国产精品第四页| 日韩一级高清毛片| 99精品欧美一区二区三区综合在线| 亚洲精品欧美激情| 欧美一级午夜免费电影| 国产91精品在线观看| 亚洲成人一二三| 国产清纯白嫩初高生在线观看91 | 日韩精品专区在线影院观看| 成人午夜电影小说| 亚洲不卡一区二区三区| 精品福利在线导航| 日本福利一区二区| 国产综合色视频| 午夜视频在线观看一区| 国产精品欧美久久久久无广告| 欧美日韩国产精品自在自线| 国产ts人妖一区二区| 日本va欧美va精品| 亚洲一区二区美女| 中文在线一区二区| 精品国产乱码久久久久久图片| 欧美在线观看一二区| 国产精品91xxx| 美女视频一区在线观看| 亚洲午夜av在线| 亚洲视频图片小说| 久久九九国产精品| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩一级二级| 色婷婷综合在线| 成人午夜在线免费| 国产69精品久久99不卡| 久久不见久久见中文字幕免费| 亚洲第一会所有码转帖| 一区二区三区在线观看动漫| **网站欧美大片在线观看| 国产嫩草影院久久久久| 国产色综合久久| 久久女同性恋中文字幕| 精品国产一区二区三区不卡| 日韩午夜av一区| 日韩欧美激情在线| 日韩一区国产二区欧美三区| 欧美日韩国产成人在线免费| 欧美午夜一区二区| 欧美三级日韩三级| 欧美日韩免费高清一区色橹橹| 欧美制服丝袜第一页| 日本久久电影网| 91国产免费看| 在线观看不卡一区| 欧美日韩在线精品一区二区三区激情| 色婷婷香蕉在线一区二区| 色激情天天射综合网| 欧美在线免费播放| 欧美日韩一区在线观看| 欧美日韩一级大片网址| 欧美一区二区性放荡片| 久久亚洲免费视频| 国产精品麻豆久久久| 日韩毛片一二三区| 五月婷婷激情综合| 蜜臀久久99精品久久久久久9| 裸体健美xxxx欧美裸体表演| 毛片av中文字幕一区二区| 激情图区综合网| 91在线观看高清| 欧美日韩不卡一区二区| 精品99一区二区三区| 国产精品国产三级国产aⅴ中文| 亚洲综合区在线| 精品亚洲国内自在自线福利| 成人免费福利片| 欧美日韩成人综合在线一区二区 | 亚洲视频 欧洲视频| 五月天亚洲精品| 国产成人综合亚洲网站| 91国偷自产一区二区三区成为亚洲经典| 欧美日韩国产首页在线观看| 久久网这里都是精品| 亚洲精品高清在线| 六月丁香综合在线视频| 91小宝寻花一区二区三区| 欧美乱妇23p| 亚洲视频 欧洲视频| 日本伊人色综合网| 99久久精品国产观看| 日韩欧美一卡二卡| 国产精品久久精品日日| 麻豆国产精品一区二区三区| 99视频有精品| 精品精品欲导航| 亚洲精品成人少妇| 国产乱码字幕精品高清av| 欧美日韩激情一区| 亚洲欧美日韩久久| 国产成人精品一区二区三区网站观看|