summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mack <github@zonque.org>2015-07-23 11:00:15 +0200
committerDaniel Mack <github@zonque.org>2015-07-23 11:00:15 +0200
commit56511eca83b3e078ffce6514c12c7cb075d3eeb1 (patch)
tree012b0e93ba7b7049ac6236b1ab12404e747a7f42
parent8cd4eb791aa80e8f9c9d1c4625b411dbe4119b27 (diff)
parent9b0ca30a91b661f56ed7cee5bab02cc5aef6d38b (diff)
Merge pull request #674 from ssahani/tunnel
ip6 tunnel: add support for DSCP
-rw-r--r--man/systemd.netdev.xml11
-rw-r--r--src/network/networkd-netdev-gperf.gperf1
-rw-r--r--src/network/networkd-netdev-tunnel.c3
-rw-r--r--src/network/networkd-netdev-tunnel.h1
4 files changed, 16 insertions, 0 deletions
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index d15c21be60..b100f96b85 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -504,6 +504,17 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><varname>DiffServiceCodePoint=</varname></term>
+ <listitem>
+ <para>A boolean. When true, inherits the Differentiated
+ Service Code Point (DSCP) field between inner and outer
+ header for ip6_tunnel. DSCP is a field in an IP packet
+ that enables different levels of service to be assigned
+ to network traffic. Defaults to <literal>no</literal>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><varname>Mode=</varname></term>
<listitem>
<para>An <literal>ip6tnl</literal> tunnels can have three
diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
index 63258c0376..bdc43e87f6 100644
--- a/src/network/networkd-netdev-gperf.gperf
+++ b/src/network/networkd-netdev-gperf.gperf
@@ -37,6 +37,7 @@ Tunnel.TTL, config_parse_unsigned, 0,
Tunnel.DiscoverPathMTU, config_parse_bool, 0, offsetof(Tunnel, pmtudisc)
Tunnel.Mode, config_parse_ip6tnl_mode, 0, offsetof(Tunnel, ip6tnl_mode)
Tunnel.IPv6FlowLabel, config_parse_ipv6_flowlabel, 0, offsetof(Tunnel, ipv6_flowlabel)
+Tunnel.DiffServiceCodePoint, config_parse_bool, 0, offsetof(Tunnel, dscp)
Peer.Name, config_parse_ifname, 0, offsetof(Veth, ifname_peer)
Peer.MACAddress, config_parse_hwaddr, 0, offsetof(Veth, mac_peer)
VXLAN.Id, config_parse_uint64, 0, offsetof(VxLan, id)
diff --git a/src/network/networkd-netdev-tunnel.c b/src/network/networkd-netdev-tunnel.c
index a13edf6936..ecf0604c4b 100644
--- a/src/network/networkd-netdev-tunnel.c
+++ b/src/network/networkd-netdev-tunnel.c
@@ -271,6 +271,9 @@ static int netdev_ip6tnl_fill_message_create(NetDev *netdev, Link *link, sd_netl
return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_FLOWINFO attribute: %m");
}
+ if (t->dscp)
+ t->flags |= IP6_TNL_F_RCV_DSCP_COPY;
+
r = sd_netlink_message_append_u32(m, IFLA_IPTUN_FLAGS, t->flags);
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not append IFLA_IPTUN_FLAGS attribute: %m");
diff --git a/src/network/networkd-netdev-tunnel.h b/src/network/networkd-netdev-tunnel.h
index 47981fbe32..e08e2891e7 100644
--- a/src/network/networkd-netdev-tunnel.h
+++ b/src/network/networkd-netdev-tunnel.h
@@ -57,6 +57,7 @@ struct Tunnel {
IPv6FlowLabel ipv6_flowlabel;
bool pmtudisc;
+ bool dscp;
};
extern const NetDevVTable ipip_vtable;