chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net-util: match on the driver as exposed by ethtool if DRIVER not set
[elogind.git]
/
src
/
network
/
networkd-netdev.c
diff --git
a/src/network/networkd-netdev.c
b/src/network/networkd-netdev.c
index 76f1deae58ad8c902d76cd01f72b2d15c97d7db2..05f21fa87426272c08c51c695063ec73569a597e 100644
(file)
--- a/
src/network/networkd-netdev.c
+++ b/
src/network/networkd-netdev.c
@@
-26,6
+26,8
@@
#include "conf-parser.h"
#include "list.h"
#include "conf-parser.h"
#include "list.h"
+#define VLANID_MAX 4094
+
static const char* const netdev_kind_table[] = {
[NETDEV_KIND_BRIDGE] = "bridge",
[NETDEV_KIND_BOND] = "bond",
static const char* const netdev_kind_table[] = {
[NETDEV_KIND_BRIDGE] = "bridge",
[NETDEV_KIND_BOND] = "bond",
@@
-82,15
+84,18
@@
static int netdev_enter_failed(NetDev *netdev) {
}
static int netdev_enslave_ready(NetDev *netdev, Link* link, sd_rtnl_message_handler_t callback) {
}
static int netdev_enslave_ready(NetDev *netdev, Link* link, sd_rtnl_message_handler_t callback) {
- _cleanup_
sd_
rtnl_message_unref_ sd_rtnl_message *req = NULL;
+ _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL;
int r;
assert(netdev);
assert(netdev->state == NETDEV_STATE_READY);
int r;
assert(netdev);
assert(netdev->state == NETDEV_STATE_READY);
+ assert(netdev->manager);
+ assert(netdev->manager->rtnl);
assert(link);
assert(callback);
assert(link);
assert(callback);
- r = sd_rtnl_message_link_new(RTM_SETLINK, link->ifindex, &req);
+ r = sd_rtnl_message_new_link(netdev->manager->rtnl, &req,
+ RTM_SETLINK, link->ifindex);
if (r < 0) {
log_error_netdev(netdev,
"Could not allocate RTM_SETLINK message: %s",
if (r < 0) {
log_error_netdev(netdev,
"Could not allocate RTM_SETLINK message: %s",
@@
-156,17
+161,18
@@
static int netdev_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda
}
static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
}
static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
- _cleanup_
sd_
rtnl_message_unref_ sd_rtnl_message *req = NULL;
+ _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL;
const char *kind;
int r;
assert(netdev);
const char *kind;
int r;
assert(netdev);
- assert(!(netdev->kind == NETDEV_KIND_VLAN) || (link && callback && netdev->vlanid >= 0));
+ assert(!(netdev->kind == NETDEV_KIND_VLAN) ||
+ (link && callback && netdev->vlanid <= VLANID_MAX));
assert(netdev->name);
assert(netdev->manager);
assert(netdev->manager->rtnl);
assert(netdev->name);
assert(netdev->manager);
assert(netdev->manager->rtnl);
- r = sd_rtnl_message_
link_new(RTM_NEWLINK, 0, &req
);
+ r = sd_rtnl_message_
new_link(netdev->manager->rtnl, &req, RTM_NEWLINK, 0
);
if (r < 0) {
log_error_netdev(netdev,
"Could not allocate RTM_NEWLINK message: %s",
if (r < 0) {
log_error_netdev(netdev,
"Could not allocate RTM_NEWLINK message: %s",
@@
-214,7
+220,7
@@
static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
return r;
}
return r;
}
- if (netdev->vlanid
>= 0
) {
+ if (netdev->vlanid
<= VLANID_MAX
) {
r = sd_rtnl_message_open_container(req, IFLA_INFO_DATA);
if (r < 0) {
log_error_netdev(netdev,
r = sd_rtnl_message_open_container(req, IFLA_INFO_DATA);
if (r < 0) {
log_error_netdev(netdev,
@@
-329,10
+335,10
@@
static int netdev_load_one(Manager *manager, const char *filename) {
netdev->manager = manager;
netdev->state = _NETDEV_STATE_INVALID;
netdev->kind = _NETDEV_KIND_INVALID;
netdev->manager = manager;
netdev->state = _NETDEV_STATE_INVALID;
netdev->kind = _NETDEV_KIND_INVALID;
- netdev->vlanid =
-
1;
+ 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\0
NetDev\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;
if (r < 0) {
log_warning("Could not parse config file %s: %s", filename, strerror(-r));
return r;
@@
-348,8
+354,8
@@
static int netdev_load_one(Manager *manager, const char *filename) {
return 0;
}
return 0;
}
- if (netdev->kind == NETDEV_KIND_VLAN && netdev->vlanid
< 0
) {
- log_warning("VLAN without Id configured in %s. Ignoring", filename);
+ if (netdev->kind == NETDEV_KIND_VLAN && netdev->vlanid
> VLANID_MAX
) {
+ log_warning("VLAN without
valid
Id configured in %s. Ignoring", filename);
return 0;
}
return 0;
}
@@
-357,6
+363,12
@@
static int netdev_load_one(Manager *manager, const char *filename) {
if (!netdev->filename)
return log_oom();
if (!netdev->filename)
return log_oom();
+ if (net_match_config(NULL, NULL, NULL, NULL, NULL,
+ netdev->match_host, netdev->match_virt,
+ netdev->match_kernel, netdev->match_arch,
+ NULL, NULL, NULL, NULL, NULL, NULL) <= 0)
+ return 0;
+
r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);
if (r < 0)
return r;
r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);
if (r < 0)
return r;