From: Peter Dinda Date: Fri, 27 Jul 2012 22:03:19 +0000 (-0500) Subject: Cleaned up /proc parsing for vnet X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=942e77fd2938f2226a3386eee8bb2605782acbb9 Cleaned up /proc parsing for vnet --- diff --git a/linux_module/palacios-vnet-ctrl.c b/linux_module/palacios-vnet-ctrl.c index f8043b7..f45abb4 100644 --- a/linux_module/palacios-vnet-ctrl.c +++ b/linux_module/palacios-vnet-ctrl.c @@ -62,6 +62,29 @@ struct vnet_ctrl_state { static struct vnet_ctrl_state vnet_ctrl_s; +char *skip_blank(char **start) +{ + char *cur; + + do { + cur = strsep(start, " \t"); + } while (cur != NULL && *cur=='\0'); + + return cur; +} + +char *skip_lines(char **start) +{ + char *cur; + + do { + cur = strsep(start, "\r\n"); + } while (cur != NULL && *cur=='\0'); + + return cur; +} + + static int parse_mac_str(char * str, uint8_t * qual, uint8_t * mac) { char * token; @@ -162,21 +185,21 @@ static int parse_route_str(char * str, struct v3_vnet_route * route) { struct vnet_link_iter * link = NULL; // src MAC - token = strsep(&str, " "); + token = skip_blank(&str); if (!token) { return -1; } parse_mac_str(token, &(route->src_mac_qual), route->src_mac); - // dst MAC - token = strsep(&str, " "); + // Dst MAC + token = skip_blank(&str); if (!token) { return -1; } parse_mac_str(token, &(route->dst_mac_qual), route->dst_mac); // dst LINK type - token = strsep(&str, " "); + token = skip_blank(&str); if (!token) { return -1; } @@ -192,7 +215,7 @@ static int parse_route_str(char * str, struct v3_vnet_route * route) { } // dst link - token = strsep(&str, " "); + token = skip_blank(&str); if (!token) { return -1; } @@ -239,7 +262,7 @@ static int parse_route_str(char * str, struct v3_vnet_route * route) { route->src_type = -1; // src LINK - token = strsep(&str, " "); + token = skip_blank(&str); INFO("SRC type = %s\n", token); @@ -263,7 +286,7 @@ static int parse_route_str(char * str, struct v3_vnet_route * route) { route->src_id = -1; } else if (route->src_type == LINK_EDGE) { uint32_t src_ip; - token = strsep(&str, " "); + token = skip_blank(&str); if (!token) { return -1; @@ -399,13 +422,13 @@ static int route_seq_show(struct seq_file * s, void * v) { break; case MAC_NOT: seq_printf(s, "not-%x:%x:%x:%x:%x:%x ", - route->src_mac[0], route->src_mac[1], route->src_mac[2], - route->src_mac[3], route->src_mac[4], route->src_mac[5]); + route->dst_mac[0], route->dst_mac[1], route->dst_mac[2], + route->dst_mac[3], route->dst_mac[4], route->dst_mac[5]); break; default: seq_printf(s, "%x:%x:%x:%x:%x:%x ", - route->src_mac[0], route->src_mac[1], route->src_mac[2], - route->src_mac[3], route->src_mac[4], route->src_mac[5]); + route->dst_mac[0], route->dst_mac[1], route->dst_mac[2], + route->dst_mac[3], route->dst_mac[4], route->dst_mac[5]); break; } @@ -584,9 +607,9 @@ route_write(struct file * file, route_buf[size] = '\0'; INFO("Route written: %s\n", route_buf); - while ((buf_iter = strsep(&line_str, "\r\n"))) { + while ((buf_iter = skip_lines(&line_str))) { - token = strsep(&buf_iter, " "); + token = skip_blank(&buf_iter); if (!token) { return -EFAULT; } @@ -618,7 +641,7 @@ route_write(struct file * file, uint32_t d_idx; struct vnet_route_iter * route = NULL; - idx_str = strsep(&buf_iter, " "); + idx_str = skip_blank(&buf_iter); if (!idx_str) { WARNING("Missing route idx in DEL Route command\n"); @@ -692,10 +715,10 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { return -EFAULT; } - while ((link_iter = strsep(&line_str, "\r\n"))) { + while ((link_iter = skip_lines(&line_str))) { DEBUG("Link written: %s\n", link_buf); - token = strsep(&link_iter, " "); + token = skip_blank(&link_iter); if (!token) { return -EFAULT; @@ -710,7 +733,7 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { int link_idx; unsigned long flags; - ip_str = strsep(&link_iter, " "); + ip_str = skip_blank(&link_iter); if ((!ip_str) || (!link_iter)) { WARNING("Missing fields in ADD Link command\n"); @@ -752,7 +775,7 @@ link_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { char * idx_str = NULL; uint32_t d_idx; - idx_str = strsep(&link_iter, " "); + idx_str = skip_blank(&link_iter); if (!idx_str) { WARNING("Missing link idx in DEL Link command\n"); @@ -808,7 +831,7 @@ debug_write(struct file * file, const char * buf, size_t size, loff_t * ppos) { return -EFAULT; } - in_iter = strsep(&line_str, "\r\n"); + in_iter = skip_lines(&line_str); level = simple_strtol(in_iter, &in_iter, 10); DEBUG("VNET Control: Set VNET Debug level to %d\n", level);