+1. Thanks for the detailed write up. (And, btw, -1 to the
applications that assume QoS is always present, and -1 to the switch
vendors that still haven't got tagged packet processing in their
products. :-)
-- Garrett
Sebastien Roy wrote:
> 802.1Q tag mode link property
>
> Release binding: Patch
> Interface Stability: Committed
> Related Case: PSARC 2006/358 VLAN Observability Enhancement
>
> Summary
> -------
>
> This case introduces a GLDv3 link property named "tagmode" to
> control the conditions in which the kernel inserts VLAN tags in
> outgoing packets.
>
> Background
> ----------
>
> The comprehensive VLAN tagging changes made by PSARC 2006/358 also
> fixed a bug that prevented Solaris from inserting a user priority
> tag (VLAN tag with NULL VLAN ID bug non-zero priority) when the
> sender specifies a priority for an outgoing packet over a physical
> Ethernet link. This bug was:
>
> 6434130 i_dls_ether_header() doesn't generate VLAN header when
> priority is non-zero
>
> As a result of this bug fix, when an application requests a user
> priority (either by using the DL_UDQOS_REQ DLPI primitive, by
> setting the dl_priority field of a DL_UNITDATA_REQ message, or by
> setting b_band on an M_DATA message) when sending a packet on a
> physical Ethernet link, the kernel will insert a VLAN header with a
> NULL VLAN ID and a priority as specified by the user.
>
> This new behavior is in-line with the 802.1Q IEEE specification.
> Bridges receiving such packets should recognize these as
> user-priority tagged packets and process the priority setting
> accordingly.
>
> Unfortunately, experience with this fix has uncovered that a number
> of widely used bridges (switches) don't handle these special
> user-priority tagged packets and simply drop them. This problem is
> documented in detail in the following CR:
>
> 6797256 GLD interfaces unexpectedly send VLAN tagged packets
>
> This issue, in combination with the fact that some widely deployed
> applications unconditionally request priority processing on all of
> their outgoing packets, means that these applications no longer work
> at all over physical Ethernet links connected to these problematic
> switches.
>
>
> Solution
> --------
>
> This case introduces a link property (see dladm(1M)) named "tagmode"
> that controls the conditions in which the kernel will insert VLAN
> tags on packets being transmitted on the link. Two mode values can
> be assigned to this property:
>
> normal Insert a VLAN tag to outgoing packets as needed
> whenever requested. This includes two cases:
>
> 1. The packet belongs to a VLAN.
> 2. The user requested priority tagging.
>
> vlanonly Only insert a VLAN tag when the outgoing packet
> belongs to a VLAN. If a tag is being inserted in this
> mode and the user has also requested a non-zero
> priority, the priority is honored and included in the
> VLAN tag.
>
> Only DL_ETHER links will support this property, and its default
> value will be "vlanonly". Setting the property to "normal"
> demonstrates deliberate understanding that the feature is functional
> on the associated datalink.
>
> Impact On IFF_COS_ENABLED Flag
> ------------------------------
>
> The IFF_COS_ENABLED flag documented as "Cos" in ifconfig(1M)
> reflects whether or not an interface supports a class of service
> marking (with 802.1D user priority marking being one example). This
> flag is currently set on all GLDv3 datalinks regardless of their
> ability to honor user priorities.
>
> One consumer of this flag is the IPQos functionality, which can be
> configured to request per-packet user priorities over CoS-capable
> interfaces (see ipqos(7ipp) and ipqosconf(1M)). It does this on IP
> interfaces that have the IFF_COS_ENABLED flag set.
>
> In order to accurately reflect the link's abilities to use
> priorities, this case changes the system such that the
> IFF_COS_ENABLED flag will only be set on VLAN links and on physical
> links that have their "tagmode" properties set to "normal". This
> will ensure that IPQos and other consumers of the IFF_COS_ENABLED
> flag do not erroneously request priorities over links that don't
> support them or have been explicitly configured to not use them.
>
> Change of System Default Behavior
> ---------------------------------
>
> The choice of "vlanonly" as the default value for the "tagmode" link
> property constitutes a change in behavior from how the system
> behaved after the fix to 6434130 was integrated. As previously
> mentioned, the fix to 6434130 caused the system to always insert a
> user-priority tag when requested. It will now only do so if the
> administrator explicitly changes the "tagmode" property to have the
> value "normal".
>
> The fix to 6434130 was included with s10u7, and prior to that, most
> drivers (including all GLDv2 and GLDv3 drivers) failed to insert
> user-priority tags. Since 6434130 has no external customer records,
> one can thus assume that no-one noticed that this was broken, and so
> reverting the system default behavior back to its prior state will
> not be disruptive.
>
> The dladm(1M) man page will be updated to document the "tagmode"
> link property, and the "CoS" section of the ifconfig(1M) man page
> will be modified to describe how to enable "CoS" using the "tagmode"
> property.
>
>
>