/[dynamips]/upstream/dynamips-0.2.6-RC3/vm.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /upstream/dynamips-0.2.6-RC3/vm.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (hide annotations)
Sat Oct 6 16:06:49 2007 UTC (12 years, 2 months ago) by dpavlin
File MIME type: text/plain
File size: 8005 byte(s)
dynamips-0.2.6-RC3

1 dpavlin 1 /*
2     * Cisco 7200 (Predator) simulation platform.
3     * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr)
4     *
5     * Virtual Machines.
6     */
7    
8     #ifndef __VM_H__
9     #define __VM_H__
10    
11     #include <pthread.h>
12    
13     #include "mips64.h"
14     #include "dynamips.h"
15     #include "memory.h"
16     #include "cpu.h"
17     #include "dev_vtty.h"
18    
19     #define VM_PCI_POOL_SIZE 32
20    
21     /* VM instance status */
22     enum {
23     VM_STATUS_HALTED = 0, /* VM is halted and no HW resources are used */
24     VM_STATUS_SHUTDOWN, /* Shutdown procedure engaged */
25     VM_STATUS_RUNNING, /* VM is running */
26     VM_STATUS_SUSPENDED, /* VM is suspended */
27     };
28    
29     /* VM types */
30     enum {
31     VM_TYPE_C7200 = 0,
32     VM_TYPE_C3600,
33 dpavlin 4 VM_TYPE_C2691,
34     VM_TYPE_C3725,
35     VM_TYPE_C3745,
36 dpavlin 1 };
37    
38 dpavlin 4 /* Ghost RAM status */
39     enum {
40     VM_GHOST_RAM_NONE = 0,
41     VM_GHOST_RAM_GENERATE,
42     VM_GHOST_RAM_USE,
43     };
44    
45 dpavlin 1 /* Timer IRQ check interval */
46     #define VM_TIMER_IRQ_CHECK_ITV 1000
47    
48     /* forward declarations */
49     typedef struct vm_obj vm_obj_t;
50    
51     /* Shutdown function prototype for an object */
52     typedef void *(*vm_shutdown_t)(vm_instance_t *vm,void *data);
53    
54     /* VM object, used to keep track of devices and various things */
55     struct vm_obj {
56     char *name;
57     void *data;
58     struct vm_obj *next,**pprev;
59     vm_shutdown_t shutdown;
60     };
61    
62     /* VM instance */
63     struct vm_instance {
64     char *name;
65     int type; /* C7200, C3600, ... */
66     int status; /* Instance status */
67     int instance_id; /* Instance Identifier */
68     char *lock_file; /* Lock file */
69     char *log_file; /* Log file */
70     u_int ram_size,rom_size; /* RAM and ROM size in Mb */
71     u_int iomem_size; /* IOMEM size in Mb */
72     u_int nvram_size; /* NVRAM size in Kb */
73     u_int pcmcia_disk_size[2]; /* PCMCIA disk0 and disk1 sizes (in Mb) */
74     u_int conf_reg,conf_reg_setup; /* Config register */
75     u_int clock_divisor; /* Clock Divisor (see cp0.c) */
76     u_int ram_mmap; /* Memory-mapped RAM ? */
77     u_int restart_ios; /* Restart IOS on reload ? */
78     u_int elf_machine_id; /* ELF machine identifier */
79     u_int exec_area_size; /* Size of execution area for CPU */
80     m_uint32_t ios_entry_point; /* IOS entry point */
81     char *ios_image; /* IOS image filename */
82     char *ios_config; /* IOS configuration file */
83     char *rom_filename; /* ROM filename */
84     char *sym_filename; /* Symbol filename */
85     FILE *lock_fd,*log_fd; /* Lock/Log file descriptors */
86     int debug_level; /* Debugging Level */
87     int jit_use; /* CPUs use JIT */
88    
89     /* Basic hardware: system CPU, PCI busses and PCI I/O space */
90     cpu_group_t *cpu_group;
91     cpu_mips_t *boot_cpu;
92     struct pci_bus *pci_bus[2];
93     struct pci_bus *pci_bus_pool[VM_PCI_POOL_SIZE];
94     struct pci_io_data *pci_io_space;
95    
96     /* Memory mapped devices */
97     struct vdevice *dev_list;
98     struct vdevice *dev_array[MIPS64_DEVICE_MAX];
99    
100 dpavlin 4 /* Filename for ghosted RAM */
101     char *ghost_ram_filename;
102    
103     /* Ghost RAM image handling */
104     int ghost_status;
105    
106 dpavlin 1 /* "idling" pointer counter */
107     m_uint64_t idle_pc;
108    
109     /* Timer IRQ interval check */
110     u_int timer_irq_check_itv;
111    
112     /* Console and AUX port VTTY type and parameters */
113     int vtty_con_type,vtty_aux_type;
114     int vtty_con_tcp_port,vtty_aux_tcp_port;
115     vtty_serial_option_t vtty_con_serial_option,vtty_aux_serial_option;
116    
117     /* Virtual TTY for Console and AUX ports */
118     vtty_t *vtty_con,*vtty_aux;
119    
120     /* Space reserved in NVRAM by ROM monitor */
121     u_int nvram_rom_space;
122    
123     /* Extract and push IOS configuration */
124     ssize_t (*nvram_extract_config)(vm_instance_t *vm,char **buffer);
125     int (*nvram_push_config)(vm_instance_t *vm,char *buffer,size_t len);
126    
127     /* Specific hardware data */
128     void *hw_data;
129    
130     /* VM objects */
131     struct vm_obj *vm_object_list;
132     };
133    
134     #define VM_C7200(vm) ((c7200_t *)vm->hw_data)
135     #define VM_C3600(vm) ((c3600_t *)vm->hw_data)
136 dpavlin 4 #define VM_C2691(vm) ((c2691_t *)vm->hw_data)
137     #define VM_C3725(vm) ((c3725_t *)vm->hw_data)
138     #define VM_C3745(vm) ((c3745_t *)vm->hw_data)
139 dpavlin 1
140     extern int vm_file_naming_type;
141    
142     /* Initialize a VM object */
143     void vm_object_init(vm_obj_t *obj);
144    
145     /* Add a VM object to an instance */
146     void vm_object_add(vm_instance_t *vm,vm_obj_t *obj);
147    
148     /* Remove a VM object from an instance */
149     void vm_object_remove(vm_instance_t *vm,vm_obj_t *obj);
150    
151     /* Find an object given its name */
152     vm_obj_t *vm_object_find(vm_instance_t *vm,char *name);
153    
154     /* Check that a mandatory object is present */
155     int vm_object_check(vm_instance_t *vm,char *name);
156    
157     /* Dump the object list of an instance */
158     void vm_object_dump(vm_instance_t *vm);
159    
160     /* Get VM type */
161     char *vm_get_type(vm_instance_t *vm);
162    
163 dpavlin 4 /* Get MAC address MSB */
164     u_int vm_get_mac_addr_msb(vm_instance_t *vm);
165    
166 dpavlin 1 /* Generate a filename for use by the instance */
167     char *vm_build_filename(vm_instance_t *vm,char *name);
168    
169     /* Check that an instance lock file doesn't already exist */
170     int vm_get_lock(vm_instance_t *vm);
171    
172     /* Erase lock file */
173     void vm_release_lock(vm_instance_t *vm,int erase);
174    
175     /* Log a message */
176     void vm_flog(vm_instance_t *vm,char *module,char *format,va_list ap);
177    
178     /* Log a message */
179     void vm_log(vm_instance_t *vm,char *module,char *format,...);
180    
181     /* Close the log file */
182     int vm_close_log(vm_instance_t *vm);
183    
184     /* Create the log file */
185     int vm_create_log(vm_instance_t *vm);
186    
187     /* Error message */
188     void vm_error(vm_instance_t *vm,char *format,...);
189    
190     /* Create a new VM instance */
191     vm_instance_t *vm_create(char *name,int instance_id,int machine_type);
192    
193     /* Shutdown hardware resources used by a VM */
194     int vm_hardware_shutdown(vm_instance_t *vm);
195    
196     /* Free resources used by a VM */
197     void vm_free(vm_instance_t *vm);
198    
199     /* Get an instance given a name */
200     vm_instance_t *vm_acquire(char *name);
201    
202     /* Release a VM (decrement reference count) */
203     int vm_release(vm_instance_t *vm);
204    
205 dpavlin 4 /* Initialize RAM */
206     int vm_ram_init(vm_instance_t *vm,m_uint64_t paddr);
207    
208 dpavlin 1 /* Initialize VTTY */
209     int vm_init_vtty(vm_instance_t *vm);
210    
211     /* Delete VTTY */
212     void vm_delete_vtty(vm_instance_t *vm);
213    
214     /* Bind a device to a virtual machine */
215     int vm_bind_device(vm_instance_t *vm,struct vdevice *dev);
216    
217     /* Unbind a device from a virtual machine */
218     int vm_unbind_device(vm_instance_t *vm,struct vdevice *dev);
219    
220     /* Map a device at the specified physical address */
221     int vm_map_device(vm_instance_t *vm,struct vdevice *dev,m_uint64_t base_addr);
222    
223     /* Set an IRQ for a VM */
224     void vm_set_irq(vm_instance_t *vm,u_int irq);
225    
226     /* Clear an IRQ for a VM */
227     void vm_clear_irq(vm_instance_t *vm,u_int irq);
228    
229     /* Suspend a VM instance */
230     int vm_suspend(vm_instance_t *vm);
231    
232     /* Resume a VM instance */
233     int vm_resume(vm_instance_t *vm);
234    
235     /* Stop an instance */
236     int vm_stop(vm_instance_t *vm);
237    
238     /* Monitor an instance periodically */
239     void vm_monitor(vm_instance_t *vm);
240    
241 dpavlin 4 /* Open a VM file and map it in memory */
242     int vm_mmap_open_file(vm_instance_t *vm,char *name,
243     u_char **ptr,off_t *fsize);
244    
245     /* Open/Create a VM file and map it in memory */
246     int vm_mmap_create_file(vm_instance_t *vm,char *name,size_t len,u_char **ptr);
247    
248     /* Close a memory mapped file */
249     int vm_mmap_close_file(int fd,u_char *ptr,size_t len);
250    
251 dpavlin 1 /* Save the Cisco IOS configuration from NVRAM */
252     int vm_ios_save_config(vm_instance_t *vm);
253    
254     /* Set Cisco IOS image to use */
255     int vm_ios_set_image(vm_instance_t *vm,char *ios_image);
256    
257     /* Unset a Cisco IOS configuration file */
258     void vm_ios_unset_config(vm_instance_t *vm);
259    
260     /* Set Cisco IOS configuration file to use */
261     int vm_ios_set_config(vm_instance_t *vm,char *ios_config);
262    
263     /* Extract IOS configuration from NVRAM and write it to a file */
264     int vm_nvram_extract_config(vm_instance_t *vm,char *filename);
265    
266     /* Read an IOS configuraton from a file and push it to NVRAM */
267     int vm_nvram_push_config(vm_instance_t *vm,char *filename);
268    
269     /* Save general VM configuration into the specified file */
270     void vm_save_config(vm_instance_t *vm,FILE *fd);
271    
272     #endif

  ViewVC Help
Powered by ViewVC 1.1.26