/*
- Palacios VNET Control Module
- (c) Lei Xia, 2010
+ * Palacios VNET Control Module
+ * (c) Lei Xia 2010
*/
+
#include <linux/spinlock.h>
#include <linux/seq_file.h>
#include <linux/proc_fs.h>
} 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) {
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");
}
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);
}
}