network: Allow to configure VLan egress qos maps

This commit is contained in:
Susant Sahani 2021-01-12 11:02:12 +01:00
parent 0d9b8913e2
commit ea07086285
5 changed files with 33 additions and 0 deletions

View file

@ -502,6 +502,17 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>IngressQOSMaps=</varname></term>
<listitem>
<para>Defines a mapping of Linux internal packet priority (<constant>SO_PRIORITY</constant>) to VLAN header
PCP field for incoming frames. Takes a whitespace-separated list of unsigned integer pairs in the format
<literal>from</literal>-<literal>to</literal>, e.g., <literal>21-7 45-5</literal> ranges 14294967294.
Note that <literal>from</literal> must be greater than or equal to <literal>to</literal>. When unset,
the kernel's default will be used.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View file

@ -54,6 +54,7 @@ VLAN.MVRP, config_parse_tristate,
VLAN.LooseBinding, config_parse_tristate, 0, offsetof(VLan, loose_binding)
VLAN.ReorderHeader, config_parse_tristate, 0, offsetof(VLan, reorder_hdr)
VLAN.EgressQOSMaps, config_parse_vlan_qos_maps, 0, offsetof(VLan, egress_qos_maps)
VLAN.IngressQOSMaps, config_parse_vlan_qos_maps, 0, offsetof(VLan, ingress_qos_maps)
MACVLAN.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
MACVLAN.SourceMACAddress, config_parse_hwaddrs, 0, offsetof(MacVlan, match_source_mac)
MACVTAP.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)

View file

@ -73,6 +73,24 @@ static int netdev_vlan_fill_message_create(NetDev *netdev, Link *link, sd_netlin
return log_netdev_error_errno(netdev, r, "Could not close container IFLA_VLAN_EGRESS_QOS: %m");
}
if (!set_isempty(v->ingress_qos_maps)) {
struct ifla_vlan_qos_mapping *m;
r = sd_netlink_message_open_container(req, IFLA_VLAN_INGRESS_QOS);
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not open container IFLA_VLAN_INGRESS_QOS: %m");
SET_FOREACH(m, v->ingress_qos_maps) {
r = sd_netlink_message_append_data(req, IFLA_VLAN_QOS_MAPPING, m, sizeof(struct ifla_vlan_qos_mapping));
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VLAN_QOS_MAPPING attribute: %m");
}
r = sd_netlink_message_close_container(req);
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not close container IFLA_VLAN_INGRESS_QOS: %m");
}
return 0;
}
@ -186,6 +204,7 @@ static void vlan_done(NetDev *n) {
assert(v);
set_free(v->egress_qos_maps);
set_free(v->ingress_qos_maps);
}
static void vlan_init(NetDev *netdev) {

View file

@ -18,6 +18,7 @@ struct VLan {
int reorder_hdr;
Set *egress_qos_maps;
Set *ingress_qos_maps;
};
DEFINE_NETDEV_CAST(VLAN, VLan);

View file

@ -6,6 +6,7 @@ Id=
GVRP=
Protocol=
EgressQOSMaps=
IngressQOSMaps=
[MACVLAN]
Mode=
SourceMACAddress=