summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-12-08 05:13:08 +0900
committerGitHub <noreply@github.com>2019-12-08 05:13:08 +0900
commitdebda5a4e53037c2fe209d770d21846c34f279a7 (patch)
tree5c7a8d5659d6a71d8cb6345212846c510c00960d
parent6d62ec61b9413a78757c758a940cef13f6ce5063 (diff)
parentb076d5d76ddc1eb9fcbe36d4664b73ef6f1e9506 (diff)
downloadsystemd-debda5a4e53037c2fe209d770d21846c34f279a7.tar.gz
Merge pull request #14273 from ssahani/ifb
network: introduce IFB
-rw-r--r--man/systemd.netdev.xml3
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.c1
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.h1
-rw-r--r--src/network/meson.build2
-rw-r--r--src/network/netdev/ifb.c11
-rw-r--r--src/network/netdev/ifb.h13
-rw-r--r--src/network/netdev/netdev.c3
-rw-r--r--src/network/netdev/netdev.h1
-rw-r--r--test/test-network/conf/25-ifb.netdev3
-rw-r--r--test/test-network/conf/netdev-link-local-addressing-yes.network1
-rwxr-xr-xtest/test-network/systemd-networkd-tests.py9
11 files changed, 48 insertions, 0 deletions
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index 8031bc0e0b..5703e4f53b 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -182,6 +182,9 @@
<row><entry><varname>xfrm</varname></entry>
<entry>A virtual tunnel interface like vti/vti6 but with several advantages.</entry></row>
+ <row><entry><varname>ifb</varname></entry>
+ <entry> The Intermediate Functional Block (ifb) pseudo network interface acts as a QoS concentrator for multiple different sources of traffic.</entry></row>
+
</tbody>
</tgroup>
</table>
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index 26bd0dd620..937e7e2759 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -371,6 +371,7 @@ static const char* const nl_union_link_info_data_table[] = {
[NL_UNION_LINK_INFO_DATA_MACSEC] = "macsec",
[NL_UNION_LINK_INFO_DATA_NLMON] = "nlmon",
[NL_UNION_LINK_INFO_DATA_XFRM] = "xfrm",
+ [NL_UNION_LINK_INFO_DATA_IFB] = "ifb",
};
DEFINE_STRING_TABLE_LOOKUP(nl_union_link_info_data, NLUnionLinkInfoData);
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index 9bc6f68339..c42a9c25d0 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -83,6 +83,7 @@ typedef enum NLUnionLinkInfoData {
NL_UNION_LINK_INFO_DATA_MACSEC,
NL_UNION_LINK_INFO_DATA_NLMON,
NL_UNION_LINK_INFO_DATA_XFRM,
+ NL_UNION_LINK_INFO_DATA_IFB,
_NL_UNION_LINK_INFO_DATA_MAX,
_NL_UNION_LINK_INFO_DATA_INVALID = -1
} NLUnionLinkInfoData;
diff --git a/src/network/meson.build b/src/network/meson.build
index e2324a01b3..8a09078315 100644
--- a/src/network/meson.build
+++ b/src/network/meson.build
@@ -7,6 +7,8 @@ sources = files('''
netdev/bridge.h
netdev/dummy.c
netdev/dummy.h
+ netdev/ifb.c
+ netdev/ifb.h
netdev/ipvlan.c
netdev/ipvlan.h
netdev/macvlan.c
diff --git a/src/network/netdev/ifb.c b/src/network/netdev/ifb.c
new file mode 100644
index 0000000000..7736a162f9
--- /dev/null
+++ b/src/network/netdev/ifb.c
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2019 VMware, Inc. */
+
+#include "ifb.h"
+
+const NetDevVTable ifb_vtable = {
+ .object_size = sizeof(IntermediateFunctionalBlock),
+ .sections = NETDEV_COMMON_SECTIONS,
+ .create_type = NETDEV_CREATE_INDEPENDENT,
+ .generate_mac = true,
+};
diff --git a/src/network/netdev/ifb.h b/src/network/netdev/ifb.h
new file mode 100644
index 0000000000..761d215894
--- /dev/null
+++ b/src/network/netdev/ifb.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2019 VMware, Inc. */
+
+#pragma once
+
+#include "netdev.h"
+
+typedef struct IntermediateFunctionalBlock {
+ NetDev meta;
+} IntermediateFunctionalBlock;
+
+DEFINE_NETDEV_CAST(IFB, IntermediateFunctionalBlock);
+extern const NetDevVTable ifb_vtable;
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index 423750a6a0..f8121a48ed 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -12,6 +12,7 @@
#include "fd-util.h"
#include "fou-tunnel.h"
#include "geneve.h"
+#include "ifb.h"
#include "ipvlan.h"
#include "l2tp-tunnel.h"
#include "list.h"
@@ -73,6 +74,7 @@ const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = {
[NETDEV_KIND_MACSEC] = &macsec_vtable,
[NETDEV_KIND_NLMON] = &nlmon_vtable,
[NETDEV_KIND_XFRM] = &xfrm_vtable,
+ [NETDEV_KIND_IFB] = &ifb_vtable,
};
static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
@@ -109,6 +111,7 @@ static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
[NETDEV_KIND_MACSEC] = "macsec",
[NETDEV_KIND_NLMON] = "nlmon",
[NETDEV_KIND_XFRM] = "xfrm",
+ [NETDEV_KIND_IFB] = "ifb",
};
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h
index 078d0aca4f..cc530022c1 100644
--- a/src/network/netdev/netdev.h
+++ b/src/network/netdev/netdev.h
@@ -80,6 +80,7 @@ typedef enum NetDevKind {
NETDEV_KIND_MACSEC,
NETDEV_KIND_NLMON,
NETDEV_KIND_XFRM,
+ NETDEV_KIND_IFB,
_NETDEV_KIND_MAX,
_NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */
_NETDEV_KIND_INVALID = -1
diff --git a/test/test-network/conf/25-ifb.netdev b/test/test-network/conf/25-ifb.netdev
new file mode 100644
index 0000000000..a4ba771967
--- /dev/null
+++ b/test/test-network/conf/25-ifb.netdev
@@ -0,0 +1,3 @@
+[NetDev]
+Kind=ifb
+Name=ifb99
diff --git a/test/test-network/conf/netdev-link-local-addressing-yes.network b/test/test-network/conf/netdev-link-local-addressing-yes.network
index d7dfa7ea97..a5a3d67f43 100644
--- a/test/test-network/conf/netdev-link-local-addressing-yes.network
+++ b/test/test-network/conf/netdev-link-local-addressing-yes.network
@@ -10,6 +10,7 @@ Name=vxcan99
Name=vxcan-peer
Name=vrf99
Name=geneve99
+Name=ifb99
Name=ipiptun99
Name=nlmon99
Name=xfrm99
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index cab8fb6afc..fb31a65125 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -556,6 +556,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'gretun97',
'gretun98',
'gretun99',
+ 'ifb99',
'ip6gretap98',
'ip6gretap99',
'ip6gretun96',
@@ -633,6 +634,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'25-gre-tunnel-local-any.netdev',
'25-gre-tunnel-remote-any.netdev',
'25-gre-tunnel.netdev',
+ '25-ifb.netdev',
'25-ip6gretap-tunnel-local-any.netdev',
'25-ip6gretap-tunnel.netdev',
'25-ip6gre-tunnel-any-any.netdev',
@@ -1379,6 +1381,13 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
self.wait_online(['nlmon99:carrier'])
+ @expectedFailureIfModuleIsNotAvailable('ifb')
+ def test_ifb(self):
+ copy_unit_to_networkd_unit_path('25-ifb.netdev', 'netdev-link-local-addressing-yes.network')
+ start_networkd()
+
+ self.wait_online(['ifb99:degraded'])
+
class NetworkdL2TPTests(unittest.TestCase, Utilities):
links =[