Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198803
  • 博文数量: 29
  • 博客积分: 1280
  • 博客等级: 中尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-22 16:23
文章分类

全部博文(29)

文章存档

2009年(3)

2008年(1)

2007年(1)

2006年(3)

2005年(21)

我的朋友

分类: WINDOWS

2005-10-17 15:27:49

96,97年写的东西.那时候就对网络很有兴趣了,这是第一部分

          NETWORKING SERVICES -----DLC INTERFACE

作者:谢小荣

NTW2K,DLC接口可以被基于WIN32位的应用程序访问(16位也可),32位适用CCB2接口,16位适用CCB1接口,但WIN95/98不支持CCB116位接口.

在DLC接口中最重要的是CCB(COMMAND CONTROL BLOCK),即命令控制块,它和NetBios接口的NCB块一样,都是传给设备驱动程序的一个数据结构,该协议中所用的网络地址,包括以太网地址都是用一个特殊的格式,此格式中的字节的每一位在网络中表现出相反的顺序,此顺序与IP包头部的IP地址顺序大体相同.该协议工作在链路层,可对网络适配器进行操作,并可直接发送和接收网络帧.在学习使用DLC 接口时,你必须首先具备对各种网络协议的了解,各种数据包头部的数据结构等等.

第一章:DLC协议命令

在命令控制块中的命令大多数都需要一个站点标志,它是指一个指示站点(DIRECT STATION),一个服务访问点(service access point),或是一个连接站点(LINK STATION).WINDOWS平台,通过调用AcsLan()函数来发出一个DLC命令.该函数带有两个LLC_CCB结构,该结构的主体主要是一个要执行的命令,一个触发事件句柄,一个参数表的指针.在命令中主要分为三个群组:

一、Direct Interface Commands

此命令可使你对适配器执行控制功能,如打开或关闭一适配器,得到该适配器的错误状态,设置地址等。这些命令主要有以下几个:

LLC_DIR_CLOSE_ADAPTER

在逻辑上关闭适配合器,并释放所占资源,结束未决命令

LLC_DIR_CLOSE_DIRECT

释放所有指示站点的所有权

LLC_DIR_INITIALIZE

初始化适配器,返回任何未决命令,释放缓冲

LLC_DIR_INTERRUPT

不做任何事情

LLC_DIR_OPEN_ADAPTER

为通信准备设备驱动程序,适配器在逻辑上是关闭的

LLC_DIR_OPEN_DIRECT

给应用程序对指示站点的拥有权,并能用LLC_RECEIVE接收网络帧

LLC_DIR_READ_LOG

读或重置日志

LLC_DIR_SET_EXCEPTION_FLAGS

定义一例外标志

LLC_DIR_SET_FUNCTIONAL_ADDRESS

设置或重置接收数据的函数地址

LLC_DIR_SET_GROUP_ADDRESS

设置组播地址,对于没有多播地址的以太网此命令将失败

LLC_DIR_SET_MULTICAST_ADDRESS

设置一个48位的多播地址,如果该以太网不支持,命令将失败

LLC_DIR_STATUS

读状态信息

LLC_DIR_TIMER_CANCEL

结束一个定时器

LLC_DIR_TIMER_CANCEL_GROUP

结束一组定时器

LLC_DIR_TIMER_SET

设定一定时器

 

二、DLCIEEE802.3)接口命令

此接口命令提供对逻辑链路层的控制,提供无连接和导向连接服务。 

LLC_DLC_CLOSE_SAP

关闭SAP站点(直到所有连接站点关闭才关闭)

LLC_DLC_CLOSE_STATION

关闭连接站点

LLC_DLC_CONNECT_STATION

在本地与远程站点建立或完成一个连接,本地与远程站点都必须发出一个命令来确立连接

LLC_DLC_FLOW_CONTROL

SAP中的连接站点中控制访问数据流

LLC_DLC_MODIFY

在一个连接站点处于忙状态时必须立即发出此命令,当缓冲区有足够的空间接收帧时,设备驱动程序将清除忙状态标志

LLC_DLC_OPEN_SAP

激活一个SAP,为SAP保存许多连接站点

LLC_DLC_OPEN_STATION

分配资源给一个连接站点

LLC_DLC_REALLOCATE_STATIONS     

重新分配已分配给SAP的连接站点的数量,当减少连接站点数量时,命令返回没有分配的站点给适配器缓冲池,当增加联结站点数时,命令从适配器缓冲池分配一个新的站点.

LLC_DLC_RESET

重置SAP和相关联的站点,释放所占资源,终止所有未决命令

LLC_DLC_SET_THRESHOLD

设置SAP或指示站点的缓冲池的限制,当缓冲数量不够时,应用程序将收到通知.

LLC_DLC_STATISTICS

读或重置日志

 

三、传输和接收命令

使    用此命令可在网络帧一级进行数据交换,:协议驱动程序把应用程序缓冲区中的数据

移  到网卡的工作区中进行发送,并把网卡中的数据转移到应用程序的数据区中.

LLC_BUFFER_CREATE

建立一新的DLC缓冲池并返回一句柄,应用程序在建立之前必须打开至少一个适配器

LLC_BUFFER_FREE

返回一个或多个缓冲给适配器,此缓冲必须用LLC_BUFFER_GET得到

LLC_BUFFER_GET

返回请求的缓冲,你可为指定的帧的大小得到几个大小相同的或最佳的一组缓冲

LLC_READ

执行一读指令,当系统设置此结构成员uchDlcStatus和置uchDlcStatus为传信状态时,此命令完成,数据和可选头开始于偏移64

LLC_READ_CANCEL

结束一未决的LLC_READ命令

LLC_RECEIVE

接收数据,如果应用程序没有建立一缓冲池,命令将失败

LLC_RECEIVE_CANCEL

结束一未决的LLC_RECEIVE命令

LLC_RECEIVE_MODIFY

接收数据并把数据的一些放入用户的数据缓冲中

LLC_TRANSMIT_DIR_FRAME

传送数据到指示站点

LLC_TRANSMIT_FRAMES

 

LLC_TRANSMIT_I_FRAME

传送信息数据给连接站点

LLC_TRANSMIT_TEST_CMD

请求适配器传送一测试位置位的命令网络帧,该命令只用于SAP

LLC_TRANSMIT_UI_FRAME

传送一未编号的信息数据给SAP,该命令只用于SAP

LLC_TRANSMIT_XID_CMD

传送一测试位置位的XID命令, 该命令只用于SAP

LLC_TRANSMIT_XID_RESP_FINAL

传送一结束位置位的回应XID命令, 该命令只用于SAP,

LLC_TRANSMIT_XID_RESP_NOT_FINAL

传送一结束位未置位的回应XID命令, 该命令只用于SAP,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上为DLC调用的所有命令,每个命令均带有一个相应的参数表。

当一个同步命令完成时,可用以下几种方法或几种方法的结合:

*  设置LLC_CCBulCompletionFlag 为一个非0,然后发出一个 LLC_READ命令读命令完成状态.

*  LLC_CCB结构的成员hCompletionEvent 提供一事件几柄.在命令完成后协议驱动程序设置事件为以传信状态来通知应用程序.可用WaitForSingleObject(hEvent,毫秒数)来等待事件的发生.

* 测试LLC_CCB

阅读(4158) | 评论(0) | 转发(0) |
0

上一篇:BSD系统调用规范

下一篇:DLC协议二

给主人留下些什么吧!~~