|
|
7a3408 |
From 4db05578f2b40f0374477bccf85a492a7e8ee8fc Mon Sep 17 00:00:00 2001
|
|
|
7a3408 |
Message-Id: <4db05578f2b40f0374477bccf85a492a7e8ee8fc@dist-git>
|
|
|
7a3408 |
From: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Date: Thu, 6 Aug 2015 13:10:23 +0200
|
|
|
7a3408 |
Subject: [PATCH] conf: Add getter for network routes
|
|
|
7a3408 |
|
|
|
7a3408 |
https://bugzilla.redhat.com/show_bug.cgi?id=1094205
|
|
|
7a3408 |
|
|
|
7a3408 |
Add virNetworkDefGetRouteByIndex() similarly to
|
|
|
7a3408 |
virNetworkDefGetIpByIndex(), but for routes.
|
|
|
7a3408 |
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
(cherry picked from commit 0f10eb6a289502b295b56bc0925cf05cfa32193d)
|
|
|
7a3408 |
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
|
7a3408 |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
7a3408 |
---
|
|
|
7a3408 |
src/conf/network_conf.c | 26 ++++++++++++++++++++++++++
|
|
|
7a3408 |
src/conf/network_conf.h | 3 +++
|
|
|
7a3408 |
src/libvirt_private.syms | 1 +
|
|
|
7a3408 |
3 files changed, 30 insertions(+)
|
|
|
7a3408 |
|
|
|
7a3408 |
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
|
|
|
7a3408 |
index 31d4463..72006e9 100644
|
|
|
7a3408 |
--- a/src/conf/network_conf.c
|
|
|
7a3408 |
+++ b/src/conf/network_conf.c
|
|
|
7a3408 |
@@ -803,6 +803,32 @@ virNetworkDefGetIpByIndex(const virNetworkDef *def,
|
|
|
7a3408 |
return NULL;
|
|
|
7a3408 |
}
|
|
|
7a3408 |
|
|
|
7a3408 |
+/* return routes[index], or NULL if there aren't enough routes */
|
|
|
7a3408 |
+virNetworkRouteDefPtr
|
|
|
7a3408 |
+virNetworkDefGetRouteByIndex(const virNetworkDef *def,
|
|
|
7a3408 |
+ int family, size_t n)
|
|
|
7a3408 |
+{
|
|
|
7a3408 |
+ size_t i;
|
|
|
7a3408 |
+
|
|
|
7a3408 |
+ if (!def->routes || n >= def->nroutes)
|
|
|
7a3408 |
+ return NULL;
|
|
|
7a3408 |
+
|
|
|
7a3408 |
+ if (family == AF_UNSPEC)
|
|
|
7a3408 |
+ return def->routes[n];
|
|
|
7a3408 |
+
|
|
|
7a3408 |
+ /* find the nth route of type "family" */
|
|
|
7a3408 |
+ for (i = 0; i < def->nroutes; i++) {
|
|
|
7a3408 |
+ virSocketAddrPtr addr = virNetworkRouteDefGetAddress(def->routes[i]);
|
|
|
7a3408 |
+ if (VIR_SOCKET_ADDR_IS_FAMILY(addr, family)
|
|
|
7a3408 |
+ && (n-- <= 0)) {
|
|
|
7a3408 |
+ return def->routes[i];
|
|
|
7a3408 |
+ }
|
|
|
7a3408 |
+ }
|
|
|
7a3408 |
+
|
|
|
7a3408 |
+ /* failed to find enough of the right family */
|
|
|
7a3408 |
+ return NULL;
|
|
|
7a3408 |
+}
|
|
|
7a3408 |
+
|
|
|
7a3408 |
/* return number of 1 bits in netmask for the network's ipAddress,
|
|
|
7a3408 |
* or -1 on error
|
|
|
7a3408 |
*/
|
|
|
7a3408 |
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
|
|
|
7a3408 |
index 9411a02..1cd5100 100644
|
|
|
7a3408 |
--- a/src/conf/network_conf.h
|
|
|
7a3408 |
+++ b/src/conf/network_conf.h
|
|
|
7a3408 |
@@ -360,6 +360,9 @@ virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net,
|
|
|
7a3408 |
virNetworkIpDefPtr
|
|
|
7a3408 |
virNetworkDefGetIpByIndex(const virNetworkDef *def,
|
|
|
7a3408 |
int family, size_t n);
|
|
|
7a3408 |
+virNetworkRouteDefPtr
|
|
|
7a3408 |
+virNetworkDefGetRouteByIndex(const virNetworkDef *def,
|
|
|
7a3408 |
+ int family, size_t n);
|
|
|
7a3408 |
int virNetworkIpDefPrefix(const virNetworkIpDef *def);
|
|
|
7a3408 |
int virNetworkIpDefNetmask(const virNetworkIpDef *def,
|
|
|
7a3408 |
virSocketAddrPtr netmask);
|
|
|
7a3408 |
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
|
|
|
7a3408 |
index a6b523a..46e535e 100644
|
|
|
7a3408 |
--- a/src/libvirt_private.syms
|
|
|
7a3408 |
+++ b/src/libvirt_private.syms
|
|
|
7a3408 |
@@ -597,6 +597,7 @@ virNetworkDefFormat;
|
|
|
7a3408 |
virNetworkDefFormatBuf;
|
|
|
7a3408 |
virNetworkDefFree;
|
|
|
7a3408 |
virNetworkDefGetIpByIndex;
|
|
|
7a3408 |
+virNetworkDefGetRouteByIndex;
|
|
|
7a3408 |
virNetworkDefParseFile;
|
|
|
7a3408 |
virNetworkDefParseNode;
|
|
|
7a3408 |
virNetworkDefParseString;
|
|
|
7a3408 |
--
|
|
|
7a3408 |
2.5.0
|
|
|
7a3408 |
|