Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 324435
b: refs/heads/master
c: 16e8710
h: refs/heads/master
i:
  324433: a59624f
  324431: a9d41bf
v: v3
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed Sep 10, 2012
1 parent d5803ec commit 4379c91
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4a3b97e5799571397ade963c760b7406d8e9a8a6
refs/heads/master: 16e87100e62330cb1e58ee772cacb7d4e6d5b61b
93 changes: 90 additions & 3 deletions trunk/tools/hv/hv_kvp_daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,69 @@ static char *kvp_if_name_to_mac(char *if_name)
}


/*
* Retrieve the interface name given tha MAC address.
*/

static char *kvp_mac_to_if_name(char *mac)
{
DIR *dir;
struct dirent *entry;
FILE *file;
char *p, *q, *x;
char *if_name = NULL;
char buf[256];
char *kvp_net_dir = "/sys/class/net/";
char dev_id[256];
int i;

dir = opendir(kvp_net_dir);
if (dir == NULL)
return NULL;

snprintf(dev_id, sizeof(dev_id), kvp_net_dir);
q = dev_id + strlen(kvp_net_dir);

while ((entry = readdir(dir)) != NULL) {
/*
* Set the state for the next pass.
*/
*q = '\0';

strcat(dev_id, entry->d_name);
strcat(dev_id, "/address");

file = fopen(dev_id, "r");
if (file == NULL)
continue;

p = fgets(buf, sizeof(buf), file);
if (p) {
x = strchr(p, '\n');
if (x)
*x = '\0';

for (i = 0; i < strlen(p); i++)
p[i] = toupper(p[i]);

if (!strcmp(p, mac)) {
/*
* Found the MAC match; return the interface
* name. The caller will free the memory.
*/
if_name = strdup(entry->d_name);
fclose(file);
break;
}
}
fclose(file);
}

closedir(dir);
return if_name;
}


static void kvp_process_ipconfig_file(char *cmd,
char *config_buf, int len,
int element_size, int offset)
Expand Down Expand Up @@ -749,10 +812,10 @@ static int kvp_process_ip_address(void *addrp,
}

if ((length - *offset) < addr_length + 1)
return 1;
return HV_E_FAIL;
if (str == NULL) {
strcpy(buffer, "inet_ntop failed\n");
return 1;
return HV_E_FAIL;
}
if (*offset == 0)
strcpy(buffer, tmp);
Expand Down Expand Up @@ -796,7 +859,7 @@ kvp_get_ip_info(int family, char *if_name, int op,

if (getifaddrs(&ifap)) {
strcpy(buffer, "getifaddrs failed\n");
return 1;
return HV_E_FAIL;
}

curp = ifap;
Expand Down Expand Up @@ -1386,6 +1449,30 @@ int main(void)
}

switch (op) {
case KVP_OP_GET_IP_INFO:
kvp_ip_val = &hv_msg->body.kvp_ip_val;
if_name =
kvp_mac_to_if_name((char *)kvp_ip_val->adapter_id);

if (if_name == NULL) {
/*
* We could not map the mac address to an
* interface name; return error.
*/
hv_msg->error = HV_E_FAIL;
break;
}
error = kvp_get_ip_info(
0, if_name, KVP_OP_GET_IP_INFO,
kvp_ip_val,
(MAX_IP_ADDR_SIZE * 2));

if (error)
hv_msg->error = error;

free(if_name);
break;

case KVP_OP_SET_IP_INFO:
kvp_ip_val = &hv_msg->body.kvp_ip_val;
if_name = kvp_get_if_name(
Expand Down

0 comments on commit 4379c91

Please sign in to comment.