X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fpalacios-vnet-ctrl.c;h=86ec1296ad75a24f269ab8779518faec5fb4a4a5;hb=4e43946f01f687361197dc9571b7df02ae20de30;hp=f45abb443928a7fa958fc19281bcde68f58f5b3e;hpb=942e77fd2938f2226a3386eee8bb2605782acbb9;p=palacios.git diff --git a/linux_module/palacios-vnet-ctrl.c b/linux_module/palacios-vnet-ctrl.c index f45abb4..86ec129 100644 --- a/linux_module/palacios-vnet-ctrl.c +++ b/linux_module/palacios-vnet-ctrl.c @@ -544,10 +544,10 @@ static int inject_route(struct vnet_route_iter * route) { route->idx = v3_vnet_add_route(route->route); - spin_lock_irqsave(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_lock_irqsave(&(vnet_ctrl_s.lock), flags); list_add(&(route->node), &(vnet_ctrl_s.route_list)); vnet_ctrl_s.num_routes ++; - spin_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); INFO("VNET Control: One route added to VNET core\n"); @@ -560,10 +560,10 @@ static void delete_route(struct vnet_route_iter * route) { v3_vnet_del_route(route->idx); - spin_lock_irqsave(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_lock_irqsave(&(vnet_ctrl_s.lock), flags); list_del(&(route->node)); vnet_ctrl_s.num_routes --; - spin_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); INFO("VNET Control: Route %d deleted from VNET\n", route->idx); @@ -672,10 +672,10 @@ static void delete_link(struct vnet_link_iter * link){ vnet_brg_delete_link(link->idx); - spin_lock_irqsave(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_lock_irqsave(&(vnet_ctrl_s.lock), flags); list_del(&(link->node)); vnet_ctrl_s.num_links --; - spin_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); palacios_free(link); link = NULL; @@ -715,11 +715,12 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { return -EFAULT; } + link_buf[size] = '\0'; + INFO("Link written: %s\n", link_buf); + while ((link_iter = skip_lines(&line_str))) { - DEBUG("Link written: %s\n", link_buf); token = skip_blank(&link_iter); - if (!token) { return -EFAULT; } @@ -767,13 +768,14 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { link->proto = d_proto; link->idx = link_idx; - spin_lock_irqsave(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_lock_irqsave(&(vnet_ctrl_s.lock), flags); list_add(&(link->node), &(vnet_ctrl_s.link_iter_list)); vnet_ctrl_s.num_links ++; - spin_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); + palacios_spinlock_unlock_irqrestore(&(vnet_ctrl_s.lock), flags); } else if (strnicmp("DEL", token, strlen("DEL")) == 0) { char * idx_str = NULL; uint32_t d_idx; + struct vnet_link_iter * link = NULL; idx_str = skip_blank(&link_iter); @@ -784,9 +786,17 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { d_idx = simple_strtoul(idx_str, &idx_str, 10); - vnet_brg_delete_link(d_idx); - + INFO("VNET: deleting link %d\n", d_idx); + + list_for_each_entry(link, &(vnet_ctrl_s.link_iter_list), node) { + if (link->idx == d_idx) { + delete_link(link); + break; + } + } + DEBUG("VNET Control: One link deleted\n"); + } else { WARNING("Invalid Link command string\n"); } @@ -915,7 +925,7 @@ static int init_proc_files(void) { return -1; } - route_entry = create_proc_entry("routes", 0, vnet_root); + route_entry = create_proc_entry("routes", 0644, vnet_root); if (route_entry == NULL) { remove_proc_entry("vnet", NULL); return -1; @@ -923,7 +933,7 @@ static int init_proc_files(void) { route_entry->proc_fops = &route_fops; - link_entry = create_proc_entry("links", 0, vnet_root); + link_entry = create_proc_entry("links", 0644, vnet_root); if (link_entry == NULL) { remove_proc_entry("routes", vnet_root); remove_proc_entry("vnet", NULL); @@ -932,7 +942,7 @@ static int init_proc_files(void) { link_entry->proc_fops = &link_fops; - stat_entry = create_proc_entry("stats", 0, vnet_root); + stat_entry = create_proc_entry("stats", 0644, vnet_root); if(stat_entry == NULL) { remove_proc_entry("links", vnet_root); remove_proc_entry("routes", vnet_root); @@ -942,7 +952,7 @@ static int init_proc_files(void) { stat_entry->proc_fops = &stat_fops; - debug_entry = create_proc_entry("debug", 0, vnet_root); + debug_entry = create_proc_entry("debug", 0644, vnet_root); if(debug_entry == NULL) { remove_proc_entry("links", vnet_root); remove_proc_entry("routes", vnet_root); @@ -965,7 +975,7 @@ static void destroy_proc_files(void) { remove_proc_entry("links", vnet_root); remove_proc_entry("routes", vnet_root); remove_proc_entry("stats", vnet_root); - remove_proc_entry("vnet", NULL); + remove_proc_entry("vnet", palacios_get_procdir()); } @@ -979,7 +989,7 @@ int vnet_ctrl_init(void) { INIT_LIST_HEAD(&(vnet_ctrl_s.link_iter_list)); INIT_LIST_HEAD(&(vnet_ctrl_s.route_list)); - spin_lock_init(&(vnet_ctrl_s.lock)); + palacios_spinlock_init(&(vnet_ctrl_s.lock)); init_proc_files(); @@ -1000,6 +1010,8 @@ void vnet_ctrl_deinit(void){ vnet_ctrl_s.status = 0; + palacios_spinlock_deinit(&(vnet_ctrl_s.lock)); + INFO("VNET Control Deinit Finished\n"); }