network: Allow to configure interface promiscuous mode
This commit is contained in:
parent
43b49470d1
commit
937e305e93
|
@ -171,20 +171,27 @@
|
||||||
<para> For example, disabling ARP is useful when creating multiple MACVLAN or VLAN virtual
|
<para> For example, disabling ARP is useful when creating multiple MACVLAN or VLAN virtual
|
||||||
interfaces atop a single lower-level physical interface, which will then only serve as a
|
interfaces atop a single lower-level physical interface, which will then only serve as a
|
||||||
link/"bridge" device aggregating traffic to the same physical link and not participate in
|
link/"bridge" device aggregating traffic to the same physical link and not participate in
|
||||||
the network otherwise.</para>
|
the network otherwise. Defaults to unset.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>Multicast=</varname></term>
|
<term><varname>Multicast=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a boolean. If set to true, the multicast flag on the device is enabled.</para>
|
<para>Takes a boolean. If set to true, the multicast flag on the device is enabled. Defaults to unset.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>AllMulticast=</varname></term>
|
<term><varname>AllMulticast=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a boolean. If set to true, the driver retrieves all multicast packets from the network.
|
<para>Takes a boolean. If set to true, the driver retrieves all multicast packets from the network.
|
||||||
This happens when multicast routing is enabled.</para>
|
This happens when multicast routing is enabled. Defaults to unset.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>Promiscuous=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Takes a boolean. If set to true, promiscuous mode of the interface is enabled.
|
||||||
|
Defaults to unset.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
|
|
@ -1108,7 +1108,8 @@ static int link_set_flags(Link *link) {
|
||||||
if (!link->network)
|
if (!link->network)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (link->network->arp < 0 && link->network->multicast < 0 && link->network->allmulticast < 0)
|
if (link->network->arp < 0 && link->network->multicast < 0 && link->network->allmulticast < 0 &&
|
||||||
|
link->network->promiscuous < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
|
r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
|
||||||
|
@ -1130,6 +1131,11 @@ static int link_set_flags(Link *link) {
|
||||||
SET_FLAG(ifi_flags, IFF_ALLMULTI, link->network->allmulticast);
|
SET_FLAG(ifi_flags, IFF_ALLMULTI, link->network->allmulticast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (link->network->promiscuous >= 0) {
|
||||||
|
ifi_change |= IFF_PROMISC;
|
||||||
|
SET_FLAG(ifi_flags, IFF_PROMISC, link->network->promiscuous);
|
||||||
|
}
|
||||||
|
|
||||||
r = sd_rtnl_message_link_set_flags(req, ifi_flags, ifi_change);
|
r = sd_rtnl_message_link_set_flags(req, ifi_flags, ifi_change);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_link_error_errno(link, r, "Could not set link flags: %m");
|
return log_link_error_errno(link, r, "Could not set link flags: %m");
|
||||||
|
|
|
@ -62,6 +62,7 @@ Link.Group, config_parse_uint32,
|
||||||
Link.ARP, config_parse_tristate, 0, offsetof(Network, arp)
|
Link.ARP, config_parse_tristate, 0, offsetof(Network, arp)
|
||||||
Link.Multicast, config_parse_tristate, 0, offsetof(Network, multicast)
|
Link.Multicast, config_parse_tristate, 0, offsetof(Network, multicast)
|
||||||
Link.AllMulticast, config_parse_tristate, 0, offsetof(Network, allmulticast)
|
Link.AllMulticast, config_parse_tristate, 0, offsetof(Network, allmulticast)
|
||||||
|
Link.Promiscuous, config_parse_tristate, 0, offsetof(Network, promiscuous)
|
||||||
Link.Unmanaged, config_parse_bool, 0, offsetof(Network, unmanaged)
|
Link.Unmanaged, config_parse_bool, 0, offsetof(Network, unmanaged)
|
||||||
Link.RequiredForOnline, config_parse_required_for_online, 0, 0
|
Link.RequiredForOnline, config_parse_required_for_online, 0, 0
|
||||||
SR-IOV.VirtualFunction, config_parse_sr_iov_uint32, 0, 0
|
SR-IOV.VirtualFunction, config_parse_sr_iov_uint32, 0, 0
|
||||||
|
|
|
@ -321,6 +321,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
||||||
.arp = -1,
|
.arp = -1,
|
||||||
.multicast = -1,
|
.multicast = -1,
|
||||||
.allmulticast = -1,
|
.allmulticast = -1,
|
||||||
|
.promiscuous = -1,
|
||||||
|
|
||||||
.configure_without_carrier = false,
|
.configure_without_carrier = false,
|
||||||
.ignore_carrier_loss = -1,
|
.ignore_carrier_loss = -1,
|
||||||
|
|
|
@ -87,6 +87,7 @@ struct Network {
|
||||||
int arp;
|
int arp;
|
||||||
int multicast;
|
int multicast;
|
||||||
int allmulticast;
|
int allmulticast;
|
||||||
|
int promiscuous;
|
||||||
bool unmanaged;
|
bool unmanaged;
|
||||||
bool required_for_online; /* Is this network required to be considered online? */
|
bool required_for_online; /* Is this network required to be considered online? */
|
||||||
LinkOperationalStateRange required_operstate_for_online;
|
LinkOperationalStateRange required_operstate_for_online;
|
||||||
|
|
|
@ -38,6 +38,7 @@ MTUBytes=
|
||||||
Multicast=
|
Multicast=
|
||||||
MACAddress=
|
MACAddress=
|
||||||
Group=
|
Group=
|
||||||
|
Promiscuous=
|
||||||
[SR-IOV]
|
[SR-IOV]
|
||||||
VirtualFunction=
|
VirtualFunction=
|
||||||
MACSpoofCheck=
|
MACSpoofCheck=
|
||||||
|
|
Loading…
Reference in a new issue