6.1.2 数据结构初始化
服务子层在收发相关数据报文时,可能需要申请或释放网络内存块。为避免系统正常运行期间频繁使用系统内存块操作导致效率降低或稳定性降低,可以在初始化时预先申请一个内存区域,由 netBufLib 所提供的net Buffer控制机制进行管理。
其它如接口的状态、服务子层数据封装类型、MUX接口初始化 Cookie、服务子层地址映射表等参数结构也需要在这一步进行初始化。
6.1.3 数据收发处理
如上所述,网络服务子层通过 muxBind 函数将数据接收例程绑定至底层设备驱动。底层设备驱动接收到报文后,通过调用 stackRcvRtn 函数将数据经由 MUX 层查找特定协议类型返回至服务子层。服务子层处理该报文之后如果返回 FALSE,则系统将报文发往其它服务子层继续处理,否则,该报文被丢弃。
数据报文被封装成 mBlk 形式从协议栈上层发送至网络服务子层,网络服务子层对报文进行处理后,再调用 muxSend 或 muxTkSend 函数将报文通过 MUX 层发送至该接口设备驱动。在这期间,网络服务子层可以通过调用该接口设备指定的地址解析函数获得二层目标地址,然后对数据帧进行二层封装。
具体的数据收发处理实例可参见 6.2.3 AAL5 Service 协议数据处理流程。
6.1.4 错误报告
当设备驱动层向网络服务子层汇报收发或其它错误时,网络服务子层可以通过回调 stackErrorRtn 函数向上层报告这个错误。
6.1.5 设备控制
设备驱动程序需要增加相应的控制接口函数(如 xxxIoCtrl), 并注册至 MUX 层,网络服务子层就可以通过调用 muxIoCtl 控制底层设备驱动。
6.2 AAL5 业务Service的实现
Service 层主要实现如下相关协议类型:
ATMARP Service. 用于收发 ATMARP 报文,绑定类型为 0x1577
PPPOE Service, 用于收发 PPPOE 报文,绑定类型为 0x8863,0x8864
PPPOA Service, 用于收发 PPPOA 报文,绑定类型为 0x2516
如6.1 所介绍的,我们首先需要向 MUX 注册(绑定)这些 Service,然后在 Service 的收发中对相关协议的数据报文进行处理。
6.2.1 向vxworks MUX 层注册Service
1) 根据协议类型,初始化封装数据、大小等值
2) 用muxBind 函数绑定接收函数,使某接口收到相应类型的报文时能够提 交该函数处理。例如(代码摘选自 atmSrv.c atmSrv1483RoutedAttach函数),绑定 ATMARP 时作如下调用:
#define MUX_PROTO_ATMARP 0x1577
int unit = 1;
muxBind(“pvc”, unit ,(FUNCPTR) AtmSrv1483RoutedRcvRtn, NULL,NULL,NULL, MUX_PROTO_ATMARP, "AtmSrv1483RoutedRcvRtn", unit);
/* 此处,把 AtmSrv1483RoutedRcvRtn 函数绑定至pvc1接口,当pvc1收到 0x1577 类型的数据报文时,就会自动提交给该函数进行处理 */
3) 初始化 Service 网络参数,定义报文发送时的处理函数,并向 MUX 层注册该Service,例程如下:
struct ifnet* pIfp = &AtmSrvCtrl[unit].ifp;
bzero ((char *) pIfp, sizeof (struct ifnet));
pIfp->if_unit = unit;
pIfp->if_name = ifName;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说计算机ADSL接入及共享技术的实现(一)(6)在线全文阅读。
相关推荐: