mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 02:18:00 +02:00
device/ip-tunnel: add support for IPIP tunnels
This commit is contained in:
parent
d1b389bfa8
commit
8d2aa13534
1 changed files with 45 additions and 1 deletions
|
|
@ -176,6 +176,21 @@ update_properties (NMDevice *device)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parent_ifindex = lnk->parent_ifindex;
|
||||||
|
local4 = lnk->local;
|
||||||
|
remote4 = lnk->remote;
|
||||||
|
ttl = lnk->ttl;
|
||||||
|
tos = lnk->tos;
|
||||||
|
pmtud = lnk->path_mtu_discovery;
|
||||||
|
} else if (priv->mode == NM_IP_TUNNEL_MODE_IPIP) {
|
||||||
|
const NMPlatformLnkIpIp *lnk;
|
||||||
|
|
||||||
|
lnk = nm_platform_link_get_lnk_ipip (NM_PLATFORM_GET, nm_device_get_ifindex (device), NULL);
|
||||||
|
if (!lnk) {
|
||||||
|
_LOGW (LOGD_HW, "could not read %s properties", "ipip");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
parent_ifindex = lnk->parent_ifindex;
|
parent_ifindex = lnk->parent_ifindex;
|
||||||
local4 = lnk->local;
|
local4 = lnk->local;
|
||||||
remote4 = lnk->remote;
|
remote4 = lnk->remote;
|
||||||
|
|
@ -449,6 +464,8 @@ platform_link_to_tunnel_mode (const NMPlatformLink *link)
|
||||||
switch (link->type) {
|
switch (link->type) {
|
||||||
case NM_LINK_TYPE_GRE:
|
case NM_LINK_TYPE_GRE:
|
||||||
return NM_IP_TUNNEL_MODE_GRE;
|
return NM_IP_TUNNEL_MODE_GRE;
|
||||||
|
case NM_LINK_TYPE_IPIP:
|
||||||
|
return NM_IP_TUNNEL_MODE_IPIP;
|
||||||
case NM_LINK_TYPE_SIT:
|
case NM_LINK_TYPE_SIT:
|
||||||
return NM_IP_TUNNEL_MODE_SIT;
|
return NM_IP_TUNNEL_MODE_SIT;
|
||||||
default:
|
default:
|
||||||
|
|
@ -485,6 +502,7 @@ create_and_realize (NMDevice *device,
|
||||||
NMPlatformError plerr;
|
NMPlatformError plerr;
|
||||||
NMPlatformLnkGre lnk_gre = { };
|
NMPlatformLnkGre lnk_gre = { };
|
||||||
NMPlatformLnkSit lnk_sit = { };
|
NMPlatformLnkSit lnk_sit = { };
|
||||||
|
NMPlatformLnkIpIp lnk_ipip = { };
|
||||||
const char *str;
|
const char *str;
|
||||||
gint64 val;
|
gint64 val;
|
||||||
|
|
||||||
|
|
@ -565,6 +583,32 @@ create_and_realize (NMDevice *device,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NM_IP_TUNNEL_MODE_IPIP:
|
||||||
|
if (parent)
|
||||||
|
lnk_ipip.parent_ifindex = nm_device_get_ifindex (parent);
|
||||||
|
|
||||||
|
str = nm_setting_ip_tunnel_get_local (s_ip_tunnel);
|
||||||
|
if (str)
|
||||||
|
inet_pton (AF_INET, str, &lnk_ipip.local);
|
||||||
|
|
||||||
|
str = nm_setting_ip_tunnel_get_remote (s_ip_tunnel);
|
||||||
|
g_assert (str);
|
||||||
|
inet_pton (AF_INET, str, &lnk_ipip.remote);
|
||||||
|
|
||||||
|
lnk_ipip.ttl = nm_setting_ip_tunnel_get_ttl (s_ip_tunnel);
|
||||||
|
lnk_ipip.tos = nm_setting_ip_tunnel_get_tos (s_ip_tunnel);
|
||||||
|
lnk_ipip.path_mtu_discovery = nm_setting_ip_tunnel_get_path_mtu_discovery (s_ip_tunnel);
|
||||||
|
|
||||||
|
plerr = nm_platform_link_ipip_add (NM_PLATFORM_GET, iface, &lnk_ipip, out_plink);
|
||||||
|
if (plerr != NM_PLATFORM_ERROR_SUCCESS && plerr != NM_PLATFORM_ERROR_EXISTS) {
|
||||||
|
g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CREATION_FAILED,
|
||||||
|
"Failed to create IPIP interface '%s' for '%s': %s",
|
||||||
|
iface,
|
||||||
|
nm_connection_get_id (connection),
|
||||||
|
nm_platform_error_to_string (plerr));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CREATION_FAILED,
|
g_set_error (error, NM_DEVICE_ERROR, NM_DEVICE_ERROR_CREATION_FAILED,
|
||||||
"Failed to create IP tunnel interface '%s' for '%s': mode %d not supported",
|
"Failed to create IP tunnel interface '%s' for '%s': mode %d not supported",
|
||||||
|
|
@ -798,7 +842,7 @@ get_virtual_iface_name (NMDeviceFactory *factory,
|
||||||
}
|
}
|
||||||
|
|
||||||
NM_DEVICE_FACTORY_DEFINE_INTERNAL (IP_TUNNEL, IPTunnel, ip_tunnel,
|
NM_DEVICE_FACTORY_DEFINE_INTERNAL (IP_TUNNEL, IPTunnel, ip_tunnel,
|
||||||
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_GRE, NM_LINK_TYPE_SIT)
|
NM_DEVICE_FACTORY_DECLARE_LINK_TYPES (NM_LINK_TYPE_GRE, NM_LINK_TYPE_SIT, NM_LINK_TYPE_IPIP)
|
||||||
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_IP_TUNNEL_SETTING_NAME),
|
NM_DEVICE_FACTORY_DECLARE_SETTING_TYPES (NM_SETTING_IP_TUNNEL_SETTING_NAME),
|
||||||
factory_iface->create_device = create_device;
|
factory_iface->create_device = create_device;
|
||||||
factory_iface->get_connection_parent = get_connection_parent;
|
factory_iface->get_connection_parent = get_connection_parent;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue