mirror of
https://github.com/systemd/systemd
synced 2024-09-06 16:56:43 +00:00
network: introduce ifb (Intermediate Functional Block)
Intermediate Functional Block The Intermediate Functional Block (ifb) pseudo network interface acts as a QoS concentrator for multiple different sources of traffic. Packets from or to other interfaces have to be redirected to it using the mirred action in order to be handled, regularly routed traffic will be dropped. This way, a single stack of qdiscs, classes and filters can be shared between multiple interfaces. Here's a simple example to feed incoming traffic from multiple interfaces through a Stochastic Fairness Queue (sfq): (1) # modprobe ifb (2) # ip link set ifb0 up (3) # tc qdisc add dev ifb0 root sfq
This commit is contained in:
parent
cec1552ad4
commit
3295a461b3
|
@ -182,6 +182,9 @@
|
||||||
<row><entry><varname>xfrm</varname></entry>
|
<row><entry><varname>xfrm</varname></entry>
|
||||||
<entry>A virtual tunnel interface like vti/vti6 but with several advantages.</entry></row>
|
<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>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -7,6 +7,8 @@ sources = files('''
|
||||||
netdev/bridge.h
|
netdev/bridge.h
|
||||||
netdev/dummy.c
|
netdev/dummy.c
|
||||||
netdev/dummy.h
|
netdev/dummy.h
|
||||||
|
netdev/ifb.c
|
||||||
|
netdev/ifb.h
|
||||||
netdev/ipvlan.c
|
netdev/ipvlan.c
|
||||||
netdev/ipvlan.h
|
netdev/ipvlan.h
|
||||||
netdev/macvlan.c
|
netdev/macvlan.c
|
||||||
|
|
11
src/network/netdev/ifb.c
Normal file
11
src/network/netdev/ifb.c
Normal 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
13
src/network/netdev/ifb.h
Normal 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;
|
|
@ -12,6 +12,7 @@
|
||||||
#include "fd-util.h"
|
#include "fd-util.h"
|
||||||
#include "fou-tunnel.h"
|
#include "fou-tunnel.h"
|
||||||
#include "geneve.h"
|
#include "geneve.h"
|
||||||
|
#include "ifb.h"
|
||||||
#include "ipvlan.h"
|
#include "ipvlan.h"
|
||||||
#include "l2tp-tunnel.h"
|
#include "l2tp-tunnel.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
@ -73,6 +74,7 @@ const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX] = {
|
||||||
[NETDEV_KIND_MACSEC] = &macsec_vtable,
|
[NETDEV_KIND_MACSEC] = &macsec_vtable,
|
||||||
[NETDEV_KIND_NLMON] = &nlmon_vtable,
|
[NETDEV_KIND_NLMON] = &nlmon_vtable,
|
||||||
[NETDEV_KIND_XFRM] = &xfrm_vtable,
|
[NETDEV_KIND_XFRM] = &xfrm_vtable,
|
||||||
|
[NETDEV_KIND_IFB] = &ifb_vtable,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* const netdev_kind_table[_NETDEV_KIND_MAX] = {
|
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_MACSEC] = "macsec",
|
||||||
[NETDEV_KIND_NLMON] = "nlmon",
|
[NETDEV_KIND_NLMON] = "nlmon",
|
||||||
[NETDEV_KIND_XFRM] = "xfrm",
|
[NETDEV_KIND_XFRM] = "xfrm",
|
||||||
|
[NETDEV_KIND_IFB] = "ifb",
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
|
DEFINE_STRING_TABLE_LOOKUP(netdev_kind, NetDevKind);
|
||||||
|
|
|
@ -80,6 +80,7 @@ typedef enum NetDevKind {
|
||||||
NETDEV_KIND_MACSEC,
|
NETDEV_KIND_MACSEC,
|
||||||
NETDEV_KIND_NLMON,
|
NETDEV_KIND_NLMON,
|
||||||
NETDEV_KIND_XFRM,
|
NETDEV_KIND_XFRM,
|
||||||
|
NETDEV_KIND_IFB,
|
||||||
_NETDEV_KIND_MAX,
|
_NETDEV_KIND_MAX,
|
||||||
_NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */
|
_NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */
|
||||||
_NETDEV_KIND_INVALID = -1
|
_NETDEV_KIND_INVALID = -1
|
||||||
|
|
Loading…
Reference in a new issue