/[dynamips]/trunk/hv_c2600.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/hv_c2600.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

upstream/dynamips-0.2.7/hv_c2600.c revision 10 by dpavlin, Sat Oct 6 16:29:14 2007 UTC upstream/dynamips-0.2.8-RC1/hv_c2600.c revision 11 by dpavlin, Sat Oct 6 16:33:40 2007 UTC
# Line 41  Line 41 
41  #include "registry.h"  #include "registry.h"
42  #include "hypervisor.h"  #include "hypervisor.h"
43    
 /* Create a C2600 instance */  
 static int cmd_create(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    c2600_t *router;  
   
    if (!(router = c2600_create_instance(argv[0],atoi(argv[1])))) {  
       hypervisor_send_reply(conn,HSC_ERR_CREATE,1,  
                             "unable to create C2600 instance '%s'",  
                             argv[0]);  
       return(-1);  
    }  
   
    router->vm->vtty_con_type = VTTY_TYPE_NONE;  
    router->vm->vtty_aux_type = VTTY_TYPE_NONE;  
     
    vm_release(router->vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"C2600 '%s' created",argv[0]);  
    return(0);  
 }  
   
 /* Delete a C2600 instance */  
 static int cmd_delete(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    int res;  
   
    res = c2600_delete_instance(argv[0]);  
   
    if (res == 1) {  
       hypervisor_send_reply(conn,HSC_INFO_OK,1,"C2600 '%s' deleted",argv[0]);  
    } else {  
       hypervisor_send_reply(conn,HSC_ERR_DELETE,1,  
                             "unable to delete C2600 '%s'",argv[0]);  
    }  
   
    return(res);  
 }  
   
44  /* Set the chassis type */  /* Set the chassis type */
45  static int cmd_set_chassis(hypervisor_conn_t *conn,int argc,char *argv[])  static int cmd_set_chassis(hypervisor_conn_t *conn,int argc,char *argv[])
46  {  {
47     vm_instance_t *vm;     vm_instance_t *vm;
48    
49     if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))     if (!(vm = hypervisor_find_vm(conn,argv[0])))
50        return(-1);        return(-1);
51    
52     if ((c2600_mainboard_set_type(VM_C2600(vm),argv[1])) == -1) {     if ((c2600_mainboard_set_type(VM_C2600(vm),argv[1])) == -1) {
# Line 104  static int cmd_set_iomem(hypervisor_conn Line 67  static int cmd_set_iomem(hypervisor_conn
67  {  {
68     vm_instance_t *vm;     vm_instance_t *vm;
69    
70     if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))     if (!(vm = hypervisor_find_vm(conn,argv[0])))
71        return(-1);        return(-1);
72    
73     VM_C2600(vm)->nm_iomem_size = 0x8000 | atoi(optarg);     vm->nm_iomem_size = 0x8000 | atoi(argv[1]);
74    
75     vm_release(vm);     vm_release(vm);
76     hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");     hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");
# Line 119  static int cmd_set_mac_addr(hypervisor_c Line 82  static int cmd_set_mac_addr(hypervisor_c
82  {  {
83     vm_instance_t *vm;     vm_instance_t *vm;
84    
85     if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))     if (!(vm = hypervisor_find_vm(conn,argv[0])))
86        return(-1);        return(-1);
87    
88     if ((c2600_chassis_set_mac_addr(VM_C2600(vm),argv[1])) == -1) {     if ((c2600_chassis_set_mac_addr(VM_C2600(vm),argv[1])) == -1) {
# Line 135  static int cmd_set_mac_addr(hypervisor_c Line 98  static int cmd_set_mac_addr(hypervisor_c
98     return(0);     return(0);
99  }  }
100    
 /* Start a C2600 instance */  
 static int cmd_start(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    if (router->vm->vtty_con_type == VTTY_TYPE_NONE) {  
       hypervisor_send_reply(conn,HSC_INFO_MSG,0,  
                             "Warning: no console port defined for "  
                             "C2600 '%s'",argv[0]);  
    }  
   
    if (c2600_init_instance(router) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_START,1,  
                             "unable to start instance '%s'",  
                             argv[0]);  
       return(-1);  
    }  
     
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"C2600 '%s' started",argv[0]);  
    return(0);  
 }  
   
 /* Stop a C2600 instance */  
 static int cmd_stop(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    if (c2600_stop_instance(router) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_STOP,1,  
                             "unable to stop instance '%s'",  
                             argv[0]);  
       return(-1);  
    }  
     
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"C2600 '%s' stopped",argv[0]);  
    return(0);  
 }  
   
 /* Show NM bindings */  
 static int cmd_nm_bindings(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    vm_instance_t *vm;  
    c2600_t *router;  
    char *nm_type;  
    int i;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    for(i=0;i<C2600_MAX_NM_BAYS;i++) {  
       nm_type = c2600_nm_get_type(router,i);  
       if (nm_type)  
          hypervisor_send_reply(conn,HSC_INFO_MSG,0,"%u: %s",i,nm_type);  
    }  
     
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Show NM NIO bindings */  
 static int cmd_nm_nio_bindings(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    struct c2600_nio_binding *nb;  
    struct c2600_nm_bay *bay;  
    vm_instance_t *vm;  
    c2600_t *router;  
    u_int nm_bay;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
    nm_bay = atoi(argv[1]);  
   
    if (!(bay = c2600_nm_get_info(router,nm_bay))) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_UNK_OBJ,1,"Invalid slot %u",nm_bay);  
       return(-1);  
    }  
   
    for(nb=bay->nio_list;nb;nb=nb->next)  
       hypervisor_send_reply(conn,HSC_INFO_MSG,0,"%u: %s",  
                             nb->port_id,nb->nio->name);  
     
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Add a NM binding for the specified slot */  
 static int cmd_add_nm_binding(hypervisor_conn_t *conn,int argc,char *argv[])  
 {    
    vm_instance_t *vm;  
    c2600_t *router;  
    u_int nm_bay;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
    nm_bay = atoi(argv[1]);  
   
    if (c2600_nm_add_binding(router,argv[2],nm_bay) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to add NM binding for slot %u",  
                             argv[0],nm_bay);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Remove a NM binding for the specified slot */  
 static int cmd_remove_nm_binding(hypervisor_conn_t *conn,int argc,char *argv[])  
 {  
    vm_instance_t *vm;  
    c2600_t *router;  
    u_int nm_bay;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
    nm_bay = atoi(argv[1]);  
   
    if (c2600_nm_remove_binding(router,nm_bay) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to remove NM binding for "  
                             "slot %u",argv[0],nm_bay);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Add a NIO binding to the specified slot/port */  
 static int cmd_add_nio_binding(hypervisor_conn_t *conn,int argc,char *argv[])  
 {    
    u_int nm_bay,port_id;  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    nm_bay = atoi(argv[1]);  
    port_id = atoi(argv[2]);  
   
    if (c2600_nm_add_nio_binding(router,nm_bay,port_id,argv[3]) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to add NIO binding for "  
                             "interface %u/%u",argv[0],nm_bay,port_id);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Remove a NIO binding from the specified slot/port */  
 static int cmd_remove_nio_binding(hypervisor_conn_t *conn,  
                                   int argc,char *argv[])  
 {  
    u_int nm_bay,port_id;  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    nm_bay = atoi(argv[1]);  
    port_id = atoi(argv[2]);  
   
    if (c2600_nm_remove_nio_binding(router,nm_bay,port_id) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to remove NIO binding for "  
                             "interface %u/%u",argv[0],nm_bay,port_id);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Enable NIO of the specified slot/port */  
 static int cmd_nm_enable_nio(hypervisor_conn_t *conn,int argc,char *argv[])  
 {    
    u_int nm_bay,port_id;  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    nm_bay = atoi(argv[1]);  
    port_id = atoi(argv[2]);  
   
    if (c2600_nm_enable_nio(router,nm_bay,port_id) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to enable NIO for "  
                             "interface %u/%u",argv[0],nm_bay,port_id);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
 /* Disable NIO of the specified slot/port */  
 static int cmd_nm_disable_nio(hypervisor_conn_t *conn,int argc,char *argv[])  
 {    
    u_int nm_bay,port_id;  
    vm_instance_t *vm;  
    c2600_t *router;  
   
    if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))  
       return(-1);  
   
    router = VM_C2600(vm);  
   
    nm_bay = atoi(argv[1]);  
    port_id = atoi(argv[2]);  
   
    if (c2600_nm_disable_nio(router,nm_bay,port_id) == -1) {  
       vm_release(vm);  
       hypervisor_send_reply(conn,HSC_ERR_BINDING,1,  
                             "C2600 %s: unable to unset NIO for "  
                             "interface %u/%u",  
                             argv[0],nm_bay,port_id);  
       return(-1);  
    }  
   
    vm_release(vm);  
    hypervisor_send_reply(conn,HSC_INFO_OK,1,"OK");  
    return(0);  
 }  
   
101  /* Show C2600 hardware */  /* Show C2600 hardware */
102  static int cmd_show_hardware(hypervisor_conn_t *conn,int argc,char *argv[])  static int cmd_show_hardware(hypervisor_conn_t *conn,int argc,char *argv[])
103  {  {
104     vm_instance_t *vm;     vm_instance_t *vm;
105     c2600_t *router;     c2600_t *router;
106    
107     if (!(vm = hypervisor_find_vm(conn,argv[0],VM_TYPE_C2600)))     if (!(vm = hypervisor_find_vm(conn,argv[0])))
108        return(-1);        return(-1);
109    
110     router = VM_C2600(vm);     router = VM_C2600(vm);
# Line 432  static void cmd_show_c2600_list(registry Line 121  static void cmd_show_c2600_list(registry
121     hypervisor_conn_t *conn = opt;     hypervisor_conn_t *conn = opt;
122     vm_instance_t *vm = entry->data;     vm_instance_t *vm = entry->data;
123    
124     if (vm->type == VM_TYPE_C2600)     if (vm->platform == conn->cur_module->opt)
125        hypervisor_send_reply(conn,HSC_INFO_MSG,0,"%s",entry->name);        hypervisor_send_reply(conn,HSC_INFO_MSG,0,"%s",entry->name);
126  }  }
127    
# Line 447  static int cmd_c2600_list(hypervisor_con Line 136  static int cmd_c2600_list(hypervisor_con
136    
137  /* C2600 commands */  /* C2600 commands */
138  static hypervisor_cmd_t c2600_cmd_array[] = {  static hypervisor_cmd_t c2600_cmd_array[] = {
    { "create", 2, 2, cmd_create, NULL },  
    { "delete", 1, 1, cmd_delete, NULL },  
139     { "set_chassis", 2, 2, cmd_set_chassis, NULL },     { "set_chassis", 2, 2, cmd_set_chassis, NULL },
140     { "set_iomem", 2, 2, cmd_set_iomem, NULL },     { "set_iomem", 2, 2, cmd_set_iomem, NULL },
141     { "set_mac_addr", 2, 2, cmd_set_mac_addr, NULL },     { "set_mac_addr", 2, 2, cmd_set_mac_addr, NULL },
    { "start", 1, 1, cmd_start, NULL },  
    { "stop", 1, 1, cmd_stop, NULL },  
    { "nm_bindings", 1, 1, cmd_nm_bindings, NULL },  
    { "nm_nio_bindings", 2, 2, cmd_nm_nio_bindings, NULL },  
    { "add_nm_binding", 3, 3, cmd_add_nm_binding, NULL },  
    { "remove_nm_binding", 2, 2, cmd_remove_nm_binding, NULL },  
    { "add_nio_binding", 4, 4, cmd_add_nio_binding, NULL },  
    { "remove_nio_binding", 3, 3, cmd_remove_nio_binding, NULL },  
    { "nm_enable_nio", 3, 3, cmd_nm_enable_nio, NULL },  
    { "nm_disable_nio", 3, 3, cmd_nm_disable_nio, NULL },  
142     { "show_hardware", 1, 1, cmd_show_hardware, NULL },     { "show_hardware", 1, 1, cmd_show_hardware, NULL },
143     { "list", 0, 0, cmd_c2600_list, NULL },     { "list", 0, 0, cmd_c2600_list, NULL },
144     { NULL, -1, -1, NULL, NULL },     { NULL, -1, -1, NULL, NULL },
145  };  };
146    
147  /* Hypervisor C2600 initialization */  /* Hypervisor C2600 initialization */
148  int hypervisor_c2600_init(void)  int hypervisor_c2600_init(vm_platform_t *platform)
149  {  {
150     hypervisor_module_t *module;     hypervisor_module_t *module;
151    
152     module = hypervisor_register_module("c2600");     module = hypervisor_register_module(platform->name,platform);
153     assert(module != NULL);     assert(module != NULL);
154    
155     hypervisor_register_cmd_array(module,c2600_cmd_array);     hypervisor_register_cmd_array(module,c2600_cmd_array);

Legend:
Removed from v.10  
changed lines
  Added in v.11

  ViewVC Help
Powered by ViewVC 1.1.26