Sign in with
Sign up | Sign in
Your question

weird asymmetric PAUSE autoconfiguration code ?

Last response: in Networking
Share
Anonymous
April 14, 2004 3:26:48 AM

Archived from groups: comp.dcom.lans.ethernet (More info?)

Gigabit Ethernet added _asymmetric_ flow control to the previous
(100Mb/s) symmetric version of the 802.3x standard. My concern is
about the related change in the autonegociation protocol for link
configuration.

Let me first take for a moment a purely "mathematical" point of view
about this negociation issue, ignoring compatibility. There are four
possible final link configurations: (-,-) (TX,-) (-,RX) (TX,RX). "TX"
means "I am sending you PAUSE frames and "RX" means "I am listening to
your PAUSE frames".

Being able to propose any *combination* of these four states (for
instance, to say: "I'm OK for (-,-) or (TX,-) and I reject the two others")
require no less than 4 bits, coding one "yes/no?" bit for each state.

An "optimization" to save a bit or two can be to order the proposals:
any proposition for one state implies acceptance of all inferior
states. Then you just have to propose a rank instead of a subset.

Partial orders may also help: for instance you can assume that
any subset implicitely includes the empty (_,_) proposition.
Admit in addition that the TX and RX negociations are independent
of each other, and then only 2 bits would be needed, one for proposing
(TX or -) and one for proposing (RX or -). Add a legacy, symmetric
bit for compatibility and 3 bits as a whole are enough.


----------------

Back to reality, with a legacy SYMmetric bit and _only one_ (why?)
extra ASM_DIR bit, I understand from reading the standard that we have
this (weird?) negociation code, that does not fit any of the schemes
above.

Reading table 3 of Annex 28B in 802.3
<http://standards.ieee.org/getieee802/802.3.html&gt; (part 2)
I understood the following, please correct me if I am wrong.


for (SYM, ASYM) bits:

(0,0) still means:
"let's both do nothing, end of negociation".

(1,0) still means:
"depending on you,
- let's both control each other,
- or do nothing".

NEW!

(0,1) means:
"depending on you,
- I will asymmetrically control YOU,
- or we'll do nothing".

(1,1) means:
"depending on you, we will:
- you will asymmetrically control ME,
- or we will control each other,
- or we'll do nothing


Tabular representation of this code:


proposed states (TX,_) (_,_) (TX,RX) (_,RX)

sent codes
_____
(0,0)
OLD ----------------
(1,0)
_______________
(0,1)
NEW __________________________
(1,1)



Funny quote from here:
<http://www.ieee802.org/3/z/public/presentations/nov1996...;

"One (possibly two?!) additional Auto-Negotiation capability bits
are needed to allow negotiation of symmetrical and asymmetrical flow
control with full backwards compatibility" -- Rich Seifert

I also noticed there is still a free reserved bit in the base page.

This was also discussed here:
<http://www.ieee802.org/3/z/public/minutes/San0197.txt&g...;
but these quick notes do not bring much light.

Another funny thing is that most linux drivers propose free and
independent proposals of TX and RX in autonegociation... I wonder how
they implement it! In practice, I tend to manually configure
everything to avoid this complexity.

Thanks in advance for any explanation/pointer for this negociation
code. In particular from people that were in 802.3z at end of 1996!
Anonymous
April 14, 2004 4:58:02 PM

Archived from groups: comp.dcom.lans.ethernet (More info?)

In article <87hdvnd0x3.fsf@free.fr>, marc.herbert@free.fr (M.Herbert)
wrote:

> Gigabit Ethernet added _asymmetric_ flow control to the previous
> (100Mb/s) symmetric version of the 802.3x standard. My concern is
> about the related change in the autonegociation protocol for link
> configuration.
>
> Let me first take for a moment a purely "mathematical" point of view
> about this negociation issue, ignoring compatibility. There are four
> possible final link configurations: (-,-) (TX,-) (-,RX) (TX,RX). "TX"
> means "I am sending you PAUSE frames and "RX" means "I am listening to
> your PAUSE frames".
>

Remember, AutoNegotiation advertises what a device is *willing* to do
(or capable of doing), not what may actually happen as a result of the
negotiation. That said, there are four possibilities:

(1) I have no flow control capability.
[Encoded as PAUSE=0, ASM_DIR=0]

This case is simple; it means the device either has no use for flow
control, or that it was built without any such capability (e.g., it was
built before Ethernet flow control was designed).

(2) I both assert and respond to flow control. This is the pre-Gigabit,
symmetric mode of operation, and implies a full implementation of the
PAUSE mechanism (both send and receive) within the device.
[Encoded as PAUSE=1, ASM_DIR=0. Note the backwards compatibility, since
prior to Gigabit Ethernet the "ASM_DIR" bit was "reserved: set to zero,
ignore on receipt]

Prior to the standardization of Gigabit Ethernet, there was no such
thing as "asymmetric" flow control. A device that wanted to assert flow
control HAD TO also respond to flow control messages. It was all or
nothing. A link partner could not tell a device to respond to flow
control messages, but not to ever send them.

(3) I can *assert* flow control, but cannot respond (i.e., I want to be
able to send PAUSE frames, but I will ignore any you send me).
[Encoded as PAUSE=0, ASM_DIR=1. Note the backwards compatibility again;
a legacy "symmetric-only" device will see this advertisement as "I have
no flow control capability", since PAUSE=0; this is the proper
interpretation, since the legacy device wants "all or nothing", not
"receive my messages but don't send any of your own".]

This new, asymmetric capability might be advertised by a device that has
(limited) receive buffers, but virtually no transmit buffer capability
(e.g., a so-called "buffered distributor"; see Chapter 11 of my book,
"Gigabit Ethernet"). Sending a PAUSE frame to such a device would be
futile, since the device has no place to save the frames its partner
wants throttled.

Furthermore, the circuitry required to implement PAUSE receive is much
more complex than that required for PAUSE transmit. A device that only
needs to send PAUSE frames can build a fixed-content PAUSE frame (in
hardware) and simply send it whenever some trigger event occurs. To
respond to PAUSE frames requires parsing and decoding many fields (MAC
addresses, protocol type, MAC Control fields, etc.), along with the
required timers implied by the protocol. There is no need to implement
this circuitry in a device that cannot provide any benefit from PAUSE
receive in the first place.

(4) I can both assert and respond to flow control AND I am willing to
operate either symmetrically OR asymmetrically in EITHER direction.
[Encoded as PAUSE=1, ASM_DIR=1. Again, we have perfect backwards
compatibility. A legacy "all or nothing" device will see this as an
advertisement for symmetrical flow control.]

Now, either link partner may be in any of these four states. The
Auto-Negotiation protocol will resolve the advertisements as follows:

Local Device Link Partner Result
---------------------------------------------------------------------
PAUSE ASM_DIR PAUSE ASM_DIR
0 0 Any Any No flow control
0 1 0 Any No flow control
0 1 1 0 No flow control
0 1 1 1 Asymmetric, toward partner only

1 0 0 Any No flow control
1 Any 1 Any Symmetric flow control
1 1 0 0 No flow control
1 1 0 1 Asymmetric, from partner only


If you look at the semantics of the various encodings (provided
earlier), you can work out why you get the indicated result for each
possible combination. (This is a good exercise for the student!)

> ----------------
>
> Back to reality, with a legacy SYMmetric bit and _only one_ (why?)
> extra ASM_DIR bit,

I hope you can now see why only one ASM_DIR bit is required. Bits
(especially those on the base page) are "expensive", and we found a way
to save one without sacrificing any capability.


>
> Funny quote from here:
> <http://www.ieee802.org/3/z/public/presentations/nov1996...;
>
> "One (possibly two?!) additional Auto-Negotiation capability bits
> are needed to allow negotiation of symmetrical and asymmetrical flow
> control with full backwards compatibility" -- Rich Seifert
>

This was a presentation made early on during the development of the
standard. I recognized that we would need at least one bit for
asymmetrical operation. Two might be required either to support
additional possibilities, or to simplify the encoding. In the end, we
only needed one bit.


> Thanks in advance for any explanation/pointer for this negociation
> code. In particular from people that were in 802.3z at end of 1996!
>

There is a fairly complete explanation in Chapter 12 of my book,
"Gigabit Ethernet"; it includes the table I provided above (with more
text, of course, and better-than-ASCII graphics!).

I hope this helps.

[FYI: I was the chair and editor of IEEE 802.3x.]


--
Rich Seifert Networks and Communications Consulting
21885 Bear Creek Way
(408) 395-5700 Los Gatos, CA 95033
(408) 395-1966 FAX

Send replies to: usenet at richseifert dot com
Anonymous
April 15, 2004 8:43:02 PM

Archived from groups: comp.dcom.lans.ethernet (More info?)

Rich Seifert <usenet-@-richseifert-dot-com.invalid> writes:

> Remember, AutoNegotiation advertises what a device is *willing* to do
> (or capable of doing), not what may actually happen as a result of the
> negotiation. That said, there are four possibilities:
>
> [...]
>
> Furthermore, the circuitry required to implement PAUSE receive is much
> more complex than that required for PAUSE transmit. A device that only
> needs to send PAUSE frames can build a fixed-content PAUSE frame (in
> hardware) and simply send it whenever some trigger event occurs. To
> respond to PAUSE frames requires parsing and decoding many fields (MAC
> addresses, protocol type, MAC Control fields, etc.), along with the
> required timers implied by the protocol. There is no need to implement
> this circuitry in a device that cannot provide any benefit from PAUSE
> receive in the first place.
>

> > Back to reality, with a legacy SYMmetric bit and _only one_ (why?)
> > extra ASM_DIR bit,
>
> I hope you can now see why only one ASM_DIR bit is required. Bits
> (especially those on the base page) are "expensive", and we found a way
> to save one without sacrificing any capability.

I think I now do see why: you just "sacrified" the capability to
advertise RX-only ("I can respond to flow control, but will never
assert it myself") since this case makes sense only from an
exhaustive, theoretical point of view but not in the real world, as
clearly explained above.

Right?



User-unfriendliness
-------------------

There is still an issue IMHO: this flow control autonegociation
protocol is not "user-friendly", as first stated at end of my message
two steps above.

[Warning: I consider here the (very?) specific case of some user
wishing to enable flow direction in only one direction, but not
"forcing it" manually and still relying on the safety of
autonegociation to possibly fall back on some other, _agreed_ final
configuration.]

It seems this protocol is so unfriendly that people developping
ethernet configuration interfaces don't have the time to understand it
(I guess they just don't care). They keep providing user-friendly (but
wrong!) independent TX and RX settings. It seems no one mentions that
advertising RX capability implies advertising TX capability (assuming
this is the way they implement it :-(

One must admit that their task is complicated since on the other hand,
the _manual_ configuration obviously allows independent configuration
of TX and RX (or not?)


Examples:

- ethtool's user interface. ethtool is meant to be THE standard
ethernet configuration tool for linux. Search for "-A" in:
http://gd.tuwien.ac.at/linuxcommand.org/man_pages/ethto...

or for the latest, official version:
http://cvs.sourceforge.net/viewcvs.py/gkernel/ethtool/e...

Conclusion: you are supposed to be able to independently toggle:
autoneg, tx, rx


- extract from bcm5700 linux driver man page:

rx_flow_control
Enables or disables receiving flow control (pause)
frames. This parameter is used together with
auto_flow_control. The valid values are:

0 pause receive disabled

1 pause receive enabled if auto_flow_control
is set to 0, or pause receive advertised if
auto_flow_control is set to 1 (default)


- The documentation of the Intel e1000 linux driver:
http://support.intel.com/support/network/sb/CS-009209.h...
is so terse that it does not make the difference between
configuration of advertised flow control capabilities and manual
flow control configuration. One wonders who are the fools who care
about that :-)


- On the other hand, Sun Gigaswift User's guide (for Solaris) shows
two "adv-pause-cap" and "adv-asmpause-cap" settings. At least
something consistent with reality! On the other, other hand, it
seems there is no way to manually configure TX and RX.


- to be continued...



About The Book
--------------

> There is a fairly complete explanation in Chapter 12 of my book,
> "Gigabit Ethernet"; it includes the table I provided above (with more
> text, of course, and better-than-ASCII graphics!).

I carefully read the "flow control" and "automatic configuration"
chapters, but I must admit I skipped/missed this chapter 12 "Physical
layer"! I was also quickly turned away by the optical stuff at the
beginning, seemed irrelevant to me :-(

One problem I had with The Book is that the autonegociation protocol
is very well described in the optical section of this "physical layer"
chapter 12, but the equivalent for UTP is located elsewhere far away
(in the "automatic configuration" chapter), a bit redundant-ly, much
less exhaustive, and less up-to-date: no asymmetry! It seems that,
since the book preceded the 1000Base-T standard, you were very careful
not say anything about 1000Base-T autonegociation and asymmetry,
whereas it ends up being... the very same autonegociation as
1000Base-X.
"Gigabit Ethernet" - 2nd edition anyone ? :-)


PS for people here that (still?) do not have it: this is a great book.
"Advertising" it here a little bit definitely feels ok, especially
considering the quality and quantity of free support provided by the
book's author in this group :-)
Related resources
Anonymous
April 15, 2004 9:06:46 PM

Archived from groups: comp.dcom.lans.ethernet (More info?)

In article <87ekqp7155.fsf@free.fr>, marc.herbert@free.fr (M.Herbert)
wrote:

> I think I now do see why: you just "sacrified" the capability to
> advertise RX-only ("I can respond to flow control, but will never
> assert it myself") since this case makes sense only from an
> exhaustive, theoretical point of view but not in the real world, as
> clearly explained above.
>
> Right?
>

Sort of. Since *all* of the implementation complexity is in the
receiver/parser, there is no great benefit to having the ability to
receive without also having the ability to send PAUSE frames.

Also, here's another take on it (and we expressly discussed this during
the standards meetings). Just because a device has the *capability* to
send PAUSE frames does not mean that it must ever actually send one.
There is no algorithm or specification of when it is appropriate (or
necessary) to assert flow control; it is left as application-dependent.

That said, assume that you do have a device that can receive, but not
send PAUSE frames. There is no problem if the device advertises that it
CAN send PAUSE frames (even though it can't). Since it is never required
to actually send such a frame, there is no observable means of
distinguishing between a device that CAN send PAUSE frames but chooses
not to, and a device that is incapable of sending PAUSE frames. Since
there is no distinction, you are free to advertise a capability that you
will never assert!

>
> It seems this protocol is so unfriendly that people developping
> ethernet configuration interfaces don't have the time to understand it
> (I guess they just don't care). They keep providing user-friendly (but
> wrong!) independent TX and RX settings. It seems no one mentions that
> advertising RX capability implies advertising TX capability (assuming
> this is the way they implement it :-(
>

The underlying protocol mechanism does not have to map 1:1 to the user
interface. Since (as discussed above), one can advertise symmetrical
PAUSE capability, yet (internally) decide never to send any PAUSE
frames, it is perfectly feasible to construct a user or programming
interface that gives the appearance of "truly independent"
transmit/receive functionality. I would argue that such a user interface
is more intuitive than the protocol mechanism, and that is a Good
Thing(tm).

> One must admit that their task is complicated since on the other hand,
> the _manual_ configuration obviously allows independent configuration
> of TX and RX (or not?)
>

Assuming that I have a device with symmetric PAUSE capability, I can
choose to enable the transmit and receive functions independently, via
manual configuration. However (as discussed above), I can do this using
Auto-Negotiation as well (even though the protocol mechanism has no such
express encoding).

>
> - On the other hand, Sun Gigaswift User's guide (for Solaris) shows
> two "adv-pause-cap" and "adv-asmpause-cap" settings. At least
> something consistent with reality! On the other, other hand, it
> seems there is no way to manually configure TX and RX.
>

Here, Sun has simply passed the raw protocol mechanism to the user as a
programming interface. This is the easiest approach from an engineering
perspective, but makes poor sense to a user/programmer. As you note, it
is easier to conceptualize that the interface has independent transmit
and receive flow control. That is the metaphor that belongs in the user
interface, NOT the (admittedly ugly, but more efficient) protocol
signaling bits.

>
> One problem I had with The Book is that the autonegociation protocol
> is very well described in the optical section of this "physical layer"
> chapter 12, but the equivalent for UTP is located elsewhere far away
> (in the "automatic configuration" chapter), a bit redundant-ly, much
> less exhaustive, and less up-to-date: no asymmetry! It seems that,
> since the book preceded the 1000Base-T standard, you were very careful
> not say anything about 1000Base-T autonegociation and asymmetry,
> whereas it ends up being... the very same autonegociation as
> 1000Base-X.

That's correct. When I wrote the book, 1000BASE-X was just completed,
and 1000BASE-T was many months away. Since lots of things can change
during the development of a standard, I was reluctant to include details
that might well turn out to be wrong once the standard was finalized.
Thus, there is nothing about 1000BASE-T Auto-Negotiation; the chapter on
"Automatic Configuration" covered the historical stuff (10/100BASE-T)
only.

> "Gigabit Ethernet" - 2nd edition anyone ? :-)
>

There was strong interest from the publisher to do this. We actually
have a contract in place, the outline is signed off, and I was ready to
move ahead when my personal interests changed somewhat, and the project
became no longer feasible.

(Here's a decode of that last sentence: For the past two years, I have
put most of my technology work on hold and am now a second-year law
student at Santa Clara University. Law school consumes most of my time
and energy; I still sit on some corporate boards and do some consulting,
but there are insufficient spare hours to do a book at this time.)


--
Rich Seifert Networks and Communications Consulting
21885 Bear Creek Way
(408) 395-5700 Los Gatos, CA 95033
(408) 395-1966 FAX

Send replies to: usenet at richseifert dot com
Anonymous
April 16, 2004 9:58:49 AM

Archived from groups: comp.dcom.lans.ethernet (More info?)

Rich Seifert wrote:
(snip)

> Also, here's another take on it (and we expressly discussed this during
> the standards meetings). Just because a device has the *capability* to
> send PAUSE frames does not mean that it must ever actually send one.
> There is no algorithm or specification of when it is appropriate (or
> necessary) to assert flow control; it is left as application-dependent.

> That said, assume that you do have a device that can receive, but not
> send PAUSE frames. There is no problem if the device advertises that it
> CAN send PAUSE frames (even though it can't). Since it is never required
> to actually send such a frame, there is no observable means of
> distinguishing between a device that CAN send PAUSE frames but chooses
> not to, and a device that is incapable of sending PAUSE frames. Since
> there is no distinction, you are free to advertise a capability that you
> will never assert!

From a network protocol standard point of view, I agree. But from a
customer/purchaser I don't. If I buy a device and its buffer
overflows much of the time I would say that the device isn't working
properly. If the specification sheet says it supports receive PAUSE
but not transmit PAUSE, and buyers know this in advance, well, I
can't argue about it. Still, I won't expect them to stay in
business very long.

For a device with ports running at different speeds, it would
seem that buffers could fill up pretty fast.

-- glen
November 3, 2012 5:02:28 PM

> That said, assume that you do have a device that can receive, but not
> send PAUSE frames. There is no problem if the device advertises that it
> CAN send PAUSE frames (even though it can't). Since it is never required
> to actually send such a frame, there is no observable means of
> distinguishing between a device that CAN send PAUSE frames but chooses
> not to, and a device that is incapable of sending PAUSE frames. Since
> there is no distinction, you are free to advertise a capability that you
> will never assert!

The problem in the implementation will appear when the two non-legacy devices are connected(i.e) both devices are able to understand both PAUSE and ASM_DIR bit. But before jumping into the problem, I will explain the root cause for the issue.
# RX TX Assymetric capability Make sense? PAUSE ASM_DIR
1 0 0 0 Yes 0 0
2 0 0 1 No
3 0 1 0 No
4 0 1 1 Yes 0 1
5 1 0 0 No
6 1 0 1 Yes 1 1
7 1 1 0 Yes 1 0
8 1 1 1 Yes 1 0(as per IEEE standard)

As you can see, there are 5 different possibilities that make sense. (Case 7 means, the device is legacy and can support only symmetric flowcontrol. Case 8 is a device which can support asymmetric flowcontrol as well). But we are encoding these 5 possibilities into 2 bits. Clearly, while doing that we are encoding 2 of the 5 possibilities into one coding. That is, case #7 and case #8 are combined together.

Now I will explain the problem. Let us say I enable (RX=ON; TX=ON) in local end and the peer end is a non-legacy device with (RX=ON; TX=OFF). Under this condition it would make sense to activate TX=ON on local end and RX=ON in remote end. But as per standard, we are making it as flowcontrol RX,TX=OFF on both sides.

One solution would be to add 1 more bit to accommodate all 5 possibilites ?

Regards,
Shathish
!