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

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

?? bclient.c

?? 這是單板上DPRAM的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#if !defined(i386) && !defined (i960)
LanStop();
#endif

if (Bootp_Replied) {
    retval = 0;

    /* If raw packet is wanted, just copy and return here */
    if ((flags & RAW) == RAW)     
        bmemcpy((UCHAR *)&BootpReplyPkt, (UCHAR *)ret_params, sizeof(bootppkt_t));

    /* Extract returned parameters */
    else  
        retval = extract_bootpkt(&BootpReplyPkt, (bootpparms_t *)ret_params);
}
else
    retval = 0xffffffff;
return (retval);
}

/***********************************************************************/
/* broadcast_bootp: Build a BOOTP_REQUEST packet to be broadcast       */
/*                 and call network interface to send it.              */
/*                                                                     */
/*      INPUTS: NiLanPtr - Ptr to NI to do broadcast on.               */
/*                                                                     */
/*     RETURNS: 0 for success, 0xffffffff for failure                  */
/*                                                                     */
/***********************************************************************/
static ULONG broadcast_bootp(long (*ni_entry)(ULONG, union nientry *))
{
union nientry getpkb_ni, brdcast_ni;
char *pkb_ptr;
#if NI_RAWMEM
mblk_t *m;
frtn_t free;
#endif

#if NI_RAWMEM
free.free_func = 0;
free.free_arg = 0;
m = besballoc((UCHAR *)&BootpBuf, IP_SZ + UDP_SZ + BOOTP_SZ, 0, &free);
if (m == 0) 
    return (0xFFFFFFFF);
m->b_wptr = (UCHAR *)(m->b_wptr + IP_SZ + UDP_SZ + BOOTP_SZ);
brdcast_ni.nibrdcast.buff_addr = (char *)m;
#else
getpkb_ni.nigetpkb.count = IP_SZ + UDP_SZ + BOOTP_SZ;
getpkb_ni.nigetpkb.hwa_ptr = 0;
getpkb_ni.nigetpkb.if_num = BOOTP_IFNUM;
if ((pkb_ptr=(char *)(*ni_entry)(NI_GETPKB, &getpkb_ni)) == (char *)-1)
    return (0xffffffff);
bootp_ip_packet(pkb_ptr);
brdcast_ni.nibrdcast.buff_addr = (char *)pkb_ptr;
#endif

brdcast_ni.nibrdcast.count = IP_SZ + UDP_SZ + BOOTP_SZ;
brdcast_ni.nibrdcast.type = IP_TYPE;
brdcast_ni.nibrdcast.if_num = BOOTP_IFNUM;

(*ni_entry)(NI_BROADCAST, &brdcast_ni);
return 0;
}

/***********************************************************************/
/*   bootp_ip_packet: build an IP packet for BOOTP request             */
/*                                                                     */
/*      INPUTS: bootpbuf: pointer to IP packet to be built             */
/*                                                                     */
/***********************************************************************/
static void bootp_ip_packet(char *bootpbuf)
{
struct iphdr  *ip;
struct udphdr *udp;
bootppkt_t    *bootp;
UCHAR *exts;
struct mib_ifreq ifr;
union nientry ni;

/* reset packet memory area     */
bmemset((UCHAR *)bootpbuf, 0, IP_SZ + UDP_SZ + BOOTP_SZ);

/* Fill in BOOTP request area   */
bootp = (bootppkt_t *)(bootpbuf + IP_SZ + UDP_SZ);
bootp->op = BOOTP_REQUEST;
bootp->htype = HTYPE_ETH;
bootp->xid = BootpXid = htonl(InitialXid++);
bootp->secs = htons(SecsSinceStart);
bootp->flags = 0; 
bmemset((UCHAR *)&ni, 0, sizeof(union nientry));
ni.niioctl.cmd = SIOCGIFTYPE;
ni.niioctl.arg = (long *)𝔦
ni.niioctl.if_num = BOOTP_IFNUM;
(*MyNiLan)(NI_IOCTL, &ni);
bootp->hlen = ifr.ie_type;
bmemcpy(EthAddrPtr, bootp->chaddr, bootp->hlen);

strcpy((UCHAR *)BootpServerName, (UCHAR *)(bootp->sname));
strcpy((UCHAR *)BootpFileName, (UCHAR *)(bootp->file));

/* Initialize vendor extensions */
((vendexts_t *)(bootp->vend))->cookie = htonl(BOOTP_COOKIE);
exts = ((vendexts_t *)(bootp->vend))->extensions;
*exts = END_TAG;

/* Fill in UDP header */
udp = (struct udphdr *)(bootpbuf + IP_SZ);
udp->uh_sport = htons(IPPORT_BOOTPC);
udp->uh_dport = htons(IPPORT_BOOTPS);
udp->uh_ulen = htons(UDP_SZ + BOOTP_SZ);
udp->uh_sum = 0;

/* Fill in IP header */
ip = (struct iphdr *)bootpbuf;
ip->ip_v = IPVERSION;
ip->ip_hl = IP_SZ >> 2;
ip->ip_len = htons(IP_SZ + UDP_SZ + BOOTP_SZ);
ip->ip_id = htons(ip_id++);
ip->ip_ttl = UDP_TTL * 2;
ip->ip_p = IPPROTO_UDP;
ip->ip_src = 0;
ip->ip_dst = htonl(INADDR_BROADCAST);
ip->ip_sum = in_cksum((UCHAR *)ip, IP_SZ);
}

/***********************************************************************/
/* process_bootp: Called from the NI as a result of (1) polling the NI */
/*                to check available packet (2) examing if pSOS is up  */
/*                                                                     */
/*      INPUTS: type      - Protocol number of packet being announced. */
/*              buff_addr - Pointer to the packet being announced.     */
/*                                                                     */
/*        NOTE: If buff_addr is NULL, it is not for announcing packet, */
/*              just return PsosUp state.                              */
/*                                                                     */
/***********************************************************************/
static ULONG process_bootp(int type, char *buff_addr)
{
char *bp;
union nientry retpkb_ni;
bootppkt_t *bootp;
struct udphdr *udp;
/* struct iphdr  *ip;  --delete by szg */

if (buff_addr == NULL) 
    return(PsosUp);

if (!Bootp_Replied && (type == IP_TYPE)) {
    #if NI_RAWMEM
    bp = (char *) ((mblk_t *)buff_addr)->b_rptr;
    #else
    bp = (char *)buff_addr;
    #endif
/*    ip = (struct iphdr *)bp;   -- chg by szg just for restraining warning */
    udp = (struct udphdr *)(bp+IP_SZ);
    bootp = (bootppkt_t *)(bp+IP_SZ+UDP_SZ);
    if ((ntohs(udp->uh_sport) == IPPORT_BOOTPS) &&
        (ntohs(udp->uh_dport) == IPPORT_BOOTPC) &&
        (bootp->xid == BootpXid) &&
        (bootp->op == BOOTP_REPLY)) {
        bmemcpy((UCHAR *)bp+IP_SZ+UDP_SZ, (UCHAR *)&BootpReplyPkt, BOOTP_SZ);
        Bootp_Replied = TRUE;
    }
}
    
#if NI_RAWMEM
    bfreemsg((mblk_t *)buff_addr);
#else
retpkb_ni.niretpkb.buff_addr = buff_addr;
retpkb_ni.niretpkb.if_num = BOOTP_IFNUM;
(*MyNiLan)(NI_RETPKB, &retpkb_ni);
#endif

return PsosUp;
}

/***********************************************************************/
/*  extract_bootpkt: extract information from BOOTP reply packet       */
/*                                                                     */
/*      INPUTS: bootp: BOOTP reply packet address                      */
/*              ret:   address for copying extracted information       */
/*                                                                     */
/***********************************************************************/
#define extractlong(c)	\
	((((char *)c)[0] << 24) | (((char *)c)[1] << 16) | \
	 (((char *)c)[2] << 8) | (((char *)c)[3]))
#define extractshort(c)	\
	((((char *)c)[0] << 8) | (((char *)c)[1]))
static ULONG extract_bootpkt(bootppkt_t *bootp, bootpparms_t *retp)
{
unsigned long retval = 0;
unsigned char *exts, tag, len;
unsigned long ltag;
unsigned short stag;

        ((bootpparms_t *)retp)->yourIP = bootp->yiaddr;
        ((bootpparms_t *)retp)->TFTPserverIP = bootp->siaddr;
        strcpy((UCHAR *)(bootp->file), (UCHAR *)(retp->bootfile_name));

        /* Extract parameters from vendor extension area, if any */
        if (ntohl(((vendexts_t *)bootp->vend)->cookie) != BOOTP_COOKIE)
            retval = 0xffffffff;
        exts = ((vendexts_t *)(bootp->vend))->extensions;

        while ((exts - ((vendexts_t *)(bootp->vend))->extensions) <
            VEND_SZ-sizeof(ULONG)) {
            tag = *exts++;
        switch(tag) {
            case SUBNET_MASK_TAG :
                 len = *exts++;
                 ltag = extractlong(exts);
                 ((bootpparms_t *)retp)->subnetmask = htonl(ltag);
                 exts += len;
                 break;
            case GATEWAY_TAG :
                 len = *exts++;
		 ltag = extractlong(exts);
                 ((bootpparms_t *)retp)->gatewayIP.s_addr = htonl(ltag);
                 exts += len;
                 break;
            case HOSTNAME_TAG :
                 len = *exts++;
                 bmemset((UCHAR *)(((bootpparms_t *)retp)->hostname), 0, sizeof(((bootpparms_t *)retp)->hostname));
                 strncpy(((bootpparms_t *)retp)->hostname, (char *)exts, len);
                 exts += len;
                 break;
            case BOOTFILE_SIZE_TAG :
                 len = *exts++;
                 stag = extractshort(exts);
                 ((bootpparms_t *)retp)->bootfile_size = 512 * stag;
                 exts += len;
                 break;
            case BOOTP_SERVER_TAG :
                 len = *exts++;
                 ltag = extractlong(exts);
                 ((bootpparms_t *)retp)->BOOTPserverIP.s_addr = htonl(ltag);
                 exts += len;
                 break;
            case END_TAG :
                 break;
            default:
                 len = *exts++;
                 exts += len;
                 break;
        } /* switch */
        } /* while */
return (retval);
}

/***********************************************************************/
/*     bmemcpy: Copy a memory block                                    */
/*                                                                     */
/*      INPUTS: src    - Source address                                */
/*              dest   - Destination address                           */
/*              nbytes - Number of bytes to copy                       */
/*                                                                     */
/***********************************************************************/
static void bmemcpy(UCHAR *src, UCHAR *dest, ULONG nbytes)
{
UCHAR *srcp = src, *destp = dest;

while (nbytes--)
    *destp++ = *srcp++;
}

/***********************************************************************/
/*     bmemset: set memory with defined values                         */
/*                                                                     */
/*      INPUTS: ptr:   address of block                                */
/*              fill:  contents of memory                              */
/*              count: length of block                                 */
/*                                                                     */
/***********************************************************************/
static void bmemset(UCHAR *ptr, register UCHAR fill, register ULONG count)
{
while (count--)
    *ptr++ = fill;
}
 
/***********************************************************************/
/*      strcpy: Copy a string                                          */
/*                                                                     */
/*      INPUTS: src    - Source address                                */
/*              dest   - Destination address                           */
/*                                                                     */
/***********************************************************************/
static void strcpy(UCHAR *src, UCHAR *dst)
{
    while ((*dst++ = *src++) != '\0');
}

/***********************************************************************/
/*     sleep: wait for specified seconds                               */
/*                                                                     */
/***********************************************************************/
static void sleep(int count)
{
  int i;
  if (PsosUp)
      tm_wkafter(count * anchor->psosct->kc_ticks2sec);
  else
      for (i = 0; i < count*10; ++i) Delay100ms();
}

/*****************************************************************************/
/* in_cksum -  Compute Internet (1's complement sum) Checksum                */
/*                                                                           */
/*   INPUT  : count is number of bytes to checksum                           */
/*            addr is the starting address                                   */
/*   OUTPUT : the 1's complement sum of the buffer                           */
/*****************************************************************************/
USHORT in_cksum(UCHAR *addr, int count)
{
  ULONG sum = 0;
 
  while (count > 1) {
    sum += *((USHORT *)addr);
    addr += 2;
    count -= 2;
  }

  /*  Add left-over byte, if any */
  if (count > 0)
    sum += (*(USHORT *) addr) << 8;

  /*  Fold 32-bit sum to 16 bits */
  while (sum & 0xFFFF0000)
    sum = (sum & 0x0000FFFF) + ((sum & 0xFFFF0000) >> 16);

  return((USHORT)~sum);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区免费在线观看| 蜜臀久久99精品久久久久久9| 亚洲综合在线电影| 久久激情五月激情| 91丨九色丨蝌蚪富婆spa| 精品美女在线观看| 偷拍一区二区三区| 色综合久久久久网| 国产午夜精品久久久久久免费视 | 亚洲国产美女搞黄色| 国产乱码精品一区二区三| 欧美美女激情18p| 亚洲欧美另类小说视频| 高清beeg欧美| 久久久久久久久久久久久久久99| 亚洲一区国产视频| 欧美在线免费观看亚洲| 中文字幕中文在线不卡住| 国产九色精品成人porny| 欧美videos中文字幕| 日韩经典中文字幕一区| 欧美日韩国产中文| 亚洲一区二区精品3399| 色偷偷88欧美精品久久久| 综合电影一区二区三区| jvid福利写真一区二区三区| 国产精品视频九色porn| 成人黄页毛片网站| 国产视频视频一区| 久久成人综合网| 欧美成人在线直播| 美女视频一区二区三区| 欧美电影免费观看高清完整版在线 | 高清不卡在线观看av| 日韩精品中文字幕在线不卡尤物 | 一区二区三区日韩欧美| 91福利资源站| 亚洲3atv精品一区二区三区| 制服.丝袜.亚洲.中文.综合| 视频一区中文字幕国产| 欧美电影免费观看完整版| 国产呦精品一区二区三区网站| 精品免费日韩av| 国产69精品久久久久毛片| 日本一区二区三区免费乱视频 | 最新国产精品久久精品| 成人精品鲁一区一区二区| 国产精品毛片a∨一区二区三区| www.欧美亚洲| 亚洲观看高清完整版在线观看| 欧美三级乱人伦电影| 免费观看一级欧美片| 久久久影视传媒| 成av人片一区二区| 一区二区三区四区不卡在线| 欧美日本一区二区| 国产酒店精品激情| 亚洲精品国久久99热| 日韩视频永久免费| 国产不卡一区视频| 亚洲图片自拍偷拍| 欧美精品一区二区三区高清aⅴ | 国产69精品久久99不卡| 亚洲免费在线电影| 91精品国产91久久久久久最新毛片| 老司机精品视频一区二区三区| 欧美国产激情二区三区| 日本精品一级二级| 久久精品99国产精品日本| 中文字幕免费一区| 666欧美在线视频| jlzzjlzz亚洲女人18| 日本不卡高清视频| 国产婷婷色一区二区三区| 欧美最新大片在线看| 国产永久精品大片wwwapp| 一区二区三区在线视频观看58| 久久这里只有精品6| 欧美日韩国产一区| 成人av在线一区二区| 日本免费在线视频不卡一不卡二| 国产嫩草影院久久久久| 欧美浪妇xxxx高跟鞋交| 99精品热视频| 国产精品99久久久久久有的能看 | 一区二区三区 在线观看视频| 精品福利在线导航| 欧美在线观看视频一区二区| 国产jizzjizz一区二区| 青椒成人免费视频| 亚洲人成网站色在线观看| 久久―日本道色综合久久| 在线观看亚洲a| 成人午夜视频在线观看| 精品一区在线看| 亚洲bt欧美bt精品| 亚洲摸摸操操av| 亚洲欧美在线视频| 国产精品午夜久久| 国产无人区一区二区三区| 欧美tickling挠脚心丨vk| 这里只有精品99re| 欧美情侣在线播放| 欧美性感一类影片在线播放| www.在线成人| 99久久精品国产导航| www.在线欧美| 99久久精品免费看国产| 成人一区二区三区在线观看 | 日产欧产美韩系列久久99| 亚洲一区二区av在线| 亚洲综合在线五月| 一区二区久久久久| 悠悠色在线精品| 亚洲国产精品一区二区尤物区| 一区二区中文字幕在线| 亚洲欧美自拍偷拍| 亚洲乱码中文字幕综合| 亚洲日本va午夜在线电影| 亚洲人成在线播放网站岛国| 亚洲精品伦理在线| 亚洲国产精品久久久男人的天堂| 亚洲高清视频在线| 五月激情综合色| 美女免费视频一区二区| 国产一区在线看| 成年人国产精品| 欧美亚男人的天堂| 在线成人免费视频| 精品欧美久久久| 国产精品久久久久影院| 一区二区在线观看免费视频播放| 一区二区三区.www| 狂野欧美性猛交blacked| 国产一区欧美二区| 9久草视频在线视频精品| 91激情在线视频| 日韩视频在线观看一区二区| 国产欧美日韩综合精品一区二区| 中文字幕在线免费不卡| 午夜日韩在线观看| 精品一区二区三区视频在线观看| 国产一区二区三区久久久| eeuss影院一区二区三区 | 中文字幕 久热精品 视频在线 | 国产一区二区中文字幕| av不卡免费在线观看| 精品视频免费在线| 26uuu亚洲婷婷狠狠天堂| 国产精品免费久久久久| 亚洲成人免费视| 国产成人精品免费看| 在线免费观看日本一区| 精品国产乱码久久久久久闺蜜| 中文乱码免费一区二区| 水野朝阳av一区二区三区| 国产精品亚洲视频| 精品视频123区在线观看| 欧美va天堂va视频va在线| 一区二区理论电影在线观看| 极品少妇一区二区三区精品视频 | 成人av第一页| 69堂国产成人免费视频| 中文字幕一区在线观看视频| 日本午夜一本久久久综合| 成人毛片在线观看| 日韩一区二区视频在线观看| 国产精品国产三级国产有无不卡| 午夜国产精品影院在线观看| 成人国产一区二区三区精品| 91精品在线免费| 一区二区三区电影在线播| 国产精品一区二区三区乱码| 69堂成人精品免费视频| 一个色综合网站| 91亚洲永久精品| 国产三级精品视频| 精品一区二区三区在线播放视频 | 91蜜桃免费观看视频| 欧美v亚洲v综合ⅴ国产v| 日韩精品午夜视频| 色偷偷久久人人79超碰人人澡 | 精品福利二区三区| 日韩成人一区二区| 欧美性xxxxxxxx| 亚洲色图欧洲色图| 99热99精品| 中文字幕一区在线| 成人小视频免费在线观看| 久久九九全国免费| 国模少妇一区二区三区| 精品国精品国产尤物美女| 日韩不卡一二三区| 制服视频三区第一页精品| 亚州成人在线电影| 5566中文字幕一区二区电影| 天天操天天干天天综合网| 欧美丰满一区二区免费视频| 婷婷开心激情综合| 日韩午夜在线影院|