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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list