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

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

?? ndis2.c

?? libcap是常用的linux抓包程序,屬于open source項目.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 
 * Copyright (c) 1993,1994
 *      Texas A&M University.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by Texas A&M University
 *      and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * Developers:
 *             David K. Hess, Douglas Lee Schales, David R. Safford
 *
 * Heavily modified for Metaware HighC + GNU C 2.8+
 *             Gisle Vanem 1998
 */

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <io.h>
#include <fcntl.h>
#include <malloc.h>
#include <string.h>

#include "pcap-dos.h"
#include "pcap-int.h"
#include "msdos/ndis2.h"

#if defined(USE_NDIS2)

/*
 *  Packet buffer handling
 */
extern int     FreePktBuf  (PktBuf *buf);
extern int     EnquePktBuf (PktBuf *buf);
extern PktBuf* AllocPktBuf (void);

/*
 *  Various defines
 */
#define MAX_NUM_DEBUG_STRINGS 90
#define DEBUG_STRING_LENGTH   80
#define STACK_POOL_SIZE       6
#define STACK_SIZE            256

#define MEDIA_FDDI            1
#define MEDIA_ETHERNET        2
#define MEDIA_TOKEN           3

static int     startDebug     = 0;
static int     stopDebug      = 0;

static DWORD   droppedPackets = 0L;
static WORD    frameSize      = 0;
static WORD    headerSize     = 0;
static int     mediaType      = 0;
static char   *lastErr        = NULL;

static BYTE    debugStrings [MAX_NUM_DEBUG_STRINGS][DEBUG_STRING_LENGTH];
static BYTE   *freeStacks   [STACK_POOL_SIZE];
static int     freeStackPtr = STACK_POOL_SIZE - 1;

static ProtMan protManEntry = NULL;
static WORD    protManDS    = 0;
static volatile int xmitPending;

static struct _PktBuf        *txBufPending;
static struct _CardHandle    *handle;
static struct _CommonChars    common;
static struct _ProtocolChars  protChars;
static struct _ProtDispatch   lowerTable;

static struct _FailingModules failingModules;
static struct _BindingsList   bindings;

static struct {
         WORD  err_num;
         char *err_text;
       } ndis_errlist[] = {

  { ERR_SUCCESS,
    "The function completed successfully.\n"  },

  { ERR_WAIT_FOR_RELEASE,
    "The ReceiveChain completed successfully but the protocol has\n"
    "retained control of the buffer.\n"  },

  { ERR_REQUEST_QUEUED,
    "The current request has been queued.\n"  },

  { ERR_FRAME_NOT_RECOGNIZED,
    "Frame not recognized.\n"  },

  { ERR_FRAME_REJECTED,
    "Frame was discarded.\n"  },

  { ERR_FORWARD_FRAME,
    "Protocol wishes to forward frame to another protocol.\n"  },

  { ERR_OUT_OF_RESOURCE,
    "Out of resource.\n"  },

  { ERR_INVALID_PARAMETER,
    "Invalid parameter.\n"  },

  { ERR_INVALID_FUNCTION,
    "Invalid function.\n"  },

  { ERR_NOT_SUPPORTED,
    "Not supported.\n"  },

  { ERR_HARDWARE_ERROR,
    "Hardware error.\n"  },

  { ERR_TRANSMIT_ERROR,
    "The packet was not transmitted due to an error.\n"  },

  { ERR_NO_SUCH_DESTINATION,
    "Token ring packet was not recognized when transmitted.\n"  },

  { ERR_BUFFER_TOO_SMALL,
    "Provided buffer was too small.\n"  },

  { ERR_ALREADY_STARTED,
    "Network drivers already started.\n"  },

  { ERR_INCOMPLETE_BINDING,
    "Protocol driver could not complete its bindings.\n"  },

  { ERR_DRIVER_NOT_INITIALIZED,
    "MAC did not initialize properly.\n"  },

  { ERR_HARDWARE_NOT_FOUND,
    "Hardware not found.\n"  },

  { ERR_HARDWARE_FAILURE,
    "Hardware failure.\n"  },

  { ERR_CONFIGURATION_FAILURE,
    "Configuration failure.\n"  },

  { ERR_INTERRUPT_CONFLICT,
    "Interrupt conflict.\n"  },

  { ERR_INCOMPATIBLE_MAC,
    "The MAC is not compatible with the protocol.\n"  },

  { ERR_INITIALIZATION_FAILED,
    "Initialization failed.\n"  },

  { ERR_NO_BINDING,
    "Binding did not occur.\n"  },

  { ERR_NETWORK_MAY_NOT_BE_CONNECTED,
    "The network may not be connected to the adapter.\n"  },

  { ERR_INCOMPATIBLE_OS_VERSION,
    "The version of the operating system is incompatible with the protocol.\n"  },

  { ERR_ALREADY_REGISTERED,
    "The protocol is already registered.\n"  },

  { ERR_PATH_NOT_FOUND,
    "PROTMAN.EXE could not be found.\n"  },

  { ERR_INSUFFICIENT_MEMORY,
    "Insufficient memory.\n"  },

  { ERR_INFO_NOT_FOUND,
    "Protocol Mananger info structure is lost or corrupted.\n"  },

  { ERR_GENERAL_FAILURE,
    "General failure.\n"  }
};

/*
 *  Some handy macros
 */       
#define PERROR(str)    printf("%s (%d): %s\n", __FILE__,__LINE__,str)
#define DEBUG_RING()   (debugStrings[stopDebug+1 == MAX_NUM_DEBUG_STRINGS ? \
                        stopDebug = 0 : ++stopDebug])

/*
 * needs rewrite for DOSX
 */
#define MAC_DISPATCH(hnd)  ((struct _MacUpperDispatch*)(hnd)->common->upperDispatchTable)
#define MAC_STATUS(hnd)    ((struct _MacStatusTable*)  (hnd)->common->serviceStatus)
#define MAC_CHAR(hnd)      ((struct _MacChars*)        (hnd)->common->serviceChars)

#ifdef NDIS_DEBUG
  #define DEBUG0(str)      printf (str)
  #define DEBUG1(fmt,a)    printf (fmt,a)
  #define DEBUG2(fmt,a,b)  printf (fmt,a,b)
  #define TRACE0(str)      sprintf (DEBUG_RING(),str)
  #define TRACE1(fmt,a)    sprintf (DEBUG_RING(),fmt,a)
#else
  #define DEBUG0(str)      ((void)0)
  #define DEBUG1(fmt,a)    ((void)0)
  #define DEBUG2(fmt,a,b)  ((void)0)
  #define TRACE0(str)      ((void)0)
  #define TRACE1(fmt,a)    ((void)0)
#endif

/*
 * This routine is called from both threads
 */
void NdisFreeStack (BYTE *aStack)
{
  GUARD();

  if (freeStackPtr == STACK_POOL_SIZE - 1)
     PERROR ("tried to free too many stacks");

  freeStacks[++freeStackPtr] = aStack;

  if (freeStackPtr == 0)
     TRACE0 ("freeStackPtr went positive\n");

  UNGUARD();
}

/*
 * This routine is called from callbacks to allocate local data
 */
BYTE *NdisAllocStack (void)
{
  BYTE *stack;

  GUARD();

  if (freeStackPtr < 0)
  {
    /* Ran out of stack buffers. Return NULL which will start
     * dropping packets
     */
    TRACE0 ("freeStackPtr went negative\n");
    stack = 0;
  }
  else
    stack = freeStacks[freeStackPtr--];

  UNGUARD();
  return (stack);
}

CALLBACK (NdisSystemRequest (DWORD param1, DWORD param2, WORD param3,
                             WORD opcode, WORD targetDS))
{
  static int            bindEntry = 0;
  struct _CommonChars  *macCommon;
  volatile WORD result;

  switch (opcode)
  {
    case REQ_INITIATE_BIND:
         macCommon = (struct _CommonChars*) param2;
         if (macCommon == NULL)
	 {
           printf ("There is an NDIS misconfiguration.\n");
           result = ERR_GENERAL_FAILURE;
	   break;
	 }
         DEBUG2 ("module name %s\n"
                 "module type %s\n",
                 macCommon->moduleName,
                 ((MacChars*) macCommon->serviceChars)->macName);

         /* Binding to the MAC */
         result = macCommon->systemRequest ((DWORD)&common, (DWORD)&macCommon,
                                            0, REQ_BIND,
                                            macCommon->moduleDS);

         if (!strcmp(bindings.moduleName[bindEntry], handle->moduleName))
              handle->common = macCommon;
         else PERROR ("unknown module");
         ++bindEntry;
	 break;

    case REQ_INITIATE_UNBIND:
         macCommon = (struct _CommonChars*) param2;
         result = macCommon->systemRequest ((DWORD)&common, 0,
                                            0, REQ_UNBIND,
                                            macCommon->moduleDS);
         break;

    default:
         result = ERR_GENERAL_FAILURE;
	 break;
  }
  ARGSUSED (param1);
  ARGSUSED (param3);
  ARGSUSED (targetDS);
  return (result);
}

CALLBACK (NdisRequestConfirm (WORD protId, WORD macId,   WORD reqHandle,
                              WORD status, WORD request, WORD protDS))
{
  ARGSUSED (protId);    ARGSUSED (macId);
  ARGSUSED (reqHandle); ARGSUSED (status);
  ARGSUSED (request);   ARGSUSED (protDS);
  return (ERR_SUCCESS);
}

CALLBACK (NdisTransmitConfirm (WORD protId, WORD macId, WORD reqHandle,
                               WORD status, WORD protDS))
{
  xmitPending--;
  FreePktBuf (txBufPending);  /* Add passed ECB back to the free list */

  ARGSUSED (reqHandle);
  ARGSUSED (status);
  ARGSUSED (protDS);
  return (ERR_SUCCESS);
}


/*
 * The primary function for receiving packets
 */
CALLBACK (NdisReceiveLookahead (WORD  macId,      WORD  frameSize,
                                WORD  bytesAvail, BYTE *buffer,
                                BYTE *indicate,   WORD  protDS))
{
  int     result;
  PktBuf *pktBuf;
  WORD    bytesCopied;
  struct _TDBufDescr tDBufDescr;

#if 0
  TRACE1 ("lookahead length = %d, ", bytesAvail);
  TRACE1 ("ecb = %08lX, ",          *ecb);
  TRACE1 ("count = %08lX\n",         count);
  TRACE1 ("offset = %08lX, ",        offset);
  TRACE1 ("timesAllowed = %d, ",     timesAllowed);
  TRACE1 ("packet size = %d\n",      look->dataLookAheadLen);
#endif

  /* Allocate a buffer for the packet
   */
  if ((pktBuf = AllocPktBuf()) == NULL)
  {
    droppedPackets++;
    return (ERR_FRAME_REJECTED);
  }

  /*
   * Now kludge things. Note we will have to undo this later. This will
   * make the packet contiguous after the MLID has done the requested copy.
   */

  tDBufDescr.tDDataCount = 1;
  tDBufDescr.tDBufDescrRec[0].tDPtrType = NDIS_PTR_PHYSICAL;
  tDBufDescr.tDBufDescrRec[0].tDDataPtr = pktBuf->buffer;
  tDBufDescr.tDBufDescrRec[0].tDDataLen = pktBuf->length;
  tDBufDescr.tDBufDescrRec[0].dummy     = 0;

  result = MAC_DISPATCH(handle)->transferData (&bytesCopied, 0, &tDBufDescr,
                                               handle->common->moduleDS);
  pktBuf->packetLength = bytesCopied;

  if (result == ERR_SUCCESS)
       EnquePktBuf(pktBuf);
  else FreePktBuf (pktBuf);

  ARGSUSED (frameSize);
  ARGSUSED (bytesAvail);
  ARGSUSED (indicate);
  ARGSUSED (protDS);

  return (ERR_SUCCESS);
}

CALLBACK (NdisIndicationComplete (WORD macId, WORD protDS))
{
  ARGSUSED (macId);
  ARGSUSED (protDS);

  /* We don't give a hoot about these. Just return
   */
  return (ERR_SUCCESS);
}

/*
 * This is the OTHER way we may receive packets
 */
CALLBACK (NdisReceiveChain (WORD macId, WORD frameSize, WORD reqHandle,
                            struct _RxBufDescr *rxBufDescr,
                            BYTE *indicate, WORD protDS))
{
  struct _PktBuf *pktBuf;
  int     i;

  /*
   * For now we copy the entire packet over to a PktBuf structure. This may be
   * a performance hit but this routine probably isn't called very much, and
   * it is a lot of work to do it otherwise. Also if it is a filter protocol
   * packet we could end up sucking up MAC buffes.
   */

  if ((pktBuf = AllocPktBuf()) == NULL)
  {
    droppedPackets++;
    return (ERR_FRAME_REJECTED);
  }
  pktBuf->packetLength = 0;

  /* Copy the packet to the buffer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线欧美小视频| 国产+成+人+亚洲欧洲自线| 蜜臀av性久久久久蜜臀aⅴ| 久久国产人妖系列| 一本到三区不卡视频| 亚洲精品在线观| 天天做天天摸天天爽国产一区| 国产精品18久久久久久久久久久久| 欧美在线观看一区| 国产精品午夜在线观看| 九九国产精品视频| 欧美一区二区性放荡片| 一区二区三区四区中文字幕| 风间由美中文字幕在线看视频国产欧美| 欧美一区二区三区视频免费 | 国产精品每日更新| 精品一区二区三区影院在线午夜 | 国产婷婷色一区二区三区在线| 亚洲第一主播视频| 91麻豆精品视频| 日韩欧美123| 热久久久久久久| 欧美高清视频不卡网| 亚洲永久免费av| 色爱区综合激月婷婷| 亚洲色图欧美偷拍| 91热门视频在线观看| 国产精品情趣视频| 99国产精品国产精品久久| 国产精品视频在线看| 成人午夜激情影院| 国产精品久久久久毛片软件| 欧美三级资源在线| 伊人色综合久久天天| 91美女片黄在线观看91美女| 一区二区在线观看免费 | 成人午夜精品在线| 中文字幕在线一区免费| av亚洲精华国产精华精华 | 久久综合九色综合97_久久久| 日本中文在线一区| 欧美大片顶级少妇| 国产成人av电影在线观看| 久久精品男人天堂av| 岛国精品在线播放| 亚洲人成精品久久久久久| 91丨九色丨黑人外教| 亚洲人成精品久久久久| 在线观看一区不卡| 视频一区在线播放| 久久伊人中文字幕| 成人激情av网| 亚洲国产人成综合网站| 7777精品伊人久久久大香线蕉 | 久久美女高清视频| 成人午夜av电影| 一区二区三区在线观看动漫 | 欧美图区在线视频| 日本不卡视频在线观看| 国产日本一区二区| 欧洲生活片亚洲生活在线观看| 日韩 欧美一区二区三区| 久久精品一区蜜桃臀影院| 99久久久国产精品免费蜜臀| 亚洲已满18点击进入久久| 日韩免费电影一区| 91一区二区在线| 日韩成人午夜电影| 日韩美女视频一区二区| 3d成人动漫网站| 成人精品国产免费网站| 国产麻豆精品在线观看| 中文字幕一区二区三区在线观看| 欧美日韩欧美一区二区| 国产精品一区久久久久| 五月激情丁香一区二区三区| 国产欧美日本一区二区三区| 欧美高清视频不卡网| 99久久99久久综合| 久久99精品国产麻豆不卡| 一区二区三区在线免费观看| 久久精品人人做| 日韩女优毛片在线| 欧美中文字幕一区二区三区亚洲| 国产成人av电影在线观看| 日本不卡高清视频| 亚洲成av人片在www色猫咪| 亚洲国产精品精华液ab| 日韩一级黄色大片| 在线视频国内自拍亚洲视频| 高清成人免费视频| 蜜臀va亚洲va欧美va天堂| 一区二区欧美在线观看| 国产精品色呦呦| 欧美成人欧美edvon| 欧美精品色综合| 色天使久久综合网天天| 不卡一区在线观看| 国产精品一区三区| 国产米奇在线777精品观看| 亚洲成人av一区二区三区| 中文字幕一区二区不卡| 久久久蜜桃精品| 久久人人爽爽爽人久久久| 日韩精品一区二区三区三区免费| 欧美蜜桃一区二区三区| 欧洲日韩一区二区三区| 91在线精品一区二区| 成人a免费在线看| 不卡的av在线播放| 成人精品小蝌蚪| 国产成人精品免费看| 亚洲尤物在线视频观看| 一区二区国产盗摄色噜噜| 欧美视频中文字幕| 在线亚洲+欧美+日本专区| 色狠狠一区二区三区香蕉| 91视频免费看| 色久优优欧美色久优优| 欧美日韩一区视频| 91精品国产高清一区二区三区| 国产精品久久夜| 亚洲欧洲在线观看av| 国产精品成人一区二区艾草| 国产精品的网站| 日韩一区在线看| 亚洲一区在线播放| 日韩精品成人一区二区在线| 蜜乳av一区二区三区| 久久精品国产99| 国产黑丝在线一区二区三区| 不卡的电影网站| 欧美日韩免费高清一区色橹橹| 欧美老肥妇做.爰bbww视频| 日韩西西人体444www| 久久久精品影视| 亚洲欧美二区三区| 日韩成人一区二区三区在线观看| 久久久影院官网| 欧美精品一区二区三区很污很色的 | 亚洲精品成a人| 亚洲美腿欧美偷拍| 国产成人在线网站| 国产成人夜色高潮福利影视| 人人狠狠综合久久亚洲| 琪琪久久久久日韩精品| 99视频一区二区| 欧美一区二区视频观看视频| 亚洲综合小说图片| 美国三级日本三级久久99| 国产成人在线电影| 波多野结衣在线一区| 精品日韩99亚洲| 色8久久精品久久久久久蜜| 狠狠色2019综合网| 99精品在线观看视频| 欧美日韩aaa| 日本一区二区三区视频视频| 一区二区三区中文字幕精品精品 | 色综合久久久久久久久| 欧美日韩国产123区| 国产欧美日韩精品在线| 天天综合色天天综合色h| 国产成人精品1024| 欧美日韩午夜精品| 国产精品久久久久一区二区三区 | 欧美性色黄大片手机版| 精品国产自在久精品国产| 自拍偷在线精品自拍偷无码专区| 免费观看在线色综合| 欧美va亚洲va国产综合| 国产成人午夜电影网| 亚洲国产视频一区| 成人aaaa免费全部观看| 欧美电影免费观看高清完整版在线 | 亚洲午夜久久久久中文字幕久| 国产成人精品免费网站| 日韩欧美亚洲一区二区| 亚洲综合精品自拍| 91亚洲精品一区二区乱码| 欧美mv日韩mv国产网站app| 亚洲影视资源网| 色天天综合色天天久久| 国产精品免费观看视频| 国产一区二区在线看| 国产亚洲美州欧州综合国| 午夜精品成人在线视频| 欧美影视一区在线| 一区二区三区自拍| 一本色道a无线码一区v| 亚洲免费电影在线| 国产精品白丝av| 风间由美一区二区三区在线观看| 亚洲精品在线观看网站| 日韩欧美美女一区二区三区| 国产精品丝袜91| www.日本不卡| 国产精品久久久久四虎| 丁香婷婷综合激情五月色| 久久久欧美精品sm网站|