On (08/17/07 14:31), Raymond LI - Sun Microsystems - Beijing China wrote:

> PauseFrame setting Requirement:
> 
> 1. what is the command like?
>    For example, 
>    dladm set-linkprop -p mac_flowctrl={rx,tx,bi,no} -i bge0
> 
>    rx: it means we could receive incoming pause frames from
>        peer
>    tx: it means we could transmit pause frames to peer
>    bi: it means we could both receive and transmit pause
>        frames from/to peer
>    no: it means we don't have flow control enabled. We will
>        not respond to pause frames incoming and will not send
>        out pause frames when congestion happens
> 
>    If the requested flowcontrol value is not applicable to
>    device, mac_flowctrl will remain old value and no change
>    to system.


I like the CLI that Raymond proposes- I think it is much easier
to understand and use, compared to the existing definitions
in the ieee802.3(5) man page..

On a related note, Raymond and I were looking at this
and found several inconsistencies in the pause/asmpause
definitions in the man page (no surprise that everyone comes 
out of reading that man page confused!)

First off,  my truth table  at
http://mail.opensolaris.org/pipermail/brussels-dev/2007-July/000337.html

which was derived purely from Seifert's explanation at 
 http://hardware.mcse.ms/message13052.html)

(seems to?) match the truth table in the Solaris man page.

Let's take one particular case: at the bottom of ieee802.3(5), the man
page says

AA      AP      LAC     LPC     LA      LP      Description

1       0       1       1       1       0      Local station will Tx 
                                               a pause when Rx is 
                                               congested.

which would  correspond to  the {my = 01, peer = 11} case
in http://mail.opensolaris.org/pipermail/brussels-dev/2007-July/000337.html
where I arrive at the same result (asym-to). To spell it out
explicitly, in this particular case, we would ignore any pause fames
that we receive, but we would *transmit* pause frames if the receive is
congested.

But, when we look at the definition of adv_cap_pause in ieee802.3(5)
(earlier in the man page) we have

adv_cap_pause

    The meaning of this statistic depends on the value provided by
    adv_cap_asmpause.

    if adv_cap_asmpause = 1

          :
    0

        Pause transmission when a pause frame is received.


this would be in direct contradiction to the result
in the man page's own truth table, as well as the note at 
http://hardware.mcse.ms/message13052.html which says:

 "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 contradiction in the man page also explains why Garrett and
I arrived at slightly different truth tables.

So, given the mayhem in the current definitions, I propose that we
should just purge the confusing definitions  (and associated attempts
at driver implementations) in ieee802.3(5) man page and instead
implement

  
http://mail.opensolaris.org/pipermail/brussels-dev/attachments/20070817/720b852b/attachment.txt

Thoughts? 

--Sowmini



Reply via email to