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
|
||||
|
||||
nodist_systemd_networkd_SOURCES = \
|
||||
src/network/networkd-gperf.c
|
||||
src/network/networkd-network-gperf.c \
|
||||
src/network/networkd-netdev-gperf.c
|
||||
|
||||
systemd_networkd_LDADD = \
|
||||
libudev-internal.la \
|
||||
|
@ -3949,7 +3950,8 @@ test_network_SOURCES = \
|
|||
src/network/networkd-address.c \
|
||||
src/network/networkd-route.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 = \
|
||||
libudev-internal.la \
|
||||
|
@ -3962,11 +3964,13 @@ tests += \
|
|||
test-network
|
||||
|
||||
EXTRA_DIST += \
|
||||
src/network/networkd-gperf.gperf \
|
||||
src/network/networkd-network-gperf.gperf \
|
||||
src/network/networkd-netdev-gperf.gperf \
|
||||
units/systemd-networkd.service.in
|
||||
|
||||
CLEANFILES += \
|
||||
src/network/networkd-gperf.c
|
||||
src/network/networkd-network-gperf.c \
|
||||
src/network/networkd-netdev-gperf.c
|
||||
endif
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
|
|
@ -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)
|
|
@ -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->vlanid = VLANID_MAX + 1;
|
||||
|
||||
r = config_parse(NULL, filename, file, "NetDev\0VLAN\0", config_item_perf_lookup,
|
||||
(void*) network_gperf_lookup, false, false, netdev);
|
||||
r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0", config_item_perf_lookup,
|
||||
(void*) network_netdev_gperf_lookup, false, false, netdev);
|
||||
if (r < 0) {
|
||||
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
||||
return r;
|
||||
|
@ -363,6 +363,12 @@ static int netdev_load_one(Manager *manager, const char *filename) {
|
|||
if (!netdev->filename)
|
||||
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);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
|
|
@ -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;
|
||||
|
||||
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) {
|
||||
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
|
||||
return r;
|
||||
|
|
|
@ -71,6 +71,10 @@ struct NetDev {
|
|||
|
||||
char *filename;
|
||||
|
||||
Condition *condition_host;
|
||||
Condition *condition_virt;
|
||||
Condition *condition_kernel;
|
||||
|
||||
char *description;
|
||||
char *name;
|
||||
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);
|
||||
|
||||
/* gperf */
|
||||
const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
|
||||
|
||||
/* Network */
|
||||
|
||||
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);
|
||||
|
||||
/* gperf */
|
||||
|
||||
const struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
|
||||
const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
|
||||
|
||||
/* Route */
|
||||
int route_new_static(Network *network, unsigned section, Route **ret);
|
||||
|
|
Loading…
Reference in New Issue