[Ovirt-devel] [PATCH] The node sends the ip address, netmask and interface name during identification.

Perry N. Myers pmyers at redhat.com
Sat Sep 13 15:11:01 UTC 2008


Darryl L. Pierce wrote:
> This patch requires the associated patch for the server which includes the netmask and broadcast columns.

See comments on the other patch in this series.

Perry

> Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
> ---
>  ovirt-identify-node/gather.c              |   37 ++++++++++++++++++++++++++--
>  ovirt-identify-node/ovirt-identify-node.h |    3 ++
>  ovirt-identify-node/protocol.c            |    6 ++++-
>  3 files changed, 42 insertions(+), 4 deletions(-)
> 
> diff --git a/ovirt-identify-node/gather.c b/ovirt-identify-node/gather.c
> index 4a664f7..7c6fa55 100644
> --- a/ovirt-identify-node/gather.c
> +++ b/ovirt-identify-node/gather.c
> @@ -22,6 +22,10 @@
>  
>  #include "ovirt-identify-node.h"
>  
> +struct sockaddr_in sa;
> +
> +#define inaddrr(x) (*(struct in_addr *) &ifr.x[sizeof sa.sin_port])
> +
>  int
>  init_gather(void)
>  {
> @@ -205,6 +209,7 @@ get_nic_data(char *nic, nic_info_ptr nic_info_p)
>      interface =
>          libhal_device_get_property_string(hal_ctx, nic, "net.interface",
>                                            &dbus_error);
> +    snprintf(nic_info_p->iface_name, BUFFER_LENGTH, "%s", interface);
>      bzero(&ifr, sizeof(struct ifreq));
>  
>      sockfd = socket(AF_INET, SOCK_DGRAM, 0);
> @@ -212,12 +217,36 @@ get_nic_data(char *nic, nic_info_ptr nic_info_p)
>          int bandwidth;
>  
>          ifr.ifr_addr.sa_family = AF_INET;
> -        strncpy(ifr.ifr_name, interface, IFNAMSIZ - 1);
> +        strncpy(ifr.ifr_name, interface, IFNAMSIZ - 1);        
> +        
> +        if(!ioctl(sockfd,SIOCGIFADDR,&ifr)) {
> +            
> +            DEBUG("ip_address=%s\n",inet_ntoa(inaddrr(ifr_addr.sa_data)));
> +            
> +            snprintf(nic_info_p->ip_address, BUFFER_LENGTH, "%s", 
> +                    inet_ntoa(inaddrr(ifr_addr.sa_data)));            
> +        }
> +        
> +        if(!ioctl(sockfd,SIOCGIFNETMASK,&ifr) &&
> +                strcmp("255.255.255.255", inet_ntoa(inaddrr(ifr_addr.sa_data)))) {
> +            
> +            DEBUG("netmask=%s",inet_ntoa(inaddrr(ifr_addr.sa_data)));
> +            
> +            snprintf(nic_info_p->netmask, BUFFER_LENGTH, "%s",
> +                    inet_ntoa(inaddrr(ifr_addr.sa_data)));
> +        }
> +
> +        if(!ioctl(sockfd,SIOCGIFBRDADDR,&ifr)) {
> +            
> +            DEBUG("broadcast=%s",inet_ntoa(inaddrr(ifr_addr.sa_data)));
> +            
> +            snprintf(nic_info_p->broadcast, BUFFER_LENGTH, "%s",
> +                    inet_ntoa(inaddrr(ifr_addr.sa_data)));
> +        }
>  
>          ifr.ifr_data = (caddr_t)&ecmd;
>          ioctl(sockfd, SIOCETHTOOL, &ifr);
> -        close(sockfd);
> -
> +        
>          bandwidth = 10;
>          if (ecmd.supported & SUPPORTED_10000baseT_Full)
>              bandwidth = 10000;
> @@ -234,6 +263,8 @@ get_nic_data(char *nic, nic_info_ptr nic_info_p)
>              bandwidth = 10;
>  
>          snprintf(nic_info_p->bandwidth, BUFFER_LENGTH, "%d", bandwidth);
> +        
> +        close(sockfd);
>      }
>  }
>  
> diff --git a/ovirt-identify-node/ovirt-identify-node.h b/ovirt-identify-node/ovirt-identify-node.h
> index c595891..b8485fc 100644
> --- a/ovirt-identify-node/ovirt-identify-node.h
> +++ b/ovirt-identify-node/ovirt-identify-node.h
> @@ -67,6 +67,9 @@ typedef struct _nic_info {
>      char mac_address[BUFFER_LENGTH];
>      char bandwidth[BUFFER_LENGTH];
>      char ip_address[BUFFER_LENGTH];
> +    char netmask[BUFFER_LENGTH];
> +    char iface_name[BUFFER_LENGTH];
> +    char broadcast[BUFFER_LENGTH];
>      struct _nic_info* next;
>  } t_nic_info;
>  
> diff --git a/ovirt-identify-node/protocol.c b/ovirt-identify-node/protocol.c
> index 2a92edb..35bf651 100644
> --- a/ovirt-identify-node/protocol.c
> +++ b/ovirt-identify-node/protocol.c
> @@ -181,7 +181,11 @@ send_nic_details(void)
>  
>          if (!(get_text("NICINFO?")) &&
>              (!send_value("MAC", current->mac_address)) &&
> -            (!send_value("BANDWIDTH", current->bandwidth))) {
> +            (!send_value("BANDWIDTH", current->bandwidth)) &&
> +            (!send_value("IFACE_NAME", current->iface_name)) &&
> +            (!send_value("IP_ADDRESS", current->ip_address)) &&
> +            (!send_value("NETMASK", current->netmask)) &&
> +            (!send_value("BROADCAST", current->broadcast))) {
>              send_text("ENDNIC");
>              result = get_text("ACK NIC");
>          }

-- 
|=-        Red Hat, Engineering, Emerging Technologies, Boston        -=|
|=-                     Email: pmyers at redhat.com                      -=|
|=-         Office: +1 412 474 3552   Mobile: +1 703 362 9622         -=|
|=- GnuPG: E65E4F3D 88F9 F1C9 C2F3 1303 01FE 817C C5D2 8B91 E65E 4F3D -=|




More information about the ovirt-devel mailing list