networkd: Allow tunnels to be created without .network (#6701)

Now we don't support tunnels to be created without a .network file
that is we need a interface index.

This work allows tunnel to be created without a ifindex.

Closes #6695
This commit is contained in:
Susant Sahani
2017-08-31 18:51:03 +02:00
committed by Lennart Poettering
parent 99f5f8e256
commit 4d7fa6de3b
5 changed files with 88 additions and 30 deletions
+40 -1
View File
@@ -601,6 +601,7 @@ static int netdev_load_one(Manager *manager, const char *filename) {
_cleanup_free_ NetDev *netdev_raw = NULL;
_cleanup_fclose_ FILE *file = NULL;
const char *dropin_dirname;
bool independent = false;
int r;
assert(manager);
@@ -704,13 +705,51 @@ static int netdev_load_one(Manager *manager, const char *filename) {
case NETDEV_CREATE_INDEPENDENT:
r = netdev_create(netdev, NULL, NULL);
if (r < 0)
return 0;
return r;
break;
default:
break;
}
switch (netdev->kind) {
case NETDEV_KIND_IPIP:
independent = IPIP(netdev)->independent;
break;
case NETDEV_KIND_GRE:
independent = GRE(netdev)->independent;
break;
case NETDEV_KIND_GRETAP:
independent = GRETAP(netdev)->independent;
break;
case NETDEV_KIND_IP6GRE:
independent = IP6GRE(netdev)->independent;
break;
case NETDEV_KIND_IP6GRETAP:
independent = IP6GRETAP(netdev)->independent;
break;
case NETDEV_KIND_SIT:
independent = SIT(netdev)->independent;
break;
case NETDEV_KIND_VTI:
independent = VTI(netdev)->independent;
break;
case NETDEV_KIND_VTI6:
independent = VTI6(netdev)->independent;
break;
case NETDEV_KIND_IP6TNL:
independent = IP6TNL(netdev)->independent;
break;
default:
break;
}
if (independent) {
r = netdev_create(netdev, NULL, NULL);
if (r < 0)
return r;
}
netdev = NULL;
return 0;