Seems like we agree on struct. So this is my proposal:

typedef enum {
    VIR_INTERFACE_TYPE_UNKNOWN = 0,
    VIR_INTERFACE_TYPE_ETHER = 1,
    VIR_INTERFACE_TYPE_PPP = 2,
    /* we can add things here */
#idef VIR_ENUM_SENTINELS
    VIR_INTERFACE_TYPE_LAST
#endif
} virDomainInterfaceType;

typedef enum {
    VIR_IP_ADDR_TYPE_IPV4,
    VIR_IP_ADDR_TYPE_IPV6,

#ifdef VIR_ENUM_SENTINELS
    VIR_IP_ADDR_TYPE_LAST
#endif
} virIPAddrType;


typedef struct _virDomainInterfaceIPAddress virDomainIPAddress;
typedef virDomainIPAddress *virDomainIPAddressPtr;
struct _virDomainInterfaceIPAddress {
    int type;       /* virIPAddrType */
    char *addr;     /* IP address */
    int prefix;     /* IP address prefix */
};

typedef struct _virDomainInterface virDomainInterface;
typedef virDomainInterface *virDomainInterfacePtr;
struct _virDomainInterface {
    char *name;                     /* interface name */
    int type;                       /* virDomainInterfaceType */
    char *hwaddr;                   /* hardware address */
    unsigned int ip_addrs_count;    /* number of items in @ip_addr */
    virDomainIPAddressPtr ip_addrs; /* array of IP addresses */
    void *padding[20];              /* maybe we need this? */
};

typedef enum {
    VIR_DOMAIN_INTERFACE_ADDRS_DEFAULT      = 0, /* hypervisor choice */
    VIR_DOMAIN_INTERFACE_ADDRS_GUEST_AGENT  = 1, /* use guest agent */
    VIR_DOMAIN_INTERFACE_ADDRS_NWFILTER     = 2, /* use nwfilter learning code 
*/
   /* etc ... */
} virDomainInterfacesAddressesMethod;

int virDomainInterfacesAddresses(virDomainPtr dom,
                                 virDomainInterfacePtr ifaces,
                                 unsigned int method
                                 unsigned int flags);


This API would dynamically allocate return array for all interfaces presented 
in @dom.
We are already doing this in some places, so I think it's okay. With @method 
users
can choose desired way to get info. I guess if we misuse @flags for that it 
would be
just a waste of space, since methods are mutually exclusive. Hence, @flags are 
currently unused.

Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to