mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
bridge_driver: Adapt to new virNetworkObjList accessors
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
292acd202f
commit
b61db335f9
@ -342,21 +342,16 @@ networkBridgeDummyNicName(const char *brname)
|
|||||||
return nicname;
|
return nicname;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the internal status of all allegedly active networks
|
static int
|
||||||
* according to external conditions on the host (i.e. anything that
|
networkUpdateState(virNetworkObjPtr obj,
|
||||||
* isn't stored directly in each network's state file). */
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
static void
|
|
||||||
networkUpdateAllState(void)
|
|
||||||
{
|
{
|
||||||
size_t i;
|
int ret = -1;
|
||||||
|
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
|
||||||
|
|
||||||
virNetworkObjLock(obj);
|
virNetworkObjLock(obj);
|
||||||
if (!virNetworkObjIsActive(obj)) {
|
if (!virNetworkObjIsActive(obj)) {
|
||||||
virNetworkObjUnlock(obj);
|
virNetworkObjUnlock(obj);
|
||||||
continue;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (obj->def->forward.type) {
|
switch (obj->def->forward.type) {
|
||||||
@ -369,8 +364,7 @@ networkUpdateAllState(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_NETWORK_FORWARD_BRIDGE:
|
case VIR_NETWORK_FORWARD_BRIDGE:
|
||||||
if (obj->def->bridge) {
|
if (!(obj->def->bridge && virNetDevExists(obj->def->bridge) == 1)) {
|
||||||
if (virNetDevExists(obj->def->bridge) != 1)
|
|
||||||
obj->active = 0;
|
obj->active = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -399,48 +393,36 @@ networkUpdateAllState(void)
|
|||||||
dnsmasqCapsGetBinaryPath(driver->dnsmasqCaps)));
|
dnsmasqCapsGetBinaryPath(driver->dnsmasqCaps)));
|
||||||
radvdpidbase = networkRadvdPidfileBasename(obj->def->name);
|
radvdpidbase = networkRadvdPidfileBasename(obj->def->name);
|
||||||
if (!radvdpidbase)
|
if (!radvdpidbase)
|
||||||
break;
|
goto cleanup;
|
||||||
|
|
||||||
ignore_value(virPidFileReadIfAlive(driver->pidDir,
|
ignore_value(virPidFileReadIfAlive(driver->pidDir,
|
||||||
radvdpidbase,
|
radvdpidbase,
|
||||||
&obj->radvdPid, RADVD));
|
&obj->radvdPid, RADVD));
|
||||||
VIR_FREE(radvdpidbase);
|
VIR_FREE(radvdpidbase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
cleanup:
|
||||||
virNetworkObjUnlock(obj);
|
virNetworkObjUnlock(obj);
|
||||||
}
|
return ret;
|
||||||
|
|
||||||
/* remove inactive transient networks */
|
|
||||||
i = 0;
|
|
||||||
while (i < driver->networks->count) {
|
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
|
||||||
virNetworkObjLock(obj);
|
|
||||||
|
|
||||||
if (!obj->persistent && !obj->active) {
|
|
||||||
networkRemoveInactive(obj);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
static void
|
networkAutostartConfig(virNetworkObjPtr net,
|
||||||
networkAutostartConfigs(void)
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
size_t i;
|
int ret = -1;
|
||||||
|
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
virNetworkObjLock(net);
|
||||||
virNetworkObjLock(driver->networks->objs[i]);
|
if (net->autostart &&
|
||||||
if (driver->networks->objs[i]->autostart &&
|
!virNetworkObjIsActive(net) &&
|
||||||
!virNetworkObjIsActive(driver->networks->objs[i])) {
|
networkStartNetwork(net) < 0)
|
||||||
if (networkStartNetwork(driver->networks->objs[i]) < 0) {
|
goto cleanup;
|
||||||
/* failed to start but already logged */
|
|
||||||
}
|
ret = 0;
|
||||||
}
|
cleanup:
|
||||||
virNetworkObjUnlock(driver->networks->objs[i]);
|
virNetworkObjUnlock(net);
|
||||||
}
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_FIREWALLD
|
#if HAVE_FIREWALLD
|
||||||
@ -650,7 +632,17 @@ networkStateInitialize(bool privileged,
|
|||||||
driver->networkAutostartDir) < 0)
|
driver->networkAutostartDir) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
networkUpdateAllState();
|
|
||||||
|
/* Update the internal status of all allegedly active
|
||||||
|
* networks according to external conditions on the host
|
||||||
|
* (i.e. anything that isn't stored directly in each
|
||||||
|
* network's state file). */
|
||||||
|
virNetworkObjListForEach(driver->networks,
|
||||||
|
networkUpdateState,
|
||||||
|
NULL);
|
||||||
|
virNetworkObjListPrune(driver->networks,
|
||||||
|
VIR_CONNECT_LIST_NETWORKS_INACTIVE |
|
||||||
|
VIR_CONNECT_LIST_NETWORKS_TRANSIENT);
|
||||||
networkReloadFirewallRules();
|
networkReloadFirewallRules();
|
||||||
networkRefreshDaemons();
|
networkRefreshDaemons();
|
||||||
|
|
||||||
@ -709,7 +701,9 @@ networkStateAutoStart(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
networkDriverLock();
|
networkDriverLock();
|
||||||
networkAutostartConfigs();
|
virNetworkObjListForEach(driver->networks,
|
||||||
|
networkAutostartConfig,
|
||||||
|
NULL);
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -733,7 +727,9 @@ networkStateReload(void)
|
|||||||
driver->networkAutostartDir);
|
driver->networkAutostartDir);
|
||||||
networkReloadFirewallRules();
|
networkReloadFirewallRules();
|
||||||
networkRefreshDaemons();
|
networkRefreshDaemons();
|
||||||
networkAutostartConfigs();
|
virNetworkObjListForEach(driver->networks,
|
||||||
|
networkAutostartConfig,
|
||||||
|
NULL);
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1745,62 +1741,70 @@ networkRestartRadvd(virNetworkObjPtr network)
|
|||||||
}
|
}
|
||||||
#endif /* #if 0 */
|
#endif /* #if 0 */
|
||||||
|
|
||||||
/* SIGHUP/restart any dnsmasq or radvd daemons.
|
static int
|
||||||
* This should be called when libvirtd is restarted.
|
networkRefreshDaemonsHelper(virNetworkObjPtr net,
|
||||||
*/
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
static void
|
|
||||||
networkRefreshDaemons(void)
|
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
|
|
||||||
VIR_INFO("Refreshing network daemons");
|
virNetworkObjLock(net);
|
||||||
|
if (virNetworkObjIsActive(net) &&
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
((net->def->forward.type == VIR_NETWORK_FORWARD_NONE) ||
|
||||||
virNetworkObjPtr network = driver->networks->objs[i];
|
(net->def->forward.type == VIR_NETWORK_FORWARD_NAT) ||
|
||||||
|
(net->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) {
|
||||||
virNetworkObjLock(network);
|
|
||||||
if (virNetworkObjIsActive(network) &&
|
|
||||||
((network->def->forward.type == VIR_NETWORK_FORWARD_NONE) ||
|
|
||||||
(network->def->forward.type == VIR_NETWORK_FORWARD_NAT) ||
|
|
||||||
(network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) {
|
|
||||||
/* Only the three L3 network types that are configured by
|
/* Only the three L3 network types that are configured by
|
||||||
* libvirt will have a dnsmasq or radvd daemon associated
|
* libvirt will have a dnsmasq or radvd daemon associated
|
||||||
* with them. Here we send a SIGHUP to an existing
|
* with them. Here we send a SIGHUP to an existing
|
||||||
* dnsmasq and/or radvd, or restart them if they've
|
* dnsmasq and/or radvd, or restart them if they've
|
||||||
* disappeared.
|
* disappeared.
|
||||||
*/
|
*/
|
||||||
networkRefreshDhcpDaemon(network);
|
networkRefreshDhcpDaemon(net);
|
||||||
networkRefreshRadvd(network);
|
networkRefreshRadvd(net);
|
||||||
}
|
}
|
||||||
virNetworkObjUnlock(network);
|
virNetworkObjUnlock(net);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SIGHUP/restart any dnsmasq or radvd daemons.
|
||||||
|
* This should be called when libvirtd is restarted.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
networkRefreshDaemons(void)
|
||||||
|
{
|
||||||
|
VIR_INFO("Refreshing network daemons");
|
||||||
|
virNetworkObjListForEach(driver->networks,
|
||||||
|
networkRefreshDaemonsHelper,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
networkReloadFirewallRulesHelper(virNetworkObjPtr net,
|
||||||
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
|
||||||
|
virNetworkObjLock(net);
|
||||||
|
if (virNetworkObjIsActive(net) &&
|
||||||
|
((net->def->forward.type == VIR_NETWORK_FORWARD_NONE) ||
|
||||||
|
(net->def->forward.type == VIR_NETWORK_FORWARD_NAT) ||
|
||||||
|
(net->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) {
|
||||||
|
/* Only the three L3 network types that are configured by libvirt
|
||||||
|
* need to have iptables rules reloaded.
|
||||||
|
*/
|
||||||
|
networkRemoveFirewallRules(net->def);
|
||||||
|
if (networkAddFirewallRules(net->def) < 0) {
|
||||||
|
/* failed to add but already logged */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
virNetworkObjUnlock(net);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
networkReloadFirewallRules(void)
|
networkReloadFirewallRules(void)
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
|
|
||||||
VIR_INFO("Reloading iptables rules");
|
VIR_INFO("Reloading iptables rules");
|
||||||
|
virNetworkObjListForEach(driver->networks,
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
networkReloadFirewallRulesHelper,
|
||||||
virNetworkObjPtr network = driver->networks->objs[i];
|
NULL);
|
||||||
|
|
||||||
virNetworkObjLock(network);
|
|
||||||
if (virNetworkObjIsActive(network) &&
|
|
||||||
((network->def->forward.type == VIR_NETWORK_FORWARD_NONE) ||
|
|
||||||
(network->def->forward.type == VIR_NETWORK_FORWARD_NAT) ||
|
|
||||||
(network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) {
|
|
||||||
/* Only the three L3 network types that are configured by libvirt
|
|
||||||
* need to have iptables rules reloaded.
|
|
||||||
*/
|
|
||||||
networkRemoveFirewallRules(network->def);
|
|
||||||
if (networkAddFirewallRules(network->def) < 0) {
|
|
||||||
/* failed to add but already logged */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
virNetworkObjUnlock(network);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable IP Forwarding. Return 0 for success, -1 for failure. */
|
/* Enable IP Forwarding. Return 0 for success, -1 for failure. */
|
||||||
@ -2526,21 +2530,16 @@ static virNetworkPtr networkLookupByName(virConnectPtr conn,
|
|||||||
|
|
||||||
static int networkConnectNumOfNetworks(virConnectPtr conn)
|
static int networkConnectNumOfNetworks(virConnectPtr conn)
|
||||||
{
|
{
|
||||||
int nactive = 0;
|
int nactive;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (virConnectNumOfNetworksEnsureACL(conn) < 0)
|
if (virConnectNumOfNetworksEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
networkDriverLock();
|
networkDriverLock();
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
nactive = virNetworkObjListNumOfNetworks(driver->networks,
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
true,
|
||||||
virNetworkObjLock(obj);
|
virConnectNumOfNetworksCheckACL,
|
||||||
if (virConnectNumOfNetworksCheckACL(conn, obj->def) &&
|
conn);
|
||||||
virNetworkObjIsActive(obj))
|
|
||||||
nactive++;
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
}
|
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
|
|
||||||
return nactive;
|
return nactive;
|
||||||
@ -2548,53 +2547,32 @@ static int networkConnectNumOfNetworks(virConnectPtr conn)
|
|||||||
|
|
||||||
static int networkConnectListNetworks(virConnectPtr conn, char **const names, int nnames) {
|
static int networkConnectListNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||||
int got = 0;
|
int got = 0;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (virConnectListNetworksEnsureACL(conn) < 0)
|
if (virConnectListNetworksEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
networkDriverLock();
|
networkDriverLock();
|
||||||
for (i = 0; i < driver->networks->count && got < nnames; i++) {
|
got = virNetworkObjListGetNames(driver->networks,
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
true, names, nnames,
|
||||||
virNetworkObjLock(obj);
|
virConnectListNetworksCheckACL,
|
||||||
if (virConnectListNetworksCheckACL(conn, obj->def) &&
|
conn);
|
||||||
virNetworkObjIsActive(obj)) {
|
|
||||||
if (VIR_STRDUP(names[got], obj->def->name) < 0) {
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
got++;
|
|
||||||
}
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
}
|
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
|
|
||||||
return got;
|
return got;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
networkDriverUnlock();
|
|
||||||
for (i = 0; i < got; i++)
|
|
||||||
VIR_FREE(names[i]);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int networkConnectNumOfDefinedNetworks(virConnectPtr conn)
|
static int networkConnectNumOfDefinedNetworks(virConnectPtr conn)
|
||||||
{
|
{
|
||||||
int ninactive = 0;
|
int ninactive = 0;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (virConnectNumOfDefinedNetworksEnsureACL(conn) < 0)
|
if (virConnectNumOfDefinedNetworksEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
networkDriverLock();
|
networkDriverLock();
|
||||||
for (i = 0; i < driver->networks->count; i++) {
|
ninactive = virNetworkObjListNumOfNetworks(driver->networks,
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
false,
|
||||||
virNetworkObjLock(obj);
|
virConnectNumOfDefinedNetworksCheckACL,
|
||||||
if (virConnectNumOfDefinedNetworksCheckACL(conn, obj->def) &&
|
conn);
|
||||||
!virNetworkObjIsActive(obj))
|
|
||||||
ninactive++;
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
}
|
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
|
|
||||||
return ninactive;
|
return ninactive;
|
||||||
@ -2602,33 +2580,17 @@ static int networkConnectNumOfDefinedNetworks(virConnectPtr conn)
|
|||||||
|
|
||||||
static int networkConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
|
static int networkConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
|
||||||
int got = 0;
|
int got = 0;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (virConnectListDefinedNetworksEnsureACL(conn) < 0)
|
if (virConnectListDefinedNetworksEnsureACL(conn) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
networkDriverLock();
|
networkDriverLock();
|
||||||
for (i = 0; i < driver->networks->count && got < nnames; i++) {
|
got = virNetworkObjListGetNames(driver->networks,
|
||||||
virNetworkObjPtr obj = driver->networks->objs[i];
|
false, names, nnames,
|
||||||
virNetworkObjLock(obj);
|
virConnectListDefinedNetworksCheckACL,
|
||||||
if (virConnectListDefinedNetworksCheckACL(conn, obj->def) &&
|
conn);
|
||||||
!virNetworkObjIsActive(obj)) {
|
|
||||||
if (VIR_STRDUP(names[got], obj->def->name) < 0) {
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
got++;
|
|
||||||
}
|
|
||||||
virNetworkObjUnlock(obj);
|
|
||||||
}
|
|
||||||
networkDriverUnlock();
|
networkDriverUnlock();
|
||||||
return got;
|
return got;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
networkDriverUnlock();
|
|
||||||
for (i = 0; i < got; i++)
|
|
||||||
VIR_FREE(names[i]);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user