chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
networkd: netdev - allow setting MACAddress in .netdev files
[elogind.git]
/
src
/
network
/
networkd-netdev.c
diff --git
a/src/network/networkd-netdev.c
b/src/network/networkd-netdev.c
index 8623274d8b3f417e4256e367b97cfef4bf079124..0d08e564e57735e7248c914905f8327bcf750b9d 100644
(file)
--- a/
src/network/networkd-netdev.c
+++ b/
src/network/networkd-netdev.c
@@
-38,6
+38,8
@@
static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
[NETDEV_KIND_IPIP] = "ipip",
[NETDEV_KIND_GRE] = "gre",
[NETDEV_KIND_SIT] = "sit",
[NETDEV_KIND_IPIP] = "ipip",
[NETDEV_KIND_GRE] = "gre",
[NETDEV_KIND_SIT] = "sit",
+ [NETDEV_KIND_VETH] = "veth",
+ [NETDEV_KIND_VTI] = "vti"
};
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
};
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
@@
-90,6
+92,8
@@
static void netdev_free(NetDev *netdev) {
free(netdev->description);
free(netdev->ifname);
free(netdev->description);
free(netdev->ifname);
+ free(netdev->mac);
+ free(netdev->mac_peer);
condition_free_list(netdev->match_host);
condition_free_list(netdev->match_virt);
condition_free_list(netdev->match_host);
condition_free_list(netdev->match_virt);
@@
-224,7
+228,7
@@
static int netdev_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda
if (r == -EEXIST)
log_debug_netdev(netdev, "netdev exists, using existing");
else if (r < 0) {
if (r == -EEXIST)
log_debug_netdev(netdev, "netdev exists, using existing");
else if (r < 0) {
- log_warning_netdev(netdev, "netdev could not be
g
reated: %s", strerror(-r));
+ log_warning_netdev(netdev, "netdev could not be
c
reated: %s", strerror(-r));
netdev_drop(netdev);
return 1;
netdev_drop(netdev);
return 1;
@@
-299,7
+303,7
@@
static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
return r;
}
return r;
}
- if(netdev->mtu) {
+ if
(netdev->mtu) {
r = sd_rtnl_message_append_u32(req, IFLA_MTU, netdev->mtu);
if (r < 0) {
log_error_netdev(netdev,
r = sd_rtnl_message_append_u32(req, IFLA_MTU, netdev->mtu);
if (r < 0) {
log_error_netdev(netdev,
@@
-309,6
+313,16
@@
static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
}
}
}
}
+ if (netdev->mac) {
+ r = sd_rtnl_message_append_ether_addr(req, IFLA_ADDRESS, netdev->mac);
+ if (r < 0) {
+ log_error_netdev(netdev,
+ "Colud not append IFLA_ADDRESS attribute: %s",
+ strerror(-r));
+ return r;
+ }
+ }
+
r = sd_rtnl_message_open_container(req, IFLA_LINKINFO);
if (r < 0) {
log_error_netdev(netdev,
r = sd_rtnl_message_open_container(req, IFLA_LINKINFO);
if (r < 0) {
log_error_netdev(netdev,
@@
-392,7
+406,8
@@
int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callbac
if(netdev->kind == NETDEV_KIND_IPIP ||
netdev->kind == NETDEV_KIND_GRE ||
if(netdev->kind == NETDEV_KIND_IPIP ||
netdev->kind == NETDEV_KIND_GRE ||
- netdev->kind == NETDEV_KIND_SIT)
+ netdev->kind == NETDEV_KIND_SIT ||
+ netdev->kind == NETDEV_KIND_VTI)
return netdev_create_tunnel(link, netdev_create_handler);
if (netdev->state == NETDEV_STATE_READY) {
return netdev_create_tunnel(link, netdev_create_handler);
if (netdev->state == NETDEV_STATE_READY) {
@@
-448,7
+463,6
@@
int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *message) {
return r;
}
return r;
}
-
if (netdev->ifindex > 0) {
if (netdev->ifindex != ifindex) {
log_error_netdev(netdev, "Could not set ifindex to %d, already set to %d",
if (netdev->ifindex > 0) {
if (netdev->ifindex != ifindex) {
log_error_netdev(netdev, "Could not set ifindex to %d, already set to %d",
@@
-545,8
+559,9
@@
static int netdev_load_one(Manager *manager, const char *filename) {
netdev->kind = _NETDEV_KIND_INVALID;
netdev->macvlan_mode = _NETDEV_MACVLAN_MODE_INVALID;
netdev->vlanid = VLANID_MAX + 1;
netdev->kind = _NETDEV_KIND_INVALID;
netdev->macvlan_mode = _NETDEV_MACVLAN_MODE_INVALID;
netdev->vlanid = VLANID_MAX + 1;
+ netdev->tunnel_pmtudisc = true;
- r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0MACVLAN\0Tunnel\0",
+ r = config_parse(NULL, filename, file, "Match\0NetDev\0VLAN\0MACVLAN\0Tunnel\0
Peer\0
",
config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
false, false, netdev);
if (r < 0) {
config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
false, false, netdev);
if (r < 0) {
@@
-598,11
+613,15
@@
static int netdev_load_one(Manager *manager, const char *filename) {
LIST_HEAD_INIT(netdev->callbacks);
LIST_HEAD_INIT(netdev->callbacks);
+ if(netdev->kind == NETDEV_KIND_VETH)
+ return netdev_create_veth(netdev, netdev_create_handler);
+
if (netdev->kind != NETDEV_KIND_VLAN &&
netdev->kind != NETDEV_KIND_MACVLAN &&
netdev->kind != NETDEV_KIND_IPIP &&
netdev->kind != NETDEV_KIND_GRE &&
if (netdev->kind != NETDEV_KIND_VLAN &&
netdev->kind != NETDEV_KIND_MACVLAN &&
netdev->kind != NETDEV_KIND_IPIP &&
netdev->kind != NETDEV_KIND_GRE &&
- netdev->kind != NETDEV_KIND_SIT) {
+ netdev->kind != NETDEV_KIND_SIT &&
+ netdev->kind != NETDEV_KIND_VTI) {
r = netdev_create(netdev, NULL, NULL);
if (r < 0)
return r;
r = netdev_create(netdev, NULL, NULL);
if (r < 0)
return r;