计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

ADSL接入及共享技术的实现网络毕业论文(5)

2013-09-06 01:12
导读:函数),绑定 ATMARP 时作如下调用: #define MUX_PROTO_ATMARP 0x1577 int unit = 1; muxBind(“pvc”, unit ,(FUNCPTR) AtmSrv1483RoutedRcvRtn, NULL,NULL,NULL, MUX_PROTO_ATMARP, "AtmSrv1483Ro
函数),绑定 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;

     muxIoctl(AtmSrvCtrl[unit].pCookie, EIOCGFLAGS, (caddr_t)&flags);

     pIfp->if_flags = flags;

     if (muxIoctl(AtmSrvCtrl[unit].pCookie, EIOCGMIB2, (caddr_t)&mib2Tbl) == ERROR)

         return (ERROR);

     pIfp->if_mtu = mib2Tbl.ifMtu;

     pIfp->if_baudrate = mib2Tbl.ifSpeed;

     pIfp->if_type = mib2Tbl.ifType;

     pIfp->if_addrlen = mib2Tbl.ifPhysAddress.addrLength;

     pIfp->if_flags  |= IFF_BROADCAST;

     if (muxIoctl (AtmSrvCtrl[unit].pCookie, EIOCGHDRLEN, (caddr_t)&ifHdrLen)!= OK)

         pIfp->if_hdrlen = 0;

     else

         pIfp->if_hdrlen = (UCHAR)ifHdrLen;

     pIfp->if_init   = NULL;

     pIfp->if_ioctl  = ifIoCtrl;

/* 在这里定义该协议类型报文发送时要调用的处理函数 */

    pIfp->if_output = AtmSrv1483RoutedService;

     pIfp->if_reset  = NULL;

     pIfp->pCookie = AtmSrvCtrl[unit].pCookie;

     pIfp->if_resolve = NULL;

     pIfp->if_flags |= (IFF_UP | IFF_RUNNING | IFF_NOTRAILERS | IFF_NOARP);

     if(atmif[unit].ifp)

         if_dettach(atmif[unit].ifp);

    /* 向 MUX 层注册该 Service */

    if_attach (pIfp);

6.2.2   Service 数据结构初始化

   我们定义 AAL5 业务网络服务子层的数据结构如下:

typedef    struct atm_srv_ctrl

{

   int             tLinkType;        /* 定义协议类型*/

   int             encapLength;      /* 定义该协议封装用的 PDU 大小*/

   char            encapData[50];    /* 该协议使用的 PDU 内容 */

   END_OBJ *       pCookie;          /* 底层设备驱动单元索引 */

   struct ifnet    ifp;              /* 注册后返回的网络服务子层索引*/

}ATM_SRV_CTRL;

其中:

  tLinkType 定义的协议类型主要有RFC1483Bridged, RFC1483Routed, ATMARP,PPPOA,PPPOE等。在 atmifAttach 例程中,就是将该值作为协议类型参数调用 muxBind 函数的。

  EncapLength、EncapData 针对 RFC1483Bridged、RFC1483Routed、ATMARP 等协议的规定进行相应初始化及数据填充,供底层驱动在封装、解封装时直接作为依据。

  PCookie 是 muxBind 底层设备驱动后返回的设备索引号,以便系统卸载网络服务子层时可解除该绑定。

  Ifp 是网络服务子层 Attach至协议栈时返回的子网接口索引号,以便系统卸载该 Service 时可解除绑定。

  6.2.3   Service 协议数据收发流程

  Service 正确绑定至协议栈后,就可以接收SAR END驱动层传入的该协议类型数据报文并对其处理,根据处理的结果选择转发或丢弃;对于协议栈下发的报文,也可以方便地进行相应协议封装,再交给 END驱动发送。其收发流程框图如图 6-1 所示。

(科教作文网http://zw.ΝsΕAc.com发布)

                                                     


图6-1 Service 收发流程示意图

接收流程(虚线箭头所示):

1)SAR 模块收到报文,产生中断,进入接收中断处理例程

2)调用END_RCV_RTN_CALL将报文返回给协议栈(reserved 中存放协议类型)

3)MUX层询问该报文的协议类型

4)SAR驱动层将 reserved 中的类型返回给MUX层

5)MUX层根据协议类型将报文提交给相应的 Service.

6)Service 解封装后,调用 do_protocol_with_type将报文提交给协议栈

发送流程(实线箭头所示):

1)协议栈通过MUX层发送报文

2)MUX 层将报文传给预先绑定的 Service

3)Service 对数据进行封装后,return False,将数据返回 MUX 层

4)MUX 层将数据发送到 SAR 模块相应的 PVC 接口

5)SAR 模块相应的 PVC 接口发送该报文。

  6.3  RFC1483协议报文处理

  由于 RFC1483数据报文的封装格式比较简单,我们将该类型报文的封装、解封装例程放在 END 驱动中实现,以提高系统对该类型报文的处理效率。

  6.3.1  RFC1483 报文封装格式

  RFC1483 标准描述了ATM网络上承载无连接网络互连业务(即路由和桥接的协议数据单元)的两种不同方法。第一种方法允许在一条 ATM 虚电路上复用多个协议,这是需要在所传送的 PDU 前加上 IEEE802.2 链路控制信头,以此来表示所传递的 PDU 的协议,这种方法称为 LLC 封装; 第二种方法是一个高层协议由一条ATM虚电路来承载,这种方法成为基于 VC 的复用。

  6.3.1.1  LLC 封装

  在 LLC 封装中,路由协议通过在 PDU 前加一个

上一篇:计算机网络安全浅析网络毕业论文 下一篇:没有了