网站大量收购独家精品文档,联系QQ:2885784924

vlan源代码学习.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vlan源代码学习

一.关于全局变量g_Vlan_TAB: 此全局变量用于存放当前的交换机上的所有vlan信息。 1.首先他的第一个字段是:EventQ_T eventQ;结构体EventQ_T 的原形是:typedef struct EventQ_S***EventQ_T; 分析: (1) 整个程序维护一个事件链表,每个节点存放有:指向下一个节点的指针,指向事件函数的指针,事件函数的优先级;三个属性段。 2.他的第二个字段是:VlanEntry *pVlanTAB[MAX_VID_NUM],其中MAX_VLAN_NUM的值是4096,其中存储的是交换机所能容纳的最大的vlan数目;此数组的下标即vlan的vlan-id,如相应的vlan存在,指针指向vlan信息块的地址,否则为空。 分析: 他有六个属性字段,第一个是usVID:用于存放它自己的vlanID号;第二个字段是 szVlanName:用于存放vlan的名字;第三个字段是portMap:用于存放属于这个vlan的端口的端口列表;第四个字段是pAssoVlan;第五个字段是usRegAdmCtrl;第六个字段是:usTxUnTag; 3.第三个字段是pSwPortTab[MAX_PHYPORT_NUM+MAX_LAG_NUM+1],其是指向交换机端口的指针数组;其中存放的是交换机各个端口的状态及信息; 4.第四个字段是rwLock,他用于对全局变量读写的锁定; 5.第五个字段是evtLock,用于对事件的锁定; 二.vlan的创建: 命令: vlan vlan-id 功能:创建vlan并且进入vlan配置模式,在vlan模式中,用户可以配置vlan名称和为该vlan分配交换机端口; 源码命令: CLI (vlan_cli, vlan_cli_cmd, vlan 1-4094 (name WORD|), Vlan Commands$VLAN命令, Vlan ID 1-4094$Vlan标示符 1-4094, Vlan name$VLAN描述, Name$描述) 源码分析: 1.首先调用GLI_GET_INTEGER_RANGE()宏; 2.然后由GLI_GET_INTEGER_RANGE()宏调用cmd_str2int()将vlanId号字符串转换为相应的数值,并将数值返回; 3.然后由GLI_GET_INTEGER_RANGE()宏检测返回的数值,并作出相应的判断; 4.然后再调用fetchConfigVlan()并将vlanId号作为传入参数进行检测; 5.然后再由fetchConfigVlan()调用getVlanType()取得此vlanId号对应的类型,因为创建vlan的时候此vlan还不存在,函数不会改变他的类型,所以他得到的类型是VLAN_TYPE_ALL,然后就直接调用函数createVlan(),并传入类型VLAN_TYPE_UNIVERSAL; 6.而对于函数createVlan(): 6.1.此函数首先是加锁; 6.2.然后根据类型调用相应的函数,因为创建vlan的时候传入的类型为VLAN_TYPE_UNIVERSAL,故调用createUniversalVlan()创建vlan, 6.2.1.对于函数createUniversalVlan():因为刚创建vlan的时候,此vlan暂时不存在,其相应的指针都为空,故其将会跳过函数setUniversalVlan()而直接调用函数createOneVlan()来创建vlan,其类型为VLAN_TYPE_UNIVERSAL;在函数createOneVlan()中,其先分配vlan信息记录块的空间,然后将其初始化,接着调用函数drvInsertVlan()在交换机上创建vlan,最后将此段空间和全局变量g-vlanTAB联系起来,并在全局变量中填充相关的vlan信息(如端口列表,事件列表等); 6.2.2.在函数createUniversalVlan()中接下来是遍历交换机上的所有端口,跳过类型为PORT_TYPE_AGG_MEMBER和PORT_TYPE_ROUTER的端口,在其他的端口类型中,如果端口的工作模式为Trunk模式则处理方式为:如果端口的pVID等于当前的vlan-ID则就将当端口加入到当前vlan中去;如果端口的允许通过的vlan链表中有当前的vlan-ID号,那么也将端口加入到当前vlan中;其他情况就跳过;如果端口的工作模式为Access模式其处理方式为:如果端口的pVID等于当前的vlan-ID号,那么就将端口加入到当前vlan中,否则就跳过; 6.2.3.在函数cr

您可能关注的文档

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档