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

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

?? icmp.c

?? 凌陽 Web服務器應用采用Microchip TCP / IP協議棧介紹
?? C
字號:
/*********************************************************************
 *
 *                  ICMP Module for Microchip TCP/IP Stack
 *
 *********************************************************************
 * FileName:        ICMP.C
 * Dependencies:    ICMP.h
 *                  string.h
 *                  StackTsk.h
 *                  Helpers.h
 *                  IP.h
 *                  MAC.h
 * Processor:       PIC18
 * Complier:        MCC18 v1.00.50 or higher
 *                  HITECH PICC-18 V8.10PL1 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/30/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		9/9/04	Added ENC28J60 DMA checksum support
 * Howard Schlunder		1/5/06	Increased DMA checksum efficiency
 ********************************************************************/

#include <string.h>
#include "StackTsk.h"
#include "Helpers.h"
#include "ICMP.h"
#include "IP.h"
#include "MAC.h"

#if !defined(STACK_USE_ICMP)
#error You have selected to not include ICMP.  Remove this file from \
       your project to reduce code size.
#endif



/*
 * ICMP packet definition
 */
typedef struct _ICMP_PACKET
{
    BYTE    Type;
    BYTE    Code;
    WORD    Checksum;
    WORD    Identifier;
    WORD    SequenceNumber;
    BYTE    Data[MAX_ICMP_DATA];
}__attribute__ ((packed))  ICMP_PACKET;
#define ICMP_HEADER_SIZE    (sizeof(ICMP_PACKET) - MAX_ICMP_DATA)

static void SwapICMPPacket(ICMP_PACKET* p);


/*********************************************************************
 * Function:        BOOL ICMPGet(ICMP_CODE *code,
 *                              BYTE *data,
 *                              BYTE *len,
 *                              WORD *id,
 *                              WORD *seq)
 *
 * PreCondition:    MAC buffer contains ICMP type packet.
 *
 * Input:           code    - Buffer to hold ICMP code value
 *                  data    - Buffer to hold ICMP data
 *                  len     - Buffer to hold ICMP data length
 *                  id      - Buffer to hold ICMP id
 *                  seq     - Buffer to hold ICMP seq
 *
 * Output:          TRUE if valid ICMP packet was received
 *                  FALSE otherwise.
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
BOOL ICMPGet(ICMP_CODE *code,
             BYTE *data,
             BYTE *len,
             WORD *id,
             WORD *seq)
{
    ICMP_PACKET packet;
    WORD CalcChecksum;
    WORD ReceivedChecksum;
#if !defined(MCHP_MAC)
    WORD checksums[2];
#endif

    // Obtain the ICMP Header
    MACGetArray((BYTE*)&packet, ICMP_HEADER_SIZE);


#if defined(MCHP_MAC)
	// Calculate the checksum using the Microchip MAC's DMA module
	// The checksum data includes the precomputed checksum in the 
	// header, so a valid packet will always have a checksum of 
	// 0x0000 if the packet is not disturbed.
	ReceivedChecksum = 0x0000;
	CalcChecksum = MACCalcRxChecksum(0+sizeof(IP_HEADER), *len);
#endif

	// Obtain the ICMP data payload
    *len -= ICMP_HEADER_SIZE;
    MACGetArray(data, *len);

#if !defined(MCHP_MAC)
	// Calculte the checksum in local memory without hardware help
    ReceivedChecksum = packet.Checksum;
    packet.Checksum = 0;

    checksums[0] = ~CalcIPChecksum((BYTE*)&packet, ICMP_HEADER_SIZE);
    checksums[1] = ~CalcIPChecksum(data, *len);
    
    CalcChecksum = CalcIPChecksum((BYTE*)checksums, 2 * sizeof(WORD));
#endif


    SwapICMPPacket(&packet);

    *code = packet.Type;
    *id = packet.Identifier;
    *seq = packet.SequenceNumber;

    return ( CalcChecksum == ReceivedChecksum );
}

/*********************************************************************
 * Function:        void ICMPPut(NODE_INFO *remote,
 *                               ICMP_CODE code,
 *                               BYTE *data,
 *                               BYTE len,
 *                               WORD id,
 *                               WORD seq)
 *
 * PreCondition:    ICMPIsTxReady() == TRUE
 *
 * Input:           remote      - Remote node info
 *                  code        - ICMP_ECHO_REPLY or ICMP_ECHO_REQUEST
 *                  data        - Data bytes
 *                  len         - Number of bytes to send
 *                  id          - ICMP identifier
 *                  seq         - ICMP sequence number
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Note:            A ICMP packet is created and put on MAC.
 *
 ********************************************************************/
void ICMPPut(NODE_INFO *remote,
             ICMP_CODE code,
             BYTE *data,
             BYTE len,
             WORD id,
             WORD seq)
{
    ICMP_PACKET	packet;
    WORD ICMPLen;
	
	ICMPLen = ICMP_HEADER_SIZE + (WORD)len;

    packet.Code             = 0;
    packet.Type             = code;
    packet.Checksum         = 0;
    packet.Identifier       = id;
    packet.SequenceNumber   = seq;

    memcpy((void*)packet.Data, (void*)data, len);

    SwapICMPPacket(&packet);

#if !defined(MCHP_MAC)
    packet.Checksum         = CalcIPChecksum((BYTE*)&packet,
                                    ICMPLen);
#endif

    IPPutHeader(remote,
                IP_PROT_ICMP,
                (WORD)(ICMP_HEADER_SIZE + len));

    IPPutArray((BYTE*)&packet, ICMPLen);

#if defined(MCHP_MAC)
    // Calculate and write the ICMP checksum using the Microchip MAC's DMA
	packet.Checksum = MACCalcTxChecksum(sizeof(IP_HEADER), ICMPLen);
	IPSetTxBuffer(0, 2);
	MACPutArray((BYTE*)&packet.Checksum, 2);
#endif


    MACFlush();
}

/*********************************************************************
 * Function:        void SwapICMPPacket(ICMP_PACKET* p)
 *
 * PreCondition:    None
 *
 * Input:           p - ICMP packet header
 *
 * Output:          ICMP packet is swapped
 *
 * Side Effects:    None
 *
 * Overview:        None
 *
 * Note:            None
 ********************************************************************/
static void SwapICMPPacket(ICMP_PACKET* p)
{
    p->Identifier           = swaps(p->Identifier);
    p->SequenceNumber       = swaps(p->SequenceNumber);
    p->Checksum             = swaps(p->Checksum);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
琪琪一区二区三区| 精品视频在线免费观看| 一本大道久久a久久综合婷婷| 精品视频一区三区九区| 2021久久国产精品不只是精品| 亚洲欧美另类在线| 精久久久久久久久久久| 在线观看日韩av先锋影音电影院| 精品99一区二区三区| 亚洲午夜精品在线| 91麻豆精东视频| 日本一区二区综合亚洲| 看电影不卡的网站| 3atv一区二区三区| 亚洲国产综合色| 91麻豆蜜桃一区二区三区| 国产精品萝li| 成人精品免费视频| 欧美激情资源网| 成人丝袜18视频在线观看| 欧美mv和日韩mv的网站| 日本成人在线网站| 欧美日韩情趣电影| 亚洲国产欧美日韩另类综合| 96av麻豆蜜桃一区二区| 亚洲婷婷综合色高清在线| 捆绑变态av一区二区三区| 色女孩综合影院| 激情深爱一区二区| 欧美日韩精品福利| 国产精品婷婷午夜在线观看| 天堂精品中文字幕在线| 在线观看日韩高清av| 亚洲日本在线a| 97精品久久久午夜一区二区三区 | 精品国产乱子伦一区| 亚洲v日本v欧美v久久精品| av在线一区二区三区| 国产精品毛片久久久久久久| 成人午夜视频网站| 日韩美女精品在线| 色丁香久综合在线久综合在线观看| 国产精品国产三级国产aⅴ入口| 国产91精品一区二区| 国产精品久久久久久久久久久免费看 | 在线这里只有精品| 亚洲国产综合在线| 日韩一区二区电影在线| 黑人精品欧美一区二区蜜桃| 久久久三级国产网站| voyeur盗摄精品| 一区二区三区日韩在线观看| 欧美日韩亚洲综合在线| 免费人成黄页网站在线一区二区| 精品国产区一区| 成人免费av网站| 亚洲成a人片综合在线| 91麻豆精品国产自产在线 | 亚洲在线观看免费视频| 欧美日韩不卡一区二区| 国产一区二区在线电影| 日韩毛片在线免费观看| 在线不卡免费av| 国产91精品一区二区| 亚洲一区二区三区激情| 精品国产乱码91久久久久久网站| 不卡一区二区中文字幕| 天堂影院一区二区| 国产欧美一区二区精品仙草咪| 95精品视频在线| 美女视频网站黄色亚洲| 中文字幕在线一区二区三区| 欧美一区二区三区思思人| 成人性生交大片免费看中文网站| 亚洲一二三四区| 久久人人爽爽爽人久久久| 在线精品视频一区二区三四| 国产一区二区福利视频| 亚洲国产精品影院| 日本一区二区久久| 日韩视频免费观看高清在线视频| 99久久精品一区二区| 精品一区二区三区在线播放| 一区二区三区在线视频播放| 26uuu另类欧美亚洲曰本| 在线免费精品视频| 波多野结衣中文字幕一区 | 青娱乐精品视频| 亚洲丝袜另类动漫二区| 久久婷婷久久一区二区三区| 欧美日韩不卡在线| 99国内精品久久| 国产精品亚洲第一区在线暖暖韩国| 五月天欧美精品| 亚洲另类在线视频| 日本一二三不卡| 久久夜色精品国产欧美乱极品| 欧美高清视频一二三区| 欧美亚洲一区二区在线| 色综合天天天天做夜夜夜夜做| 国产精品乡下勾搭老头1| 久久精品国产第一区二区三区| 依依成人综合视频| 中文字幕一区二区三区视频| 国产欧美综合在线| 久久精品视频网| 久久久久国产一区二区三区四区| 日韩免费视频线观看| 91精品国产高清一区二区三区| 在线观看中文字幕不卡| 色狠狠桃花综合| 99国产精品久久久久久久久久久| 国产高清无密码一区二区三区| 韩国三级在线一区| 精品无人区卡一卡二卡三乱码免费卡| 日韩和欧美的一区| 青青草91视频| 蜜臀久久99精品久久久久久9| 日韩和欧美的一区| 麻豆久久久久久久| 激情都市一区二区| 国产精品中文欧美| 国产成人精品免费网站| 成人小视频免费观看| www.性欧美| 色综合天天综合网国产成人综合天| 91原创在线视频| 一本大道av伊人久久综合| 欧美中文字幕不卡| 欧美精品久久一区| 久久久久久久久99精品| 国产精品欧美久久久久一区二区| 国产精品久久精品日日| 一区二区欧美视频| 水蜜桃久久夜色精品一区的特点| 日本美女一区二区| 丰满岳乱妇一区二区三区| 99久久99久久久精品齐齐| 欧美在线三级电影| 欧美一级片免费看| 国产精品网站在线观看| 亚洲人123区| 乱一区二区av| 不卡一区中文字幕| 欧美一区二区私人影院日本| 久久久久88色偷偷免费| 亚洲精品亚洲人成人网 | 亚洲曰韩产成在线| 另类欧美日韩国产在线| 99久久综合99久久综合网站| 日本乱人伦一区| 欧美mv和日韩mv国产网站| 亚洲视频狠狠干| 美女精品一区二区| 99精品久久只有精品| 日韩欧美综合在线| 亚洲色图第一区| 激情综合网激情| 欧美日韩国产另类不卡| 国产精品色哟哟网站| 日韩福利视频导航| 99久精品国产| 久久久久久99精品| 香蕉久久夜色精品国产使用方法 | 五月天一区二区三区| 粉嫩一区二区三区性色av| 6080午夜不卡| 亚洲精品免费电影| 国产一区二区三区四区五区入口| 欧美日韩国产综合久久| 国产精品美女久久久久久久久久久 | 丁香婷婷综合激情五月色| 欧美人牲a欧美精品| 一区二区中文字幕在线| 精品在线观看免费| 欧美日韩免费在线视频| 国产精品久久久久毛片软件| 国内成人自拍视频| 欧美二区三区的天堂| 亚洲综合av网| 91丨porny丨首页| 国产亚洲综合色| 久久国产欧美日韩精品| 欧美日韩三级在线| 亚洲无人区一区| 色悠悠亚洲一区二区| 国产精品久久久久久久久搜平片| 九一久久久久久| 精品国产一区二区三区忘忧草| 亚洲图片欧美色图| 欧美亚洲国产一区二区三区va| 中文字幕亚洲一区二区av在线 | 国产精品家庭影院| 成人精品亚洲人成在线| 中文av一区二区| 豆国产96在线|亚洲| 欧美国产97人人爽人人喊| 粉嫩一区二区三区在线看| 国产精品情趣视频| 99re在线视频这里只有精品|