} 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 dump_routes(){
struct vnet_route_info *route;
- int i = 0;
Vnet_Debug("\n========Dump routes starts ============\n");
list_for_each_entry(route, &(vnet_state.routes), node) {
- Vnet_Debug("\nroute %d:\n", i++);
+ Vnet_Debug("\nroute %d:\n", route->idx);
print_route(&(route->route_def));
if (route->route_def.dst_type == LINK_INTERFACE) {
flags = vnet_lock_irqsave(vnet_state.lock);
list_for_each_entry(route, &(vnet_state.routes), node) {
+ V3_Print("v3_vnet_del_route, route idx: %d\n", route->idx);
if(route->idx == route_idx){
list_del(&(route->node));
- list_del(&(route->match_node));
- Vnet_Free(route);
+ Vnet_Free(route);
+ break;
}
}
vnet_unlock_irqrestore(vnet_state.lock, flags);
+ clear_hash_cache();
+
+#ifdef V3_CONFIG_DEBUG_VNET
+ dump_routes();
+#endif
}