[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] libxenstat: handle renamed VIFs
commit b2a332bfde7aff580f461a1d81b5340573d556d1 Author: Jacek Konieczny <jajcus@xxxxxxxxxx> AuthorDate: Fri May 23 14:47:21 2014 +0200 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Mon Jun 2 14:36:55 2014 +0100 libxenstat: handle renamed VIFs Before trying to parse network interface name as 'vif*.*' try to get the domid and network number from sysfs. Fixes xentop output for domains with VIF renamed through the 'vifname' xl option. Signed-off-by: Jacek Konieczny <jajcus@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/xenstat/libxenstat/src/xenstat_linux.c | 26 ++++++++++++++++++++++++-- 1 files changed, 24 insertions(+), 2 deletions(-) diff --git a/tools/xenstat/libxenstat/src/xenstat_linux.c b/tools/xenstat/libxenstat/src/xenstat_linux.c index 24335e1..7fdf70a 100644 --- a/tools/xenstat/libxenstat/src/xenstat_linux.c +++ b/tools/xenstat/libxenstat/src/xenstat_linux.c @@ -233,6 +233,29 @@ int parseNetDevLine(char *line, char *iface, unsigned long long *rxBytes, unsign return 0; } +/* Find out the domid and network number given an interface name. + * Return 0 if the iface cannot be recognized as a Xen VIF. */ +static int get_iface_domid_network(const char *iface, unsigned int *domid_p, unsigned int *netid_p) +{ + char nodename_path[48]; + FILE * nodename_file; + int ret; + + snprintf(nodename_path, 48, "/sys/class/net/%s/device/nodename", iface); + nodename_file = fopen(nodename_path, "r"); + if (nodename_file != NULL) { + ret = fscanf(nodename_file, "backend/vif/%u/%u", domid_p, netid_p); + fclose(nodename_file); + if (ret == 2) + return 1; + } + + if (sscanf(iface, "vif%u.%u", domid_p, netid_p) == 2) + return 1; + + return 0; +} + /* Collect information about networks */ int xenstat_collect_networks(xenstat_node * node) { @@ -309,8 +332,7 @@ int xenstat_collect_networks(xenstat_node * node) } } else /* Otherwise we need to preserve old behaviour */ - if (strstr(iface, "vif") != NULL) { - sscanf(iface, "vif%u.%u", &domid, &net.id); + if (get_iface_domid_network(iface, &domid, &net.id)) { net.tbytes = txBytes; net.tpackets = txPackets; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |