毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第20页

更新时间:2009-4-16:  来源:毕业论文
Dynamips及相关教学软件研究与设计
显示设备信息
函数原型为:
void dev_show(struct vdevice *dev)
显示设备的各种参数信息。先判断参数dev的合法性,再显示设备指向的名称,物理地址,物理长度。
6.映射一个设备
在指定的物理地址中重新映射一个设备,先判断参数name是否存在,然后把参数paddr赋给设备指向的物理地址(dev->phys_addr),把参数len赋给设备指向的物理长度(dev->phys_len),把orig->fd赋给设备指向的fd,把orig->主机地址(orig->host_addr)赋给设备指向的主机地址(dev->host_addr),把orig->handler赋给设备指向的handler(dev->handler),最后返回dev各种值。
4.3.3 虚拟输入输出(IO)的实现
在这里主要分析PCI I/O和Network Input/Output(NIO)
首先分析PCI I/O的实现
 增加一个PCI I/O
 移除PCI I/O
 初始化PCI I/O
再分析NIO
 创建一个新的NetIO
 删除一个NetIO
 保存NETIO配置信息
 通过NETIO发送一个包
 通过NETIO接收一个包
 TCP sockets的实现
 UDP sockets的实现
1.增加一个PCI I/O
增加一个PCI I/O设备,首先第一步是为其分配空间,分配好空间后就要为其各属性赋上相应的值,这样就达到创建一个PCI I/O设备的目的了。
具体情况是先定义一个i/o设备指针p,先为新的I/O device分配空间,将参数star赋给p指向的start,将参数end赋给p指向的end,将参数dev赋给p指向的real_dev,再将参数handle赋给p指向的handler,最后再把p赋给d指向的设备表dev_list并返回p。
此函数如下:
struct pci_io_device *pci_io_add(struct pci_io_data *d,
                                 m_uint32_t start,m_uint32_t end,
                                 struct vdevice *dev,dev_handler_t handler)
{
   struct pci_io_device *p;
   if (!(p = malloc(sizeof(*p)))) {
      fprintf(stderr,"pci_io_add: unable to create a new device.\n");
      return NULL;
   }                        /* 分配空间 */
   p->start    = start;         /* 为各属性赋值 */
   p->end      = end;
   p->real_dev = dev;
   p->handler  = handler;
   p->next = d->dev_list;
   p->pprev = &d->dev_list;
   if (d->dev_list != NULL)          /* 在设备列表中增加记录 */
      d->dev_list->pprev = &p->next;
   d->dev_list = p;
   return p;

2.移除PCI I/O
函数原型为:
void pci_io_data_remove(vm_instance_t *vm,struct pci_io_data *d)
首先保证d不为空,然后移除pci i/o设备,再释放d自身的结构。
3.初始化PCI I/O
首先为其分配空间,然后在内存中设置相关信息,接着调用初始化设备的操作,将此PCI_IO的设备初始化,进行各种赋值操作包括其设备名称,私有的数据,物理地址,物理长度,设备句柄。最后虚拟机绑定设备的函数即vm_bind_device()将此PCI_IO绑定到虚拟机中。
具体函数实现是先定义一个pci_io_data类型的指针d,先分配PCI I/O 数据结构空间,再把pci_io赋给d指向的设备名称(d->dev.name),把d赋给d指向的dev.priv_data,把参数paddr赋给d指向的设备物理地址(d->dev.phys_addr),把2*1048576赋给d指向的设备物理长度(d->dev.phys_len),把pci_io_access赋给d->dev.handler。最后调用虚拟机绑定设备函数vm_bind_device(vm,&d->dev)实现。
此函数如下:
struct pci_io_data *pci_io_data_init(vm_instance_t *vm,m_uint64_t paddr)
{
   struct pci_io_data *d;
   if (!(d = malloc(sizeof(*d)))) {
      fprintf(stderr,"PCI_IO: out of memory\n");
      return NULL;
   }                                   /* 分配空间 */
   memset(d,0,sizeof(*d));                 /* 初始化内存 */
   dev_init(&d->dev);                    /* 初始化设备 */
   d->dev.name      = "pci_io";           /* 赋值 */
   d->dev.priv_data = d;
   d->dev.phys_addr = paddr;
   d->dev.phys_len  = 2 * 1048576;
   d->dev.handler   = pci_io_access;
   vm_bind_device(vm,&d->dev);
   return(d);
}
4.创建一个新的NetIO
函数原型为:
static netio_desc_t *netio_create(char *name)
先为nio分配空间,设定nio型号为空,再保存名称。
5.删除一个NetIO
函数原型为:
int netio_delete(char *name)
通过调用registry_delete_if_unused(name,OBJ_TYPE_NIO,netio_free,NULL)函数实现。
6.保存一个NETIO配置信息
函数原型为:
void netio_save_config(netio_desc_t *nio,FILE *fd)
调用nio->save_cfg(nio,fd)函数来保存参数nio,fd的信息。
7.通过NETIO发送一个包
函数原型为:
ssize_t netio_send(netio_desc_t *nio,void *pkt,size_t len)
包括发送包的NIO名称, 发送包的字节数大小,其间要应用TX过滤器,最后成功返回发送包的信息。
8.通过NETIO接收一个包
函数原型为:
ssize_t netio_recv(netio_desc_t *nio,void *pkt,size_t max_len)
首先接收包的信息,包括包的名称,包的字节长度,再应用RX过滤器,返回包的长度len。
9.TCP sockets的实现

 << 上一页  [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  ... 下一页  >> 

Dynamips设计与分析-Dynamips及相关教学软件研究与设计 第20页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。