Add virNetworkDefGetRouteByIndex() similarly to virNetworkDefGetIpByIndex(), but for routes. Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> --- src/conf/network_conf.c | 26 ++++++++++++++++++++++++++ src/conf/network_conf.h | 3 +++ src/libvirt_private.syms | 1 + 3 files changed, 30 insertions(+) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 31d4463a475b..72006e9822d7 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -803,6 +803,32 @@ virNetworkDefGetIpByIndex(const virNetworkDef *def, return NULL; } +/* return routes[index], or NULL if there aren't enough routes */ +virNetworkRouteDefPtr +virNetworkDefGetRouteByIndex(const virNetworkDef *def, + int family, size_t n) +{ + size_t i; + + if (!def->routes || n >= def->nroutes) + return NULL; + + if (family == AF_UNSPEC) + return def->routes[n]; + + /* find the nth route of type "family" */ + for (i = 0; i < def->nroutes; i++) { + virSocketAddrPtr addr = virNetworkRouteDefGetAddress(def->routes[i]); + if (VIR_SOCKET_ADDR_IS_FAMILY(addr, family) + && (n-- <= 0)) { + return def->routes[i]; + } + } + + /* failed to find enough of the right family */ + return NULL; +} + /* return number of 1 bits in netmask for the network's ipAddress, * or -1 on error */ diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 9411a02e32cb..1cd5100c1278 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -360,6 +360,9 @@ virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net, virNetworkIpDefPtr virNetworkDefGetIpByIndex(const virNetworkDef *def, int family, size_t n); +virNetworkRouteDefPtr +virNetworkDefGetRouteByIndex(const virNetworkDef *def, + int family, size_t n); int virNetworkIpDefPrefix(const virNetworkIpDef *def); int virNetworkIpDefNetmask(const virNetworkIpDef *def, virSocketAddrPtr netmask); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 1566d11e4156..9d117acbd2bd 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -598,6 +598,7 @@ virNetworkDefFormat; virNetworkDefFormatBuf; virNetworkDefFree; virNetworkDefGetIpByIndex; +virNetworkDefGetRouteByIndex; virNetworkDefParseFile; virNetworkDefParseNode; virNetworkDefParseString; -- 2.4.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list