networkd: netdev - allow filtering on kernel cmdline, host and virt
This commit is contained in:
parent
2cc412b593
commit
c0dda18697
12
Makefile.am
12
Makefile.am
|
@ -3925,7 +3925,8 @@ systemd_networkd_SOURCES = \
|
||||||
src/network/networkd-manager.c
|
src/network/networkd-manager.c
|
||||||
|
|
||||||
nodist_systemd_networkd_SOURCES = \
|
nodist_systemd_networkd_SOURCES = \
|
||||||
src/network/networkd-gperf.c
|
src/network/networkd-network-gperf.c \
|
||||||
|
src/network/networkd-netdev-gperf.c
|
||||||
|
|
||||||
systemd_networkd_LDADD = \
|
systemd_networkd_LDADD = \
|
||||||
libudev-internal.la \
|
libudev-internal.la \
|
||||||
|
@ -3949,7 +3950,8 @@ test_network_SOURCES = \
|
||||||
src/network/networkd-address.c \
|
src/network/networkd-address.c \
|
||||||
src/network/networkd-route.c \
|
src/network/networkd-route.c \
|
||||||
src/network/networkd-manager.c \
|
src/network/networkd-manager.c \
|
||||||
src/network/networkd-gperf.c
|
src/network/networkd-network-gperf.c \
|
||||||
|
src/network/networkd-netdev-gperf.c
|
||||||
|
|
||||||
test_network_LDADD = \
|
test_network_LDADD = \
|
||||||
libudev-internal.la \
|
libudev-internal.la \
|
||||||
|
@ -3962,11 +3964,13 @@ tests += \
|
||||||
test-network
|
test-network
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
src/network/networkd-gperf.gperf \
|
src/network/networkd-network-gperf.gperf \
|
||||||
|
src/network/networkd-netdev-gperf.gperf \
|
||||||
units/systemd-networkd.service.in
|
units/systemd-networkd.service.in
|
||||||
|
|
||||||
CLEANFILES += \
|
CLEANFILES += \
|
||||||
src/network/networkd-gperf.c
|
src/network/networkd-network-gperf.c \
|
||||||
|
src/network/networkd-netdev-gperf.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
3
src/network/.gitignore
vendored
3
src/network/.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
/networkd-gperf.c
|
/networkd-network-gperf.c
|
||||||
|
/networkd-netdev-gperf.c
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
%{
|
|
||||||
#include <stddef.h>
|
|
||||||
#include "conf-parser.h"
|
|
||||||
#include "networkd.h"
|
|
||||||
#include "net-util.h"
|
|
||||||
%}
|
|
||||||
struct ConfigPerfItem;
|
|
||||||
%null_strings
|
|
||||||
%language=ANSI-C
|
|
||||||
%define slot-name section_and_lvalue
|
|
||||||
%define hash-function-name network_gperf_hash
|
|
||||||
%define lookup-function-name network_gperf_lookup
|
|
||||||
%readonly-tables
|
|
||||||
%omit-struct-type
|
|
||||||
%struct-type
|
|
||||||
%includes
|
|
||||||
%%
|
|
||||||
Match.MACAddress, config_parse_hwaddr, 0, offsetof(Network, match_mac)
|
|
||||||
Match.Path, config_parse_string, 0, offsetof(Network, match_path)
|
|
||||||
Match.Driver, config_parse_string, 0, offsetof(Network, match_driver)
|
|
||||||
Match.Type, config_parse_string, 0, offsetof(Network, match_type)
|
|
||||||
Match.Name, config_parse_ifname, 0, offsetof(Network, match_name)
|
|
||||||
Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(Network, match_host)
|
|
||||||
Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, match_virt)
|
|
||||||
Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel)
|
|
||||||
Network.Description, config_parse_string, 0, offsetof(Network, description)
|
|
||||||
Network.Bridge, config_parse_bridge, 0, offsetof(Network, bridge)
|
|
||||||
Network.Bond, config_parse_bond, 0, offsetof(Network, bond)
|
|
||||||
Network.VLAN, config_parse_vlan, 0, offsetof(Network, vlans)
|
|
||||||
Network.DHCP, config_parse_bool, 0, offsetof(Network, dhcp)
|
|
||||||
Network.Address, config_parse_address, 0, 0
|
|
||||||
Network.Gateway, config_parse_gateway, 0, 0
|
|
||||||
Network.DNS, config_parse_dns, 0, offsetof(Network, dns)
|
|
||||||
Address.Address, config_parse_address, 0, 0
|
|
||||||
Address.Broadcast, config_parse_broadcast, 0, 0
|
|
||||||
Address.Label, config_parse_label, 0, 0
|
|
||||||
Route.Gateway, config_parse_gateway, 0, 0
|
|
||||||
Route.Destination, config_parse_destination, 0, 0
|
|
||||||
DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns)
|
|
||||||
DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_mtu)
|
|
||||||
DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_hostname)
|
|
||||||
DHCPv4.UseDomainName, config_parse_bool, 0, offsetof(Network, dhcp_domainname)
|
|
||||||
DHCPv4.CriticalConnection, config_parse_bool, 0, offsetof(Network, dhcp_critical)
|
|
||||||
NetDev.Description, config_parse_string, 0, offsetof(NetDev, description)
|
|
||||||
NetDev.Name, config_parse_ifname, 0, offsetof(NetDev, name)
|
|
||||||
NetDev.Kind, config_parse_netdev_kind, 0, offsetof(NetDev, kind)
|
|
||||||
VLAN.Id, config_parse_uint64, 0, offsetof(NetDev, vlanid)
|
|
24
src/network/networkd-netdev-gperf.gperf
Normal file
24
src/network/networkd-netdev-gperf.gperf
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
%{
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "conf-parser.h"
|
||||||
|
#include "networkd.h"
|
||||||
|
#include "net-util.h"
|
||||||
|
%}
|
||||||
|
struct ConfigPerfItem;
|
||||||
|
%null_strings
|
||||||
|
%language=ANSI-C
|
||||||
|
%define slot-name section_and_lvalue
|
||||||
|
%define hash-function-name network_netdev_gperf_hash
|
||||||
|
%define lookup-function-name network_netdev_gperf_lookup
|
||||||
|
%readonly-tables
|
||||||
|
%omit-struct-type
|
||||||
|
%struct-type
|
||||||
|
%includes
|
||||||
|
%%
|
||||||
|
Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(NetDev, condition_host)
|
||||||
|
Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(NetDev, condition_virt)
|
||||||
|
Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, condition_kernel)
|
||||||
|
NetDev.Description, config_parse_string, 0, offsetof(NetDev, description)
|
||||||
|
NetDev.Name, config_parse_ifname, 0, offsetof(NetDev, name)
|
||||||
|
NetDev.Kind, config_parse_netdev_kind, 0, offsetof(NetDev, kind)
|
||||||
|
VLAN.Id, config_parse_uint64, 0, offsetof(NetDev, vlanid)
|
|
@ -337,8 +337,8 @@ static int netdev_load_one(Manager *manager, const char *filename) {
|
||||||
netdev->kind = _NETDEV_KIND_INVALID;
|
netdev->kind = _NETDEV_KIND_INVALID;
|
||||||
netdev->vlanid = VLANID_MAX + 1;
|
netdev->vlanid = VLANID_MAX + 1;
|
||||||
|
|
||||||
r = config_parse(NULL, filename, file, "NetDev\0VLAN\0", config_item_perf_lookup,
|
r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0", config_item_perf_lookup,
|
||||||
(void*) network_gperf_lookup, false, false, netdev);
|
(void*) network_netdev_gperf_lookup, false, false, netdev);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
||||||
return r;
|
return r;
|
||||||
|
@ -363,6 +363,12 @@ static int netdev_load_one(Manager *manager, const char *filename) {
|
||||||
if (!netdev->filename)
|
if (!netdev->filename)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
|
|
||||||
|
if (net_match_config(NULL, NULL, NULL, NULL, NULL,
|
||||||
|
netdev->condition_host, netdev->condition_virt,
|
||||||
|
netdev->condition_kernel, NULL, NULL, NULL,
|
||||||
|
NULL, NULL) <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);
|
r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
43
src/network/networkd-network-gperf.gperf
Normal file
43
src/network/networkd-network-gperf.gperf
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
%{
|
||||||
|
#include <stddef.h>
|
||||||
|
#include "conf-parser.h"
|
||||||
|
#include "networkd.h"
|
||||||
|
#include "net-util.h"
|
||||||
|
%}
|
||||||
|
struct ConfigPerfItem;
|
||||||
|
%null_strings
|
||||||
|
%language=ANSI-C
|
||||||
|
%define slot-name section_and_lvalue
|
||||||
|
%define hash-function-name network_network_gperf_hash
|
||||||
|
%define lookup-function-name network_network_gperf_lookup
|
||||||
|
%readonly-tables
|
||||||
|
%omit-struct-type
|
||||||
|
%struct-type
|
||||||
|
%includes
|
||||||
|
%%
|
||||||
|
Match.MACAddress, config_parse_hwaddr, 0, offsetof(Network, match_mac)
|
||||||
|
Match.Path, config_parse_string, 0, offsetof(Network, match_path)
|
||||||
|
Match.Driver, config_parse_string, 0, offsetof(Network, match_driver)
|
||||||
|
Match.Type, config_parse_string, 0, offsetof(Network, match_type)
|
||||||
|
Match.Name, config_parse_ifname, 0, offsetof(Network, match_name)
|
||||||
|
Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(Network, match_host)
|
||||||
|
Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, match_virt)
|
||||||
|
Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, match_kernel)
|
||||||
|
Network.Description, config_parse_string, 0, offsetof(Network, description)
|
||||||
|
Network.Bridge, config_parse_bridge, 0, offsetof(Network, bridge)
|
||||||
|
Network.Bond, config_parse_bond, 0, offsetof(Network, bond)
|
||||||
|
Network.VLAN, config_parse_vlan, 0, offsetof(Network, vlans)
|
||||||
|
Network.DHCP, config_parse_bool, 0, offsetof(Network, dhcp)
|
||||||
|
Network.Address, config_parse_address, 0, 0
|
||||||
|
Network.Gateway, config_parse_gateway, 0, 0
|
||||||
|
Network.DNS, config_parse_dns, 0, offsetof(Network, dns)
|
||||||
|
Address.Address, config_parse_address, 0, 0
|
||||||
|
Address.Broadcast, config_parse_broadcast, 0, 0
|
||||||
|
Address.Label, config_parse_label, 0, 0
|
||||||
|
Route.Gateway, config_parse_gateway, 0, 0
|
||||||
|
Route.Destination, config_parse_destination, 0, 0
|
||||||
|
DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_dns)
|
||||||
|
DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_mtu)
|
||||||
|
DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_hostname)
|
||||||
|
DHCPv4.UseDomainName, config_parse_bool, 0, offsetof(Network, dhcp_domainname)
|
||||||
|
DHCPv4.CriticalConnection, config_parse_bool, 0, offsetof(Network, dhcp_critical)
|
|
@ -74,7 +74,7 @@ static int network_load_one(Manager *manager, const char *filename) {
|
||||||
network->dhcp_domainname = true;
|
network->dhcp_domainname = true;
|
||||||
|
|
||||||
r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCPv4\0", config_item_perf_lookup,
|
r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCPv4\0", config_item_perf_lookup,
|
||||||
(void*) network_gperf_lookup, false, false, network);
|
(void*) network_network_gperf_lookup, false, false, network);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -71,6 +71,10 @@ struct NetDev {
|
||||||
|
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
|
Condition *condition_host;
|
||||||
|
Condition *condition_virt;
|
||||||
|
Condition *condition_kernel;
|
||||||
|
|
||||||
char *description;
|
char *description;
|
||||||
char *name;
|
char *name;
|
||||||
NetDevKind kind;
|
NetDevKind kind;
|
||||||
|
@ -242,6 +246,9 @@ NetDevKind netdev_kind_from_string(const char *d) _pure_;
|
||||||
|
|
||||||
int config_parse_netdev_kind(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);
|
int config_parse_netdev_kind(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);
|
||||||
|
|
||||||
|
/* gperf */
|
||||||
|
const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
|
||||||
|
|
||||||
/* Network */
|
/* Network */
|
||||||
|
|
||||||
int network_load(Manager *manager);
|
int network_load(Manager *manager);
|
||||||
|
@ -267,8 +274,7 @@ int config_parse_vlan(const char *unit, const char *filename, unsigned line,
|
||||||
int ltype, const char *rvalue, void *data, void *userdata);
|
int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
|
|
||||||
/* gperf */
|
/* gperf */
|
||||||
|
const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
|
||||||
const struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
|
|
||||||
|
|
||||||
/* Route */
|
/* Route */
|
||||||
int route_new_static(Network *network, unsigned section, Route **ret);
|
int route_new_static(Network *network, unsigned section, Route **ret);
|
||||||
|
|
Loading…
Reference in a new issue