Merge pull request #14273 from ssahani/ifb

network: introduce IFB
This commit is contained in:
Yu Watanabe
2019-12-08 05:13:08 +09:00
committed by GitHub
11 changed files with 48 additions and 0 deletions

View File

@@ -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>

View File

@@ -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);

View File

@@ -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;

View File

@@ -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

11
src/network/netdev/ifb.c Normal file
View File

@@ -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,
};

13
src/network/netdev/ifb.h Normal file
View File

@@ -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;

View File

@@ -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);

View File

@@ -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

View File

@@ -0,0 +1,3 @@
[NetDev]
Kind=ifb
Name=ifb99

View File

@@ -10,6 +10,7 @@ Name=vxcan99
Name=vxcan-peer
Name=vrf99
Name=geneve99
Name=ifb99
Name=ipiptun99
Name=nlmon99
Name=xfrm99

View File

@@ -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 =[