nspawn: add new --network-veth-extra= switch for defining additional veth links
The new switch operates like --network-veth, but may be specified multiple times (to define multiple link pairs) and allows flexible definition of the interface names. This is an independent reimplementation of #1678, but defines different semantics, keeping the behaviour completely independent of --network-veth. It also comes will full hook-up for .nspawn files, and the matching documentation.
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include "alloc-util.h"
|
||||
#include "cap-list.h"
|
||||
#include "conf-parser.h"
|
||||
#include "nspawn-network.h"
|
||||
#include "nspawn-settings.h"
|
||||
#include "process-util.h"
|
||||
#include "strv.h"
|
||||
@@ -77,6 +78,7 @@ Settings* settings_free(Settings *s) {
|
||||
strv_free(s->network_interfaces);
|
||||
strv_free(s->network_macvlan);
|
||||
strv_free(s->network_ipvlan);
|
||||
strv_free(s->network_veth_extra);
|
||||
free(s->network_bridge);
|
||||
expose_port_free_all(s->expose_ports);
|
||||
|
||||
@@ -95,7 +97,8 @@ bool settings_private_network(Settings *s) {
|
||||
s->network_bridge ||
|
||||
s->network_interfaces ||
|
||||
s->network_macvlan ||
|
||||
s->network_ipvlan;
|
||||
s->network_ipvlan ||
|
||||
s->network_veth_extra;
|
||||
}
|
||||
|
||||
bool settings_network_veth(Settings *s) {
|
||||
@@ -269,15 +272,33 @@ int config_parse_tmpfs(
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (settings->network_bridge)
|
||||
settings->network_veth = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (settings->network_interfaces ||
|
||||
settings->network_macvlan ||
|
||||
settings->network_ipvlan ||
|
||||
settings->network_bridge ||
|
||||
settings->network_veth)
|
||||
settings->private_network = true;
|
||||
int config_parse_veth_extra(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
Settings *settings = data;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
|
||||
r = veth_extra_parse(&settings->network_veth_extra, rvalue);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Invalid extra virtual Ethernet link specification %s: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user