MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Protocols                                                dlpi(7P)



NAME
     dlpi - Data Link Provider Interface

SYNOPSIS
     #include 


DESCRIPTION
     SunOS STREAMS-based device drivers wishing  to  support  the
     STREAMS   TCP/IP and other STREAMS-based networking protocol
     suite implementations support Version 2  of  the  Data  Link
     Provider  Interface (DLPI). DLPI V2 enables a data link ser-
     vice user to access and use any of a variety  of  conforming
     data link service providers without special knowledge of the
     provider's protocol. Specifically, the interface is intended
     to  support  Ethernet,  X.25 LAPB, SDLC, ISDN LAPD, CSMA/CD,
     FDI, token ring, token bus,  Bisync,  and  other  datalink-
     level protocols.


     The interface specifies access to the data link service pro-
     vider  in  the form of  MPROTO and  MPCPROTO type  STREAMS
     messages and does not define a specific protocol implementa-
     tion.  The  interface  defines  the  syntax and semantics of
     primitives exchanged between the data link user and the data
     link  provider  to  attach  a physical device with physical-
     level address to a stream, bind a datalink-level address  to
     the stream, get implementation-specific information from the
     data link provider, exchange data with a peer data link user
     in one of three communication modes (connection, connection-
     less, acknowledged connectionless), enable/disable multicast
     group and promiscuous mode reception of datalink frames, get
     and set the physical address associated with a  stream,  and
     several other operations.


     Solaris conforms to The Open Group  Technical  Standard  for
     DLPI,  Version  2.  For  free  access to this specification,
     point              your              browser              to
     www.opengroup.org/pubs/catalog/c811.htm.  Solaris  also pro-
     vides extensions to the DLPI standard, as detailed  in  this
     man page.

SOLARIS-SPECIFIC DLPI EXTENSIONS
     Notification Support

         Enables DLPI consumers to register for notification when
         events of interest occur at the DLPI provider. The nego-
         tiation may be performed on any  attached  DLPI  stream,
         and   begins   with   the   DLPI   consumer,  sending  a
         DLNOTIFYREQ to the provider, which is an MPROTO  mes-
         sage with the following payload:



SunOS 5.11          Last change: 29 Jul 2008                    1






Protocols                                                dlpi(7P)



                 typedef struct {
                         tuscalart     dlprimitive;
                         uint32t        dlnotifications;
                         uint32t        dltimelimit;
                 } dlnotifyreqt;

         The dlprimitive field must be set to DLNOTIFYREQ; the
         dltimelimit  field  is reserved for future use and must
         be set to zero. The dlnotifications field is a  bitmask
         containing the event types the consumer is interested in
         receiving, and must be zero or more of:

           DLNOTELINKDOWN         Notify when link has gone down
           DLNOTELINKUP           Notify when link has come up
           DLNOTEPHYSADR         Notify when address changes
           DLNOTESDUSIZE          Notify when MTU changes
           DLNOTESPED             Notify when speed changes
           DLNOTEPROMISCONPHYS   Notify when DLPROMISCPHYS is set
           DLNOTEPROMISCOFPHYS  Notify when DLPROMISCPHYS is cleared

         Consumers may find it useful  to  send  a  DLNOTIFYREQ
         message  with  no  requested  types to check if the DLPI
         provider supports the extension.

         Upon receiving the DLNOTIFYREQ, the DLPI provider must
         generate  a  DLNOTIFYACK,  which is an MPROTO message
         with the following payload:

                 typedef struct {
                         tuscalart     dlprimitive;
                         uint32t        dlnotifications;
                 } dlnotifyackt;

         The dlprimitive field must be set to DLNOTIFYACK. The
         dlnotifications  field  must  include any notifications
         that the provider supports, along with any  other  unre-
         quested  notifications  that the provider supports. How-
         ever, regardless of the notifications the provider  sup-
         ports,  it  is  restricted to sending only DLNOTIFYIND
         messages   (see  below)  that  were  requested  in   the
         DLNOTIFYREQ.

         Since there are additional notification types which  are
         not  yet  available  for  public use, DLPI consumers and
         providers must take care when inspecting and setting the
         dlnotifications  field. Specifically, consumers must be
         careful to only request the  above  notification  types,
         and  providers  must  be  careful  to  not  include  any
         unrecognized notification types in the  dlnotifications
         field  when constructing the DLNOTIFYACK. In addition,
         DLNOTIFYIND's  that  are  received  with  undocumented
         dlnotification or dldata values must be ignored.



SunOS 5.11          Last change: 29 Jul 2008                    2






Protocols                                                dlpi(7P)



         DLPI consumers may receive a DLERORACK message  (with
         dlerrorprimitive  set to DLNOTIFYREQ) in response to
         the initial DLNOTIFYREQ message.  This  message  indi-
         cates  that  the DLPI provider does not support the DLPI
         notification extension.  Otherwise,  the  DLPI  consumer
         will  receive  a  DLNOTIFYACK  and  should  expect  to
         receive DLNOTIFYIND messages for  any  types  that  it
         requested  that  were still set in it. The DLNOTIFYIND
         is an MPROTO message with the following payload:

                typedef struct {
                        tuscalart     dlprimitive;
                        uint32t        dlnotification;
                        uint32t        dldata;
                        tuscalart     dladdrlength;
                        tuscalart     dladdroffset;
                } dlnotifyindt;

         The dlprimitive field must be set to DLNOTIFYIND, and
         the  dlnotification field must be set to the event type
         that has occurred (for example, DLNOTELINKDOWN). Only
         a single  event  type  may be set in each DLNOTIFYIND.

         For the DLNOTESPED event type, dldata must be set to
         the  current interface speed in kilobits per second. For
         the DLNOTEPHYSADR event type, dldata must be set to
         DLCURPHYSADR.  For the DLNOTESDUSIZE event type,
         dldata must be set to the current MTU in bytes.  Other-
         wise, dldata must be set to zero.

         For the DLNOTEPHYSADR event type, the dladdrlength
         field  must be set to the length of the address, and the
         dladdroffset field must be set to offset of the  first
         byte of the address, relative to brptr (for example, if
         the address immediately follows the dlnotifyind struc-
         ture,     dladdroffset     is     set    to    'sizeof
         (dlnotifyind)').  For  all  other  event  types,   the
         dladdrlength  and dladdroffset fields must be set to
         zero by DLPI providers and ignored by DLPI consumers.

         In addition to generating DLNOTIFYIND messages when  a
         requested  event  has  occurred,  the DLPI provider must
         initially generate one or more DLNOTIFYIND messages to
         notify the DLPI consumer of the the current state of the
         interface. For instance, if the consumer  has  requested
         DLNOTELINKUP    DLNOTELINKDOWN, the provider must
         send a DLNOTIFYIND containing the current state of the
         link (either DLNOTELINKUP or DLNOTELINKDOWN) after
         sending the DLNOTIFYACK.

         For the initial DLNOTIFYIND message, the DLPI provider
         is      strongly     recommended     against     sending



SunOS 5.11          Last change: 29 Jul 2008                    3






Protocols                                                dlpi(7P)



         DLNOTELINKDOWN, even if the interface is  still  ini-
         tializing  and is not yet ready to send or receive pack-
         ets. Instead, either delaying the DLNOTIFYIND  message
         until the interface is ready or optimistically reporting
         DLNOTIFYLINKUP    and    subsequently       reporting
         DLNOTELINKDOWN  if  the  negotation fails is strongly
         preferred. This prevents  DLNOTIFYIND  consumers  from
         needlessly  triggering  network  failover operations and
         logging error messages during network interface initial-
         ization.

         The   DLPI   provider   must   continue   to    generate
         DLNOTIFYIND   messages   until   it   receives  a  new
         DLNOTIFYREQ message or the DLPI stream is detached (or
         closed).  Further,  a  DLPI  style  2 provider must keep
         track of the  requested  events  after  a  DLDETACHREQ
         operation,   and   if   a  subsequent  DLATACHREQ  is
         received, it must send  gratuitous  DLNOTIFYIND   mes-
         sages  to  notify  the consumer of the  current state of
         the device, since  the  state  may  have  changed  while
         detached  (or the consumer may have simply discarded its
         previous state).


     Passive Consumers of Aggregated Links

         Solaris link aggregations  as  configured  by  dladm(1M)
         export  DLPI  nodes  for  both the link aggregation, and
         individual links  that  comprises  the  aggregation,  to
         allow  observability  of  the aggregated links. To allow
         applications such as  snoop(1M) to open those individual
         aggregated  links while disallowing other consumers such
         as ip(7P), DLPASIVEREQ (a DLPI  primitive),  must  be
         issued by snoop(1M) and similar applications.

         The DLPASIVEREQ primitive is an MPROTO message  con-
         taining the following payload:

           typedef struct {
                   tuscalart     dlprimitive;
           } dlpassivereqt;

         Issuing this primitive allows the  consumer  of  a  DLPI
         link  to  coexist with a link aggregation that also uses
         the link.  Such a consumer is considered "passive."

         Consumers that don't use this primitive while an  aggre-
         gation  is  using  the link receive DLSYSER/EBUSY when
         issuing the following DLPI primitives:

           DLBINDREQ
           DLENABMULTIREQ



SunOS 5.11          Last change: 29 Jul 2008                    4






Protocols                                                dlpi(7P)



           DLPROMISCONREQ
           DLAGREQ
           DLUNAGREQ
           DLCONTROLREQ
           DLSETPHYSADREQ

         A consumer that has not issued a DLPASIVEREQ and  has
         successfully  issued one of the above primitives is con-
         sidered "active."

         The creation of a link aggregation using dladm(1M) fails
         if  one  of the links included in the aggregation has an
         "active" consumer, but succeeds if the links do not have
         any DLPI consumers or only "passive" consumers.


     Raw Mode

         The DLIOCRAW ioctl function is used by some DLPI  appli-
         cations,   most   notably  the  snoop(1M)  command.  The
         DLIOCRAW command puts the stream into a raw mode, which,
         upon receive, causes the the full MAC-level packet to be
         sent upstream in an MDATA message instead of  it  being
         transformed  into the DLUNITDATAIND form normally used
         for reporting incoming packets. Packet SAP filtering  is
         still  performed  on  streams that are in raw mode. If a
         stream user wants to receive  all  incoming  packets  it
         must  also  select  the  appropriate  promiscuous modes.
         After successfully selecting raw mode,  the  application
         is  also  allowed to send fully formatted packets to the
         provider as MDATA messages for  transmission.  DLIOCRAW
         takes  no arguments. Once enabled, the stream remains in
         this mode until closed.


     Native Mode

         Some DLPI providers may be able to represent their  link
         layer  using  more  than one link-layer  format. In this
         case, the  default link-layer format may minimize impact
         to  applications, but may not allow truly "native" link-
         layer headers to be sent or received. DLPI consumers who
         wish to use the native  link-layer format can use DLIOC-
         NATIVE to transition the stream.  DLIOCNATIVE  takes  no
         arguments  and returns the DLPI mac type associated with
         the  new link-layer format   upon         success.  Once
         enabled,  the  stream remains in this mode until closed.
         Note  that   DLIOCNATIVE  does  not  enable   transition
         between  dissimilar  DLPI  mac types and (aside from the
         link-layer  format),  the  new  DLPI    mac    type   is
         guaranteed  to be semantically identical. In particular,
         the SAP space and addressing format are not affected and



SunOS 5.11          Last change: 29 Jul 2008                    5






Protocols                                                dlpi(7P)



         the  effect  of  DLIOCNATIVE is only visible when in raw
         mode, though any subsequent DLINFOREQ   requests  gen-
         erate  responses with dlmactype set to the native DLPI
         type.


     Margin

         While a DLPI  provider  provides  its  maximum  SDU  via
         dlmaxsdu in DLINFOACK messages, this value typically
         represents a standard maximum  SDU  for  the  provider's
         media  (1500  for  Ethernet for example), and not neces-
         sarily the absolute maximum amount of data that the pro-
         vider  is  able  to  transmit in a given data unit.  The
         "margin" is the extra amount of data in bytes  that  the
         provider can transmit beyond its advertised maximum SDU.
         For example, if a DLETHER provider can  handle  packets
         whose  payload section is no greater than 1522 bytes and
         its dlmaxsdu is set to 1500 (as is typical for  Ether-
         net),  then  the  margin would be 22. If a provider sup-
         ports a non-zero margin,  it  implements  the  DLIOCMAR-
         GININFO  ioctl, whose data is a tuscalart representing
         the margin size.


DLETHER-SPECIFIC DLPI SEMANTICS
  VLAN Support
   VLAN PA Access
     Some DLETHER DLPI providers  support  IE  802.1Q  Virtual
     LANs  (VLAN).  For these providers, traffic for a particular
     VLAN can be accessed by attaching to (or opening) a  special
     VLAN  PA that is calculated from the VLAN ID and the actual
     hardware PA of the device. This VLAN PA is  calculated  by
     multiplying the VLAN ID by 1000 and adding the hardware PA.
     For example, VLAN PA 2001 provides access to VLAN ID  2  on
     hardware   PA 1. As with hardware PA's,  a  DLPI  provider
     may provide access to  either  DLSTYLE1  or  DLSTYLE2,  or
     access  to  both,  for  a given VLAN PA. Note that portable
     DLPI consumers must try both DLPI styles  before  concluding
     that a DLETHER  DLPI provider does not offer VLAN support.


     Unless raw mode is enabled, a DLPI stream bound  to  a  VLAN
     PA  behaves  no differently than a traditional DLPI stream.
     As with hardware PAs, data must be sent to a DLPI  provider
     without link-layer headers (which are added by the provider)
     and received data is passed  to  interested  DLPI  consumers
     without link-layer headers.  As a result,  DLPI consumers do
     not require special-case logic to implement VLAN PAs.

  Hardware PA Access




SunOS 5.11          Last change: 29 Jul 2008                    6






Protocols                                                dlpi(7P)



     As per IE 802.1Q, all VLAN traffic is  sent  using  Ether-
     Type  0x8100,  meaning  that in addition to attaching to the
     VLAN PA, all VLAN traffic for a given hardware PA can also
     be  accessed by attaching to the hardware PA and binding to
     SAP 0x8100.  Accordingly, all VLAN  traffic  (regardless  of
     VLAN  ID)  can  be  sent  and received by the DLPI consumer.
     However,  even  when  raw  mode  is  disabled,  packets  are
     received  starting  with their VLAN headers and must be sent
     to the DLPI provider with their  VLAN headers  already  pre-
     pended  (but  without Ethernet headers). Because adhering to
     these semantics requires each DLPI consumer to have special-
     ized  knowledge  of  VLANs, VLANs should only be accessed in
     this way when the VLAN PA  access  method  is  insufficient
     (for example, because access to all VLAN traffic, regardless
     of  VLAN ID, is needed).


     Because all VLAN traffic  is  sent  with  SAP  0x8100,  VLAN
     traffic not filtered at the physical (DLPROMISCPHYS) level
     is also visible if a DLPI consumer enables promiscuous  mode
     of  a  stream at the DLPROMISCSAP level. As mentioned ear-
     lier, these packets are received starting  with  their  VLAN
     headers if raw mode is not enabled.

  QoS Support
     The IE 802.1Q standard defines eight classes  of  priority
     values  used  by  QoS  traffic  control of Ethernet packets.
     Although the priority values are encoded in the 802.1Q tags,
     they can be used independently from VLANs.  In particular, a
     special priority tagged packet (with VLAN ID zero but prior-
     ity bits non-zero) does not belong to any VLAN.


     The priority value can be set  on  either  a  per-stream  or
     per-packet basis. DLPI consumers can specify the  per-stream
     priority using the DLUDQOSREQ request (the priority  value
     remains  unchanged  until  the  next  DLUDQOSREQ) and also
     specify the per-packet priority value using the bband field
     of   a  MDATA  message  or  the   dlpriority  field  of  a
     DLUNITDATAREQ.

  Raw Mode
   Hardware PA Access
     When raw mode is  enabled,  the  complete,  unmodified  MAC-
     level  packet  (including  Ethernet   and   VLAN headers) is
     passed to interested DLPI consumers. Similarly,  the  entire
     MAC-level  packet (including Ethernet and VLAN headers) must
     be sent to the DLPI provider for  transmission.   Note  that
     the  priority  value  specified  in  the bband field can be
     overridden by encoding the priority value (if any) into  the
     VLAN header.




SunOS 5.11          Last change: 29 Jul 2008                    7






Protocols                                                dlpi(7P)



  VLAN PA Access
     When raw mode is enabled, only packets with the correct VLAN
     ID  are  passed  up  to  interested DLPI consumers. With the
     exception of priority-tagged packets,  DLPI  providers  must
     strip  off  the  VLAN headers (while retaining the preceding
     Ethernet  headers)  before  sending  up  the  packets.   For
     priority-tagged   packets,   DLPI  providers  must  use  the
     reserved tag 0 to encode the VLAN TCI and send up the  pack-
     ets.


     On the transmit-side, DLPI consumers must send  the  packets
     down  to  the  DLPI  providers without the VLAN headers (but
     with the  Ethernet headers)  unless certain QoS  support  is
     required.  If QoS support is needed, the packet can have the
     VLAN header to  indicate the  priority  value,  however  its
     VLAN  ID  must  be  zero. The DLPI providers then insert the
     VLAN tags or encode the VLAN tags using the  priority  value
     specified in the VLAN headers and send the packets.

FILES
     Files in or under /dev.

ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
                         ATRIBUTE TYPE                       ATRIBUTE VALUE
    
     Interface Stability (Notification support/Passive  mode  Evolving       
     behavior)                                                               
    


SEE ALSO
     dladm(1M), snoop(1M), libdlpi(3LIB), gld(7D), ip(7P)

NOTES
     A Solaris DLPI link name consists of a  DLPI  provider  name
     followed by a numeric PA (physical point of attachment).


     The DLPI provider name must be between 1 and  16  characters
     in  length, though names between 3 and 8 characters are pre-
     ferred.  The  DLPI  provider  name  may   consist   of   any
     alphanumeric  character  (a-z, A-Z, 0-9), and the underscore
     ().  The first and last character of the DLPI provider name
     cannot be a digit.




SunOS 5.11          Last change: 29 Jul 2008                    8






Protocols                                                dlpi(7P)



     The PA must be between 1 and 16 digits in  length.  Leading
     zeroes are not permitted.





















































SunOS 5.11          Last change: 29 Jul 2008                    9



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™