X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fpalacios-vnet-ctrl.c;h=12dec1f253705b7a7c58bc75ffb52cbfa0a98c8b;hb=fd1de839d257d3ed2f0a8f27d231432b166b2cc1;hp=f0bbac522dd8ec1355485c81cdb511c50dbb59a6;hpb=465411cf0c2fd33177d032faf7a5bb59a6501104;p=palacios.git diff --git a/linux_module/palacios-vnet-ctrl.c b/linux_module/palacios-vnet-ctrl.c index f0bbac5..12dec1f 100644 --- a/linux_module/palacios-vnet-ctrl.c +++ b/linux_module/palacios-vnet-ctrl.c @@ -1,7 +1,8 @@ /* - Palacios VNET Control Module - (c) Lei Xia, 2010 + * Palacios VNET Control Module + * (c) Lei Xia 2010 */ + #include #include #include @@ -611,7 +612,8 @@ route_write(struct file * file, } else if (strnicmp("DEL", token, strlen("DEL")) == 0) { char * idx_str = NULL; uint32_t d_idx; - + struct vnet_route_iter * route = NULL; + idx_str = strsep(&buf_iter, " "); if (!idx_str) { @@ -621,10 +623,14 @@ route_write(struct file * file, d_idx = simple_strtoul(idx_str, &idx_str, 10); - v3_vnet_del_route(d_idx); - - printk("VNET Control: One route deleted\n"); + printk("VNET: deleting route %d\n", d_idx); + list_for_each_entry(route, &(vnet_ctrl_s.route_list), node) { + if (route->idx == d_idx) { + delete_route(route); + break; + } + } } else { printk("Invalid Route command string\n"); } @@ -650,17 +656,17 @@ static void delete_link(struct vnet_link_iter * link){ static void deinit_links_list(void){ - struct vnet_link_iter * link; + struct vnet_link_iter * link, * tmp_link; - list_for_each_entry(link, &(vnet_ctrl_s.link_iter_list), node) { + list_for_each_entry_safe(link, tmp_link, &(vnet_ctrl_s.link_iter_list), node) { delete_link(link); } } static void deinit_routes_list(void){ - struct vnet_route_iter * route; + struct vnet_route_iter * route, * tmp_route; - list_for_each_entry(route, &(vnet_ctrl_s.route_list), node) { + list_for_each_entry_safe(route, tmp_route, &(vnet_ctrl_s.route_list), node) { delete_route(route); } }