lkml.org 
[lkml]   [2012]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/14] Tools: hv: Gather ipv[4,6] gateway information
    Date
    ---
    tools/hv/hv_kvp_daemon.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++
    1 files changed, 68 insertions(+), 0 deletions(-)

    diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
    index a63e83a..65d54c8 100644
    --- a/tools/hv/hv_kvp_daemon.c
    +++ b/tools/hv/hv_kvp_daemon.c
    @@ -491,6 +491,68 @@ done:
    return;
    }

    +static void kvp_process_ipconfig_file(char *cmd,
    + char *config_buf, int len,
    + int element_size, int offset)
    +{
    + char buf[256];
    + char *p;
    + char *x;
    + FILE *file;
    +
    + /*
    + * First execute the command.
    + */
    + file = popen(cmd, "r");
    + if (file == NULL)
    + return;
    +
    + if (offset == 0)
    + memset(config_buf, 0, len);
    + while ((p = fgets(buf, sizeof(buf), file)) != NULL) {
    + if ((len - strlen(config_buf)) < (element_size + 1))
    + break;
    +
    + x = strchr(p, '\n');
    + *x = '\0';
    + strcat(config_buf, p);
    + strcat(config_buf, ";");
    + }
    + pclose(file);
    +}
    +
    +static void kvp_get_ipconfig_info(char *if_name,
    + struct hv_kvp_ipaddr_value *buffer)
    +{
    + char cmd[512];
    +
    + /*
    + * Get the address of default gateway (ipv4).
    + */
    + sprintf(cmd, "%s %s", "ip route show dev", if_name);
    + strcat(cmd, " | awk '/default/ {print $3 }'");
    +
    + /*
    + * Execute the command to gather gateway info.
    + */
    + kvp_process_ipconfig_file(cmd, (char *)buffer->gate_way,
    + (MAX_GATEWAY_SIZE * 2), INET_ADDRSTRLEN, 0);
    +
    + /*
    + * Get the address of default gateway (ipv6).
    + */
    + sprintf(cmd, "%s %s", "ip -f inet6 route show dev", if_name);
    + strcat(cmd, " | awk '/default/ {print $3 }'");
    +
    + /*
    + * Execute the command to gather gateway info (ipv6).
    + */
    + kvp_process_ipconfig_file(cmd, (char *)buffer->gate_way,
    + (MAX_GATEWAY_SIZE * 2), INET6_ADDRSTRLEN, 1);
    +
    +}
    +
    +
    static unsigned int hweight32(unsigned int *w)
    {
    unsigned int res = *w - ((*w >> 1) & 0x55555555);
    @@ -650,6 +712,12 @@ kvp_get_ip_address(int family, char *if_name, int op,
    strcat((char *)ip_buffer->sub_net, ";");
    sn_offset += strlen(sn_str) + 1;
    }
    +
    + /*
    + * Collect other ip related configuration info.
    + */
    +
    + kvp_get_ipconfig_info(if_name, ip_buffer);
    }

    gather_ipaddr:
    --
    1.7.4.1


    \
     
     \ /
      Last update: 2012-08-17 03:01    [W:4.243 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site