⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dev_c7200_eth.c

📁 思科路由器仿真器,用来仿7200系列得,可以在电脑上模拟路由器
💻 C
📖 第 1 页 / 共 2 页
字号:
   /* Create the Intel i8254x chip */   data->port[0] = dev_i8254x_init(vm,card->dev_name,0,                                   card->pci_bus,0,                                   c7200_net_irq_for_slot_port(slot,0));   /* Store device info into the router structure */   card->drv_info = data;   return(0);}/* PA-GE driver */struct cisco_card_driver dev_c7200_pa_ge_driver = {   "PA-GE", 0, 0,   dev_c7200_pa_ge_init,    dev_c7200_pa_i8254x_shutdown,    NULL,   dev_c7200_pa_i8254x_set_nio,   dev_c7200_pa_i8254x_unset_nio,   NULL,};/* ====================================================================== *//* C7200-IO-2FE                                                           *//* ====================================================================== *//* C7200-IO-2FE/E: C7200 IOCard with two FastEthernet ports EEPROM */static const m_uint16_t eeprom_c7200_io_2fe_data[] = {   0x04FF, 0x4002, 0x1541, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06,   0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030,   0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F,   0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580,   0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,};static const struct cisco_eeprom eeprom_c7200_io_2fe = {   "C7200-IO-2FE", (m_uint16_t *)eeprom_c7200_io_2fe_data,   sizeof(eeprom_c7200_io_2fe_data)/2,};/* * dev_c7200_pa_2fe_tx_init() * * Add a C7200-IO-2FE/E port adapter into specified slot. */static int dev_c7200_iocard_2fe_init(vm_instance_t *vm,struct cisco_card *card){   struct pa_i8254x_data *data;   u_int slot = card->slot_id;   /* Allocate the private data structure for the iocard */   if (!(data = malloc(sizeof(*data)))) {      vm_error(vm,"%s: out of memory\n",card->dev_name);      return(-1);   }   /* 2 Ethernet ports */   memset(data,0,sizeof(*data));   data->nr_port = 2;   /* Set the PCI bus */   card->pci_bus = vm->slots_pci_bus[slot];   /* Set the EEPROM */   cisco_card_set_eeprom(vm,card,&eeprom_c7200_io_2fe);   c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom);   /* Port Fa0/0 is on PCI Device 1 */   data->port[0] = dev_i8254x_init(vm,card->dev_name,0,                                   card->pci_bus,1,                                   c7200_net_irq_for_slot_port(slot,1));   /* Port Fa0/1 is on PCI Device 0 */   data->port[1] = dev_i8254x_init(vm,card->dev_name,0,                                   card->pci_bus,0,                                   c7200_net_irq_for_slot_port(slot,0));   if (!data->port[0] || !data->port[1]) {      dev_i8254x_remove(data->port[0]);      dev_i8254x_remove(data->port[1]);      free(data);      return(-1);   }   /* Store device info into the router structure */   card->drv_info = data;   return(0);}/* C7200-IO-2FE driver */struct cisco_card_driver dev_c7200_iocard_2fe_driver = {   "C7200-IO-2FE", 0, 0,   dev_c7200_iocard_2fe_init,    dev_c7200_pa_i8254x_shutdown,    NULL,   dev_c7200_pa_i8254x_set_nio,   dev_c7200_pa_i8254x_unset_nio,   NULL,};/* ====================================================================== *//* C7200-IO-GE-E                                                          *//* ====================================================================== *//*  * C7200-IO-GE+E: C7200 IOCard with 1 GigatEthernet ports  * and 1 Ethernet port EEPROM. */static const m_uint16_t eeprom_c7200_io_ge_e_data[] = {   0x04FF, 0x4002, 0x1641, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06,   0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030,   0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F,   0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580,   0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,   0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,};static const struct cisco_eeprom eeprom_c7200_io_ge_e = {   "C7200-IO-GE-E", (m_uint16_t *)eeprom_c7200_io_ge_e_data,   sizeof(eeprom_c7200_io_ge_e_data)/2,};/* * dev_c7200_pa_ge_e_tx_init() * * Add a C7200-I/O-GE+E port adapter into specified slot. */static int dev_c7200_iocard_ge_e_init(vm_instance_t *vm,struct cisco_card *card){   struct pa_i8254x_data *data;   u_int slot = card->slot_id;   /* Allocate the private data structure for the iocard */   if (!(data = malloc(sizeof(*data)))) {      vm_error(vm,"%s: out of memory\n",card->dev_name);      return(-1);   }   /* 2 Ethernet ports */   memset(data,0,sizeof(*data));   data->nr_port = 2;   /* Set the PCI bus */   card->pci_bus = vm->slots_pci_bus[slot];   /* Set the EEPROM */   cisco_card_set_eeprom(vm,card,&eeprom_c7200_io_ge_e);   c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom);   /* Port Gi0/0 is on PCI Device 1 */   data->port[0] = dev_i8254x_init(vm,card->dev_name,0,                                   card->pci_bus,1,                                   c7200_net_irq_for_slot_port(slot,1));   /* Port e0/0 is on PCI Device 0 */   data->port[1] = dev_i8254x_init(vm,card->dev_name,0,                                   card->pci_bus,0,                                   c7200_net_irq_for_slot_port(slot,0));   /* Store device info into the router structure */   card->drv_info = data;   return(0);}/* C7200-IO-GE-E driver */struct cisco_card_driver dev_c7200_iocard_ge_e_driver = {   "C7200-IO-GE-E", 0, 0,   dev_c7200_iocard_ge_e_init,    dev_c7200_pa_i8254x_shutdown,    NULL,   dev_c7200_pa_i8254x_set_nio,   dev_c7200_pa_i8254x_unset_nio,   NULL,};/* ====================================================================== *//* PA-4E / PA-8E                                                          *//* ====================================================================== *//* PA-4E/PA-8E data */struct pa_4e8e_data {   u_int nr_port;   struct am79c971_data *port[8];};/* * dev_c7200_pa_4e_init() * * Add a PA-4E port adapter into specified slot. */static int dev_c7200_pa_4e_init(vm_instance_t *vm,struct cisco_card *card){   struct pa_4e8e_data *data;   u_int slot = card->slot_id;   int i;   /* Allocate the private data structure for the PA-4E */   if (!(data = malloc(sizeof(*data)))) {      vm_error(vm,"%s: out of memory\n",card->dev_name);      return(-1);   }   /* 4 Ethernet ports */   memset(data,0,sizeof(*data));   data->nr_port = 4;   /* Set the PCI bus */   card->pci_bus = vm->slots_pci_bus[slot];   /* Set the EEPROM */   cisco_card_set_eeprom(vm,card,cisco_eeprom_find_pa("PA-4E"));   c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom);   /* Create the AMD Am79c971 chips */   for(i=0;i<data->nr_port;i++) {      data->port[i] = dev_am79c971_init(vm,card->dev_name,                                        AM79C971_TYPE_10BASE_T,                                        card->pci_bus,i,                                        c7200_net_irq_for_slot_port(slot,i));   }   /* Store device info into the router structure */   card->drv_info = data;   return(0);}/* * dev_c7200_pa_8e_init() * * Add a PA-8E port adapter into specified slot. */static int dev_c7200_pa_8e_init(vm_instance_t *vm,struct cisco_card *card){   struct pa_4e8e_data *data;   u_int slot = card->slot_id;   int i;   /* Allocate the private data structure for the PA-8E */   if (!(data = malloc(sizeof(*data)))) {      vm_error(vm,"%s: out of memory\n",card->dev_name);      return(-1);   }   /* 4 Ethernet ports */   memset(data,0,sizeof(*data));   data->nr_port = 8;   /* Set the PCI bus */   card->pci_bus = vm->slots_pci_bus[slot];   /* Set the EEPROM */   cisco_card_set_eeprom(vm,card,cisco_eeprom_find_pa("PA-8E"));   c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom);   /* Create the AMD Am79c971 chips */   for(i=0;i<data->nr_port;i++) {      data->port[i] = dev_am79c971_init(vm,card->dev_name,                                        AM79C971_TYPE_10BASE_T,                                        card->pci_bus,i,                                        c7200_net_irq_for_slot_port(slot,i));   }   /* Store device info into the router structure */   card->drv_info = data;   return(0);}/* Remove a PA-4E/PA-8E from the specified slot */static int dev_c7200_pa_4e8e_shutdown(vm_instance_t *vm,struct cisco_card *card){   struct pa_4e8e_data *data = card->drv_info;   int i;   /* Remove the PA EEPROM */   cisco_card_unset_eeprom(card);   c7200_set_slot_eeprom(VM_C7200(vm),card->slot_id,NULL);   /* Remove the AMD Am79c971 chips */   for(i=0;i<data->nr_port;i++)      dev_am79c971_remove(data->port[i]);   free(data);   return(0);}/* Bind a Network IO descriptor */static int dev_c7200_pa_4e8e_set_nio(vm_instance_t *vm,struct cisco_card *card,                          u_int port_id,netio_desc_t *nio){   struct pa_4e8e_data *d = card->drv_info;   if (!d || (port_id >= d->nr_port))      return(-1);   dev_am79c971_set_nio(d->port[port_id],nio);   return(0);}/* Unbind a Network IO descriptor */static int dev_c7200_pa_4e8e_unset_nio(vm_instance_t *vm,struct cisco_card *card,                            u_int port_id){   struct pa_4e8e_data *d = card->drv_info;   if (!d || (port_id >= d->nr_port))      return(-1);   dev_am79c971_unset_nio(d->port[port_id]);   return(0);}/* PA-4E driver */struct cisco_card_driver dev_c7200_pa_4e_driver = {   "PA-4E", 1, 0,   dev_c7200_pa_4e_init,    dev_c7200_pa_4e8e_shutdown,    NULL,   dev_c7200_pa_4e8e_set_nio,   dev_c7200_pa_4e8e_unset_nio,   NULL,};/* PA-8E driver */struct cisco_card_driver dev_c7200_pa_8e_driver = {   "PA-8E", 1, 0,   dev_c7200_pa_8e_init,    dev_c7200_pa_4e8e_shutdown,    NULL,   dev_c7200_pa_4e8e_set_nio,   dev_c7200_pa_4e8e_unset_nio,   NULL,};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -