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

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

?? ip.c

?? 杭州立宇泰豪華型44B0開發板
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* IP functions

NOTE: replace sizeof(ARPKT) with ARPLEN!!

Debug option to send IP datagrams with a dummy 'options' field */
#define BIGHEAD 0       /* Set non-zero to send datagrams with larger IP hdrs */
#define ARPLEN  28
#define IPHDRLEN     20
#define ICMPHDRLEN   8

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "ether.h"
#include "netutil.h"
#include "ip.h"

#define IP_TTL          100     /* Time To Live for an outgoing IP datagram */
#define FRAGTRIES       8       /* Number of attempts to match a fragment */
#define NFRAGS          4       /* No of fragments in buffer */

typedef struct {                /* Fragment buffer structure */
    int tries;                      /* Number of times to attempt a match */
    WORD ident;                     /* IP ident field */
    LWORD sipp;                      /* Source IP address */
    WORD oset;                      /* Offset in IP data area */
    WORD len;                       /* Length of fragment */
    BYTE data[MAXIP];               /* Fragment data */
} FRAG;

FRAG frags[NFRAGS];             /* Fragment buffer */

extern int netdebug;            /* Debug flag: net packet display */
extern WORD swapw(WORD w);
extern LWORD swapl(LWORD lw);
extern void *getframe_datap(GENFRAME *gfp);

/* Upcall function pointer: 0 if unused */
NODE *(*get_locnode_n)(int n);  /* Func ptr for local node locator upcall */

/* Private prototypes */
int defrag_ip(IPKT *ip, int dlen);

/* Check ARP packet, swap bytes, return -1, 0 if not ARP */
int is_arp(GENFRAME *gfp, int len)
{
    WORD pcol;
    BYTE *temparp;
    int dlen=0;
    ARPKT *arp;
    
    arp=&arpkt;
    pcol = getframe_pcol(gfp);          /* ARP only on Ether */
    if (pcol==PCOL_ARP && len>=sizeof(ARPKT))
    {                                   /* If protocol OK.. */
        temparp =(BYTE * )getframe_datap(gfp);
        //memcpy((BYTE *)arp,temparp,ARPLEN);//sizeof(ARPKT));
        memcpy((BYTE *)(&(arp->hrd)),&temparp[0],sizeof(WORD));
        memcpy((BYTE *)(&(arp->pro)),&temparp[2],sizeof(WORD));
        memcpy((BYTE *)(&(arp->hln)),&temparp[4],sizeof(BYTE));
        memcpy((BYTE *)(&(arp->pln)),&temparp[5],sizeof(BYTE));
        memcpy((BYTE *)(&(arp->op)),&temparp[6],sizeof(WORD));
        memcpy(arp->smac,&temparp[8],MACLEN);
        memcpy((BYTE *)(&(arp->sip)),&temparp[8+MACLEN],sizeof(LWORD));
        memcpy(arp->dmac,&temparp[12+MACLEN],MACLEN);
        memcpy((BYTE *)(&(arp->dip)),&temparp[12+2*MACLEN],sizeof(LWORD));
        
        swap_arp(gfp);                  /* ..check ARP data */
        
        //arp = getframe_datap(gfp);
        if (arp->hrd==HTYPE && arp->pro==ARPPRO)
            dlen = -1;                  /* Return non-zero if OK */
        else
        {
            dlen = 0;                   /* Swap back if not OK */
            swap_arp(gfp);
        }
    }
    
    return(dlen);
}

/* Make an ARP packet, return its total length */
int make_arp(GENFRAME *gfp, NODE *srcep, NODE *destp, WORD code)
{
    //ARPKT *arp;
    BYTE *temparp;
    LWORD templ;

    gfp->g.fragoff = 0;                 /* No fragmentation */
    temparp = (BYTE *)getframe_datap(gfp);
    memcpy(&temparp[8], srcep->mac, MACLEN);  /* Srce ARP ether addr */
    memcpy(&temparp[12+MACLEN], destp->mac, MACLEN);  /* Dest ARP ether addr */
    temparp[0] = HTYPE>>8;                   /* Hware & protocol types */
    temparp[1] = HTYPE&0xff;
    temparp[2] = ARPPRO>>8;
    temparp[3] = ARPPRO&0xff;
    temparp[4] = MACLEN;                  /* Hardware addr len */
    temparp[5] = sizeof(LWORD);           /* IP addr len */
    temparp[6] = code>>8;                    /* ARP opcode */
    temparp[7] = code&0xff;
    templ = srcep->ip;                     /* Source IP addr */
    temparp[8+MACLEN] = (BYTE)((templ>>24)&0x000000ff);
    temparp[9+MACLEN] = (BYTE)((templ>>16)&0x000000ff);
    temparp[10+MACLEN] = (BYTE)((templ>>8)&0x000000ff);
    temparp[11+MACLEN] = (BYTE)(templ&0x000000ff);
    templ = gate_ip(destp, srcep);               /* Dest ip addr (maybe gateway) */
    temparp[12+2*MACLEN] = (BYTE)((templ>>24)&0x000000ff);
    temparp[13+2*MACLEN] = (BYTE)((templ>>16)&0x000000ff);
    temparp[14+2*MACLEN] = (BYTE)((templ>>8)&0x000000ff);
    temparp[15+2*MACLEN] = (BYTE)(templ&0x000000ff);
    //swap_arp(gfp);
    //Uart_Printf("\n");
    /*for(i=0;i<ARPLEN;i++)
    Uart_Printf("%x,",temparp[i]);*/
    return(make_frame(gfp, destp->mac, PCOL_ARP, sizeof(ARPKT)));
}

/* Swap byte order of ints in ARP header */
void swap_arp(GENFRAME *gfp)
{
    ARPKT *arp;
    
    arp=&arpkt;

    arp->hrd = swapw(arp->hrd);
    arp->pro = swapw(arp->pro);
    arp->op = swapw(arp->op);
    arp->sip = swapl(arp->sip);
    arp->dip = swapl(arp->dip);
 }

/* Check frame is IP/SLIP, checksum & byte-swap, return data len */
int is_ip(GENFRAME *gfp, int len)
{
    int ver, dlen=0, hlen;
    WORD pcol, sum;
    IPKT *ip;
    BYTE *tempip;

    ip=&ipkt;
    //Uart_Printf("\nis_ip");
    pcol = getframe_pcol(gfp);
    if ((pcol==PCOL_IP || pcol==0) && len>=sizeof(IPHDR))
    {
     //   ip = getframe_datap(gfp);           /* Get pointer to IP frame */
     //   Uart_Printf("\nParse the received IP packet:");
        tempip=(BYTE *)getframe_datap(gfp);
        /*for(i=0;i<60;i++)
        Uart_Printf("%x,",tempip[i]);*/
     
//-----------------------------------------------------------------------
        memcpy((BYTE *)(&(ip->i.vhl)),&tempip[0],sizeof(BYTE));
        memcpy((BYTE *)(&(ip->i.service)),&tempip[1],sizeof(BYTE));
        memcpy((BYTE *)(&(ip->i.len)),&tempip[2],sizeof(WORD));
        memcpy((BYTE *)(&(ip->i.ident)),&tempip[4],sizeof(WORD));
        memcpy((BYTE *)(&(ip->i.frags)),&tempip[6],sizeof(WORD));
        memcpy((BYTE *)(&(ip->i.ttl)),&tempip[8],sizeof(BYTE));
        memcpy((BYTE *)(&(ip->i.pcol)),&tempip[9],sizeof(BYTE));
        memcpy((BYTE *)(&(ip->i.check)),&tempip[10],sizeof(WORD));
        memcpy((BYTE *)(&(ip->i.sip)),&tempip[12],sizeof(LWORD));
        memcpy((BYTE *)(&(ip->i.dip)),&tempip[16],sizeof(LWORD));
//-----------------------------------------------------------------------
        /*Uart_Printf("\nIP->vhl=%x",ip->i.vhl);
        Uart_Printf("\nIP->service=%x",ip->i.service);
        Uart_Printf("\nIP->len=%x",ip->i.len);
        Uart_Printf("\nIP->ident=%x",ip->i.ident);
        Uart_Printf("\nIP->frags=%x",ip->i.frags);
        Uart_Printf("\nIP->ttl=%x",ip->i.ttl);
        Uart_Printf("\nIP->pcol=%x",ip->i.pcol);
        Uart_Printf("\nIP->check=%x",ip->i.check); 
        Uart_Printf("\nIP->sip=%x",ip->i.sip);
        Uart_Printf("\nIP->dip=%x",ip->i.dip);              */
        ver = ip->i.vhl >> 4;               /* Get IP version & hdr len */
        hlen = (ip->i.vhl & 0xf) << 2;
        sum = ~csum(&ip->i, (WORD)hlen);    /* Do checksum */
        if ((ver==4) && (len>=hlen) && (sum==0))  /* If OK.. */
        {
            swap_ip(gfp);                   /* Do byte-swaps */
            
            dlen = mini(ip->i.len, len) - hlen;
            //Uart_Printf("\nIPHEADER's len=%x",sizeof(IPHDR));
            {                               // ..delete them, move data down 
                memmove(&tempip[20], &tempip[20+hlen-IPHDRLEN], len);
                dlen -= hlen-IPHDRLEN;
            }
            memcpy((BYTE *)(&(ip->data)),&tempip[20],dlen);
            if ((ip->i.frags & 0x3fff)!=0)  /* If a fragment.. */
                dlen = defrag_ip(ip, dlen); /* ..call defragmenter */
        }
        else if (netdebug)
            Uart_Printf("Invalid datagram, ver %u len %u sum %u\n", ver, len, sum);
    }
    return(dlen);
}

/* Make an IP packet, if greater than the MTU, also make fragment (subframe) in
** this frame. Return total length of frame and subframes (if any) */
int make_ip(GENFRAME *gfp, NODE *srcep, NODE *destp, BYTE pcol, WORD dlen)
{
    IPKT *ip;//, *ip2;
    int len, sublen=0, fhlen, mtu;
    static WORD ident=1, oset=0;
    GENFRAME *sfp;
    BYTE  *tempip;
    BYTE  *tempip2;

    //ip = getframe_datap(gfp);           /* Get pointer to IP datagram */
    ip=&ipkt;
    tempip=getframe_datap(gfp);
	//Uart_Printf("\nMake an IP packet:");
    ip->i.ident = ident;                /* Set datagram ident */
	//Uart_Printf("\nIP->i.ident=%x",ip->i.ident);
    ip->i.frags = oset >> 3;            /* Frag offset in units of 8 bytes */
	//Uart_Printf("\nIP->i.frags=%x",ip->i.frags);
    gfp->g.fragoff = 0;                 /* ..assuming no more frags */
    mtu = (getframe_mtu(gfp)-IPHDRLEN) & 0xfff8;   /* MTU rounded down 8 */
    //Uart_Printf("\nMTU=%x",mtu);
    len = mini(dlen, mtu);              /* Size of this frame (this fragment) */
    if (dlen > len)                     /* If fragmentation required.. */
    {                                   /* Create new frag within this frame */
        //Uart_Printf("\ndlen>len");
        fhlen = dtype_hdrlen(gfp->g.dtype);             /* Frame hdr len */
        gfp->g.fragoff = len + IPHDRLEN + fhlen;        /* Subframe offset */
        sfp = (GENFRAME *)&gfp->buff[gfp->g.fragoff];   /* Subframe ptr */
        ip->i.frags = (oset>>3)+0x2000;                 /* Show there is frag */
        oset += len;                                    /* New data offset */
        //ip2 = (IPKT*)((BYTE*)sfp+sizeof(GENHDR)+fhlen); /* Ptr to 2nd IP frag */
        tempip2= (BYTE*)((BYTE*)sfp+sizeof(GENHDR)+fhlen);
        //memmove(ip2->data, &ip->data[oset], dlen-len);  /* Copy data 1st->2nd */
        memmove(&tempip2[20],&tempip[20],dlen-len);
        
        sfp->g.dtype = gfp->g.dtype;    /* Copy driver type into subframe */
        //sublen = make_ip(sfp, srcep, destp, pcol, (WORD)(dlen-len));
    }                                   /* Recursive call to make frag */
    ip->i.vhl = 0x40+(IPHDRLEN>>2);/* Version 4, header len 5 LWORDs */
    //Uart_Printf("\nIP->i.vhl=%x",ip->i.vhl);
    ip->i.service = 0;                  /* Routine message */
	//Uart_Printf("\nIP->i.service=%x",ip->i.service);
    ip->i.ttl = IP_TTL;                 /* Time To Live */
    //Uart_Printf("\nIP->i.ttl=%x",ip->i.ttl);
    ip->i.pcol = pcol;                  /* Set IP protocol */
	//Uart_Printf("\nIP->i.pcol=%x",ip->i.pcol);
    ip->i.sip = srcep->ip;              /* Srce, dest IP addrs */
	//Uart_Printf("\nIP->i.sip=%x",ip->i.vhl);
    ip->i.dip = destp->ip;
	//Uart_Printf("\nIP->i.dip=%x",ip->i.vhl);
#if BIGHEAD
    ip->i.option = 0;                   /* Null options if oversized header */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费在线| 亚洲日本在线观看| 欧美一区二区网站| 91 com成人网| 26uuu精品一区二区| 久久综合给合久久狠狠狠97色69| 精品国产凹凸成av人导航| 欧美久久久久免费| 久久久久青草大香线综合精品| 久久这里只精品最新地址| 亚洲欧洲制服丝袜| 日韩国产一二三区| 秋霞国产午夜精品免费视频| 国产一区二区三区黄视频| 成人精品国产福利| 欧美日韩亚洲综合一区 | 亚洲国产精品久久人人爱蜜臀| 亚洲不卡在线观看| 国产成人av电影免费在线观看| 色香蕉久久蜜桃| 久久久久久久综合狠狠综合| 日本一区二区视频在线| 日韩午夜电影在线观看| 成人免费毛片高清视频| 国产精品一二一区| 欧美天堂亚洲电影院在线播放| 欧美成人vps| 夜色激情一区二区| 99精品欧美一区二区三区综合在线| 欧美精品乱码久久久久久按摩| 国产午夜精品理论片a级大结局| 性感美女久久精品| 日本国产一区二区| 亚洲欧美日韩国产中文在线| 不卡免费追剧大全电视剧网站| 欧美成人官网二区| 国精产品一区一区三区mba视频| 欧美高清性hdvideosex| 性做久久久久久久久| 欧美久久久久免费| 日韩av一区二区三区四区| 欧美日本一道本| 日韩精品国产精品| 欧美一区二区黄| 久草这里只有精品视频| 欧美va日韩va| 国产91精品露脸国语对白| 欧美激情一区二区三区四区| 国产99久久久精品| 亚洲欧美日韩一区二区三区在线观看 | 日韩欧美国产成人一区二区| 精品无人码麻豆乱码1区2区| 精品欧美一区二区在线观看| 国产精品1024久久| 亚洲精品网站在线观看| 在线一区二区三区做爰视频网站| 国产精品人成在线观看免费| 色婷婷久久久亚洲一区二区三区| 精品国产乱码久久久久久免费| 调教+趴+乳夹+国产+精品| 久久久久久久国产精品影院| 色天使色偷偷av一区二区| 视频一区中文字幕国产| 国产精品视频一二| 欧美视频一区二区三区在线观看| 国产最新精品精品你懂的| 亚洲欧美中日韩| 久久人人爽人人爽| 91麻豆精品91久久久久久清纯| av午夜精品一区二区三区| 奇米综合一区二区三区精品视频| 综合网在线视频| 久久久噜噜噜久噜久久综合| 91精品中文字幕一区二区三区| av激情亚洲男人天堂| 激情都市一区二区| 手机精品视频在线观看| 亚洲精品乱码久久久久久黑人| 久久免费电影网| 精品福利av导航| 精品盗摄一区二区三区| 91精品欧美久久久久久动漫| 91福利资源站| 色国产综合视频| 欧美视频在线一区| 欧美日韩不卡在线| 欧美日韩国产精选| 欧美高清hd18日本| 欧美一卡二卡三卡四卡| 欧美一区二区三区视频免费| 欧美一区二区三区日韩视频| 3atv一区二区三区| 日韩一区二区在线免费观看| 91精品一区二区三区在线观看| 欧美二区三区91| 日韩欧美国产高清| 国产精品久久毛片| 亚洲精品国产无天堂网2021| 亚洲综合男人的天堂| 蜜臀av一级做a爰片久久| 国产精品456露脸| 91九色最新地址| 日韩欧美一级特黄在线播放| 国产区在线观看成人精品| 伊人婷婷欧美激情| 欧美aaaaa成人免费观看视频| 国产成人丝袜美腿| 91精品国产福利| 亚洲国产精品高清| 日韩不卡手机在线v区| 99精品视频在线播放观看| 在线播放视频一区| 亚洲另类春色校园小说| 国产美女视频91| 国产精品888| 色噜噜狠狠一区二区三区果冻| 99这里都是精品| 亚洲精品一区二区三区蜜桃下载| 亚洲免费看黄网站| 成人av网在线| 国产免费观看久久| 国产一区二区三区四区在线观看| 欧美丝袜丝交足nylons图片| 亚洲女性喷水在线观看一区| 国产一区二区三区黄视频| 欧美大黄免费观看| 免费观看在线色综合| 91精品国产美女浴室洗澡无遮挡| 日韩理论片一区二区| 99麻豆久久久国产精品免费| 国产肉丝袜一区二区| 国产成人在线看| 中文字幕中文字幕在线一区| www.成人网.com| 亚洲自拍欧美精品| 5月丁香婷婷综合| 精品亚洲成a人| 久久久久久久久久电影| 国产精品77777| 亚洲欧美区自拍先锋| 欧美三日本三级三级在线播放| 亚洲va国产va欧美va观看| 欧美电影免费观看高清完整版在线 | 精品免费日韩av| 国产成人亚洲综合a∨猫咪| 欧美高清在线精品一区| 一本色道久久综合精品竹菊| 午夜婷婷国产麻豆精品| 久久久久九九视频| 91影院在线观看| 午夜不卡在线视频| 国产欧美一区二区在线| 欧美日韩美女一区二区| 国产一区 二区| 日本成人在线网站| 亚洲人一二三区| 久久蜜桃av一区精品变态类天堂| 一本色道久久加勒比精品| 国内精品国产三级国产a久久| 亚洲一区在线电影| 国产精品国产三级国产普通话蜜臀| 欧美日韩三级一区二区| 成人激情午夜影院| 国产综合色在线视频区| 久久不见久久见免费视频1| 亚洲自拍偷拍麻豆| 夜夜精品视频一区二区| 国产精品不卡在线观看| 国产天堂亚洲国产碰碰| 久久精品亚洲一区二区三区浴池 | 一区二区三区加勒比av| 中文字幕免费在线观看视频一区| 日韩欧美综合一区| 日韩一区和二区| 精品剧情在线观看| 精品日韩欧美一区二区| 日韩精品一区二区三区四区 | 激情图片小说一区| 精品亚洲aⅴ乱码一区二区三区| 日本欧美在线看| 国产精品久久三| 国产精品久久久久婷婷二区次| 国产午夜精品美女毛片视频| 国产日韩欧美精品综合| 国产精品久久久久9999吃药| 亚洲视频在线观看一区| 夜夜嗨av一区二区三区网页| 亚洲国产cao| 国产精品一区在线| 91在线精品一区二区| 欧美片网站yy| 久久网站最新地址| 一个色在线综合| 美国三级日本三级久久99 | 久久久精品国产免费观看同学| 国产精品久久三| 奇米四色…亚洲| 91视频com| 国产区在线观看成人精品 | 精品国产第一区二区三区观看体验|