Dynamips设计与分析
删除一个帧中继交换机
调用registry_delete_if_unused(name,OBJ_TYPE_FRSW,frsw_free,NULL)实现。
3.创建一个交换机连接
先要分配一个新的VC,再要检查NIOs是合法的并且输入VC不存在,然后再增加一个RX监听器。
4.删除一个交换机连接
找到一个匹配的VC,然后删除它。
5.保存帧中继交换机的配置信息
保存帧中继交换机的名称,VC(虚拟连接)的输入、输出名称,和dlci_in、dlci_out等信息。
6.读取帧中继交换机配置文件
当需要应用帧中继交换机的时候就需要读取创建的帧中继交换机的配置信息。通过文件名匹配进行读取。
7.启动一个虚拟的帧中继交换机
函数实现如下:
int frsw_start(char *filename)
{
frsw_table_t *t;
if (!(t = frsw_create_table("default"))) {
fprintf(stderr,"FRSW: unable to create virtual fabric table.\n");
return(-1);
}
if (frsw_read_cfg_file(t,filename) == -1) {
fprintf(stderr,"FRSW: unable to parse configuration file.\n");
return(-1);
}
frsw_release("default");
return(0);
}
4.2.2 虚拟以太网交换机的实现
在这里主要分析如下几个部分:
创建一个虚拟的以太网交换机
释放虚拟以太网交换机占用的资源
删除一个虚拟以太网交换机
为虚拟以太网交换机增加一个网络输入输出
从虚拟以太网交换机中移除一个网络输入输出
启动一个虚拟以太网交换机
1.创建一个虚拟的以太网交换机
首先应该为要创建的虚拟以太网交换机分配空间,并在内存中设置他的位置,大小,在注册表中增加要创建的信息,包括名称,类型(这里当然是以太网交换机)以及以太网交换机表的结构信息。
这个函数的参数是name,即创建的以太网虚拟机的名称,首先定义一个以太网交换机表的指针t,然后给要创建的以太网虚拟机分配空间,然后调用函数memset(t,0,sizeof(*t)),即在虚拟内存中进行初始化设置。还要对名称进行合法性判断,不合法转到name出错处理,合法则调用registry_add函数在registry中增加记录,包括其名称,以及对象类型,这里是以太网交换机,然后判断能不能register switch,如不能则转到reg出错处理。否则返回t值达到创建的目的。该函数实现如下:
ethsw_table_t *ethsw_create(char *name)
{
ethsw_table_t *t;
if (!(t = malloc(sizeof(*t))))
return NULL;
memset(t,0,sizeof(*t));
pthread_mutex_init(&t->lock,NULL);
if (!(t->name = strdup(name)))
goto err_name;
if (registry_add(t->name,OBJ_TYPE_ETHSW,t) == -1) {
fprintf(stderr,"ethsw_create: unable to register switch '%s'\n",name);
goto err_reg;
}
return t;
err_reg:
free(t->name);
err_name:
free(t);
return NULL;
}
2.释放虚拟以太网交换机占用的资源
函数原型为:
static int ethsw_free(void *data,void *arg)
释放data->nio[i],再释放data->name,最后释放data。
3.删除一个虚拟以太网交换机
函数原型为:
int ethsw_delete(char *name)
通过调用registry_delete_if_unused(name,OBJ_TYPE_ETHSW,ethsw_free,NULL)函数来实现。
4.为虚拟以太网交换机增加一个网络输入输出
函数原型为:
int ethsw_add_netio(ethsw_table_t *t,char *nio_name)
尝试在NIO 列阵中查找一个free slot,如果没有free slot存在的话转到出错处理,然后获取NIO标志并且增加它的参考计数,默认的端口是连接在VLAN 1。
5.从虚拟以太网交换机中移除一个网络输入输出
函数原型为:
int ethsw_remove_netio(ethsw_table_t *t,char *nio_name)
在NIO 列阵设法查找NIO,在MAC地址表中除去这个端口,然后再从RX多重通道中移除这个NIO。
6.启动一个虚拟以太网交换机
想要实现启动一个以太网交换机,首先要创建一个以太网交换机,这个过程调用ethsw_create函数来实现,然后再读取以太网交换机的配置信息,这个过程通过调用ethsw_read_cfg_file函数来实现,这两个过程中要处理两种情况,一是无法创建,二是无法解析配置文件,这两种情况都要显示出错信息并返回值-1,最后要通过ethsw_release函数发布刚才创建的以太网交换机实现,以达到正常启动一个以太网交换机的目的。函数实现如下:
int ethsw_start(char *filename)
{
ethsw_table_t *t; /* 创建一个默认的以太网交换机 */
/* 不能创建则显示出错 */
if (!(t = ethsw_create("default"))) {
/* 无法解析则显示出错 */
if (ethsw_read_cfg_file(t,filename) == -1) {
fprintf(stderr,"ETHSW: unable to parse configuration file.\n");
return(-1);
}
ethsw_release("default");
return(0);
}
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] ... 下一页 >>
Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第17页下载如图片无法显示或论文不完整,请联系qq752018766