X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-netdev.c;h=4439374a675490ea7b6fe09becc9f1fca6a688c7;hp=62e1a3e26d9438ee2e96fda61ab7e59fd976d937;hb=a9f434cf00d1d36d9a013b9739efe69653dd7279;hpb=7951dea20911969287878e6897b3eca348721ade
diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
index 62e1a3e26..4439374a6 100644
--- a/src/network/networkd-netdev.c
+++ b/src/network/networkd-netdev.c
@@ -19,6 +19,8 @@
along with systemd; If not, see .
***/
+#include
+
#include "networkd.h"
#include "network-internal.h"
#include "path-util.h"
@@ -36,6 +38,7 @@ static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
[NETDEV_KIND_IPIP] = "ipip",
[NETDEV_KIND_GRE] = "gre",
[NETDEV_KIND_SIT] = "sit",
+ [NETDEV_KIND_VETH] = "veth",
};
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
@@ -81,13 +84,13 @@ static void netdev_free(NetDev *netdev) {
netdev_cancel_callbacks(netdev);
- if (netdev->name)
- hashmap_remove(netdev->manager->netdevs, netdev->name);
+ if (netdev->ifname)
+ hashmap_remove(netdev->manager->netdevs, netdev->ifname);
free(netdev->filename);
free(netdev->description);
- free(netdev->name);
+ free(netdev->ifname);
condition_free_list(netdev->match_host);
condition_free_list(netdev->match_virt);
@@ -195,7 +198,7 @@ static int netdev_enter_ready(NetDev *netdev) {
netdev_enslave_callback *callback;
assert(netdev);
- assert(netdev->name);
+ assert(netdev->ifname);
if (netdev->state != NETDEV_STATE_CREATING)
return 0;
@@ -222,7 +225,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) {
- log_warning_netdev(netdev, "netdev could not be greated: %s", strerror(-r));
+ log_warning_netdev(netdev, "netdev could not be created: %s", strerror(-r));
netdev_drop(netdev);
return 1;
@@ -267,7 +270,7 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
assert(netdev);
assert(!(netdev->kind == NETDEV_KIND_VLAN || netdev->kind == NETDEV_KIND_MACVLAN) ||
(link && callback));
- assert(netdev->name);
+ assert(netdev->ifname);
assert(netdev->manager);
assert(netdev->manager->rtnl);
@@ -289,7 +292,7 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
}
}
- r = sd_rtnl_message_append_string(req, IFLA_IFNAME, netdev->name);
+ r = sd_rtnl_message_append_string(req, IFLA_IFNAME, netdev->ifname);
if (r < 0) {
log_error_netdev(netdev,
"Could not append IFLA_IFNAME attribute: %s",
@@ -446,7 +449,6 @@ int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *message) {
return r;
}
-
if (netdev->ifindex > 0) {
if (netdev->ifindex != ifindex) {
log_error_netdev(netdev, "Could not set ifindex to %d, already set to %d",
@@ -464,7 +466,7 @@ int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *message) {
return r;
}
- if (!streq(netdev->name, received_name)) {
+ if (!streq(netdev->ifname, received_name)) {
log_error_netdev(netdev, "Received newlink with wrong IFNAME %s",
received_name);
netdev_enter_failed(netdev);
@@ -505,6 +507,8 @@ int netdev_set_ifindex(NetDev *netdev, sd_rtnl_message *message) {
netdev->ifindex = ifindex;
+ log_debug_netdev(netdev, "netdev has index %d", netdev->ifindex);
+
netdev_enter_ready(netdev);
return 0;
@@ -541,8 +545,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->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\0Peer\0",
config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
false, false, netdev);
if (r < 0) {
@@ -555,7 +560,7 @@ static int netdev_load_one(Manager *manager, const char *filename) {
return 0;
}
- if (!netdev->name) {
+ if (!netdev->ifname) {
log_warning("NetDev without Name configured in %s. Ignoring", filename);
return 0;
}
@@ -588,12 +593,15 @@ static int netdev_load_one(Manager *manager, const char *filename) {
NULL, NULL, NULL, NULL, NULL, NULL) <= 0)
return 0;
- r = hashmap_put(netdev->manager->netdevs, netdev->name, netdev);
+ r = hashmap_put(netdev->manager->netdevs, netdev->ifname, netdev);
if (r < 0)
return r;
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 &&