Merge pull request #682 from ssahani/bridge

networkd: add bridge link properties
This commit is contained in:
Lennart Poettering 2015-07-23 21:07:57 +02:00
commit 28a5679cdc
7 changed files with 80 additions and 7 deletions

View File

@ -307,7 +307,7 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE,
IFLA_IPTUN_ENCAP_DPORT,
IFLA_GRE_ENCAP_DPORT,
IFLA_BRIDGE_VLAN_INFO,
IFLA_BRPORT_UNICAST_FLOOD,
IFLA_BRPORT_LEARNING_SYNC,
NDA_IFINDEX,
IFA_FLAGS],
[], [], [[

View File

@ -668,6 +668,48 @@
<para>The <literal>[Bridge]</literal> section accepts the
following keys.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>UnicastFlood=</varname></term>
<listitem>
<para>A boolean. UnicastFlood configures whether a given port will flood
unicast traffic for which there is no FDB entry. By default this
flag is off.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>HairPin=</varname></term>
<listitem>
<para> A boolean. Configures whether traffic may be send back
out of the port on which it was received. By default, this
flag is false. and the bridge will not forward traffic back
out of the receiving port. By default the flag is off.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>BPDUGuard=</varname></term>
<listitem>
<para> A boolean. Configures whether STP Bridge Protocol Data Units will be
processed by the bridge port. By default, the flag is false allowing BPDU
processing. Turning this flag on will cause the port to stop processing
STP Bridge Protocol Data Units. By default the flag is off.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>FastLeave=</varname></term>
<listitem>
<para> A boolean. This flag allows the bridge to immediately stop multicast
traffic on a port that receives IGMP Leave message. It is only used with
IGMP snooping if enabled on the bridge. By default the flag is off.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>RootBlock=</varname></term>
<listitem>
<para> A boolean. Configures whether a given port is allowed to
become root port or not. Only used when STP is enabled on the bridge.
By default the flag is off.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Cost=</varname></term>
<listitem>
@ -678,7 +720,6 @@
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[BridgeFDB] Section Options</title>
<para>The <literal>[BridgeFDB]</literal> section manages the

View File

@ -832,7 +832,7 @@ static inline int setns(int fd, int nstype) {
#define IFLA_BRIDGE_MAX (__IFLA_BRIDGE_MAX - 1)
#endif
#if !HAVE_DECL_IFLA_BRPORT_UNICAST_FLOOD
#if !HAVE_DECL_IFLA_BRPORT_LEARNING_SYNC
#define IFLA_BRPORT_UNSPEC 0
#define IFLA_BRPORT_STATE 1
#define IFLA_BRPORT_PRIORITY 2
@ -843,7 +843,9 @@ static inline int setns(int fd, int nstype) {
#define IFLA_BRPORT_FAST_LEAVE 7
#define IFLA_BRPORT_LEARNING 8
#define IFLA_BRPORT_UNICAST_FLOOD 9
#define __IFLA_BRPORT_MAX 10
#define IFLA_BRPORT_PROXYARP 10
#define IFLA_BRPORT_LEARNING_SYNC 11
#define __IFLA_BRPORT_MAX 12
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
#endif

View File

@ -329,8 +329,11 @@ static const struct NLType rtnl_prot_info_bridge_port_types[IFLA_BRPORT_MAX + 1]
[IFLA_BRPORT_MODE] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_GUARD] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_PROTECT] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_FAST_LEAVE] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_LEARNING] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_UNICAST_FLOOD] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_PROXYARP] = { .type = NETLINK_TYPE_U8 },
[IFLA_BRPORT_LEARNING_SYNC] = { .type = NETLINK_TYPE_U8 },
};
static const NLTypeSystem rtnl_prot_info_type_systems[AF_MAX] = {

View File

@ -846,9 +846,6 @@ static int link_set_bridge(Link *link) {
assert(link);
assert(link->network);
if(link->network->cost == 0)
return 0;
r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
if (r < 0)
return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
@ -861,6 +858,26 @@ static int link_set_bridge(Link *link) {
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_PROTINFO attribute: %m");
r = sd_netlink_message_append_u8(req, IFLA_BRPORT_GUARD, link->network->bpdu_guard);
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_GUARD attribute: %m");
r = sd_netlink_message_append_u8(req, IFLA_BRPORT_MODE, link->network->hairpin);
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_MODE attribute: %m");
r = sd_netlink_message_append_u8(req, IFLA_BRPORT_FAST_LEAVE, link->network->fast_leave);
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_FAST_LEAVE attribute: %m");
r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, link->network->root_block);
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m");
r = sd_netlink_message_append_u8(req, IFLA_BRPORT_UNICAST_FLOOD, link->network->unicast_flood);
if (r < 0)
return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_UNICAST_FLOOD attribute: %m");
if(link->network->cost != 0) {
r = sd_netlink_message_append_u32(req, IFLA_BRPORT_COST, link->network->cost);
if (r < 0)

View File

@ -73,6 +73,11 @@ DHCP.CriticalConnection, config_parse_bool, 0
DHCP.VendorClassIdentifier, config_parse_string, 0, offsetof(Network, dhcp_vendor_class_identifier)
DHCP.RouteMetric, config_parse_unsigned, 0, offsetof(Network, dhcp_route_metric)
Bridge.Cost, config_parse_unsigned, 0, offsetof(Network, cost)
Bridge.BPDUGuard, config_parse_bool, 0, offsetof(Network, bpdu_guard)
Bridge.HairPin, config_parse_bool, 0, offsetof(Network, hairpin)
Bridge.FastLeave, config_parse_bool, 0, offsetof(Network, fast_leave)
Bridge.RootBlock, config_parse_bool, 0, offsetof(Network, root_block)
Bridge.UnicastFlood, config_parse_bool, 0, offsetof(Network, unicast_flood)
BridgeFDB.MACAddress, config_parse_fdb_hwaddr, 0, 0
BridgeFDB.VLANId, config_parse_fdb_vlan_id, 0, 0
/* backwards compatibility: do not add new entries to this section */

View File

@ -150,6 +150,11 @@ struct Network {
bool dhcp_server;
bool bpdu_guard;
bool hairpin;
bool fast_leave;
bool root_block;
bool unicast_flood;
unsigned cost;
AddressFamilyBoolean ip_forward;