diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-12-08 05:13:08 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-08 05:13:08 +0900 |
commit | debda5a4e53037c2fe209d770d21846c34f279a7 (patch) | |
tree | 5c7a8d5659d6a71d8cb6345212846c510c00960d | |
parent | 6d62ec61b9413a78757c758a940cef13f6ce5063 (diff) | |
parent | b076d5d76ddc1eb9fcbe36d4664b73ef6f1e9506 (diff) | |
download | systemd-debda5a4e53037c2fe209d770d21846c34f279a7.tar.gz |
Merge pull request #14273 from ssahani/ifb
network: introduce IFB
-rw-r--r-- | man/systemd.netdev.xml | 3 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.c | 1 | ||||
-rw-r--r-- | src/libsystemd/sd-netlink/netlink-types.h | 1 | ||||
-rw-r--r-- | src/network/meson.build | 2 | ||||
-rw-r--r-- | src/network/netdev/ifb.c | 11 | ||||
-rw-r--r-- | src/network/netdev/ifb.h | 13 | ||||
-rw-r--r-- | src/network/netdev/netdev.c | 3 | ||||
-rw-r--r-- | src/network/netdev/netdev.h | 1 | ||||
-rw-r--r-- | test/test-network/conf/25-ifb.netdev | 3 | ||||
-rw-r--r-- | test/test-network/conf/netdev-link-local-addressing-yes.network | 1 | ||||
-rwxr-xr-x | test/test-network/systemd-networkd-tests.py | 9 |
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 =[ |