2 Replies Latest reply: Feb 19, 2012 4:15 AM by 898229 RSS

    Change parameters on network interface card

    898229
      Hi,

      I need to connect two workstations through Fast Ethernet optical fiber switch. Both workstations are running on Solaris 10, one is a SUN Ultra 45 machine with ce0 interface, and the other is SUN Ultra 20 machine with bge0 interface. Both NIC's are 1000/Full Duplex optical fiber interfaces. How can I change parameters on NIC's to work properly through switch?
      I tested this situation with Gigabit Ethernet optical fiber switch and the workstations can ping each other, but I'm "forced" to use Fast Ethernet optical fiber switch.

      Regards,
        • 1. Re: Change parameters on network interface card
          BryanWood
          So long as your NICs are allowed to auto-negotiate, it will negotiate with its link partner for the best speed which in your case would be 100mbit/FULL. While the patch cable is connected to the switch, run this command to see what your local NIC is advertising, as well as what your link partner (lp_*) is advertising:
          root# kstat -m ce
          module: ce                              instance: 0
          name:   ce0                             class:    net
           [..]
                  adv_cap_1000fdx                 1
                  adv_cap_1000hdx                 1
                  adv_cap_100T4                   0
                  adv_cap_100fdx                  1
                  adv_cap_100hdx                  1
                  adv_cap_10fdx                   1
                  adv_cap_10hdx                   1
                  adv_cap_asmpause                0
                  adv_cap_autoneg                 1
                  adv_cap_pause                   0
           [..]
                  link_duplex                     2
                  link_pause                      0
                  link_speed                      100
                  link_up                         1
           [..]
                  lp_cap_1000fdx                  0
                  lp_cap_1000hdx                  0
                  lp_cap_100T4                    0
                  lp_cap_100fdx                   1
                  lp_cap_100hdx                   1
                  lp_cap_10fdx                    0
                  lp_cap_10hdx                    0
                  lp_cap_asmpause                 0
                  lp_cap_autoneg                  1
                  lp_cap_pause                    0
           [..]
          The above output shows that the local NIC (ce0) is set to auto-negotiate (adv_cap_autoneg=1), and is advertising multiple choices for speed: adv_cap_1000fdx, adv_cap_1000hdx, adv_cap_100fdx, adv_cap_100hdx, adv_cap_10fdx, and adv_cap_10hdx (fdx = full duplex, hdx = half duplex).

          The link partner is advertising 100fdx, and 100hdx. In this configuration, the two devices will negotiate to 100 full duplex, which can be observed from link_speed and link_duplex (duplex=2 is full, duplex=1 is half).

          If you need to change advertisements for the local NIC, and/or re-enable auto-negotiate (recommended for most cases):

          Setting Parameters Using the ce.conf File

          It is important to note, that autonegotiation is usually left ON by default, (preferred method) and it is very rare nowadays to have to force the speed and duplex on both sides of the link , unless you are trying to debug a link problem or workaround an old switch bug.

          1) Obtain the hardware path names for the ce devices in the device tree.
          # grep ce /etc/driver_aliases
          ce "pci108e,abba"
          ce "pci108e,abba"
          
          # grep ce /etc/path_to_inst
          "/pci@21c,700000/pci@1/network@0" 0 "ce"
          "/pci@9,700000/network@1" 1 "ce"
          "/pci@1f,0/pci@1/pci@2/network@1" 2 "ce" 
          The Device name is the path name within the quotes from the /etc/driver_aliases file ("pci108e,abba" in this example)
          The Parent name is the device-path before "/network@" from the /etc/path_to_inst file (there are 3 distinct interfaces, one per line, for this example machine).
          The unit-address is the number immediately after the "network@" from the /etc/path_to_inst file (the first NIC has a unit address of 0, while the other two have unit address of 1).

          So, the first line of the above examples:
          name = pci108e,abba
          parent = /pci@21c,700000/pci@1
          unit-address = 0
          In the second line of the above examples:
          name = pci108e,abba
          parent = /pci@9,700000
          unit-address = 1
          In the third line of the above examples:
          name = pci108e,abba
          parent = /pci@1f,0/pci@1/pci@2
          unit-address = 1
          Set the parameters for the above devices in the /platform/sun4u/kernel/drv/ce.conf file.

          In the following example, parameters are set for 100Mb Full Duplex for each the instances of ce interfaces.
          Make sure that you put the values within double quotes for all THREE parameters to uniquely identify a specific NIC:
          # more /platform/sun4u/kernel/drv/ce.conf
          name="pci108e,abba" parent="/pci@21c,700000/pci@1" unit-address="0" 
          adv_cap_autoneg=1 adv_cap_1000fdx=0 adv_cap_1000hdx=0 adv_cap_100fdx=1 
          adv_cap_100hdx=0 adv_cap_100T4=0 adv_cap_10fdx=0 adv_cap_10hdx=0; 
          
          name="pci108e,abba" parent="/pci@9,700000" unit-address="1"
          adv_cap_autoneg=1 adv_cap_1000fdx=0 adv_cap_1000hdx=0 adv_cap_100fdx=1 
          adv_cap_100hdx=0 adv_cap_100T4=0 adv_cap_10fdx=0 adv_cap_10hdx=0; 
          
          name="pci108e,abba" parent="/pci@1f,0/pci@1/pci@2" unit-address="1" 
          adv_cap_autoneg=1 adv_cap_1000fdx=0 adv_cap_1000hdx=0 adv_cap_100fdx=1 
          adv_cap_100hdx=0 adv_cap_100T4=0 adv_cap_10fdx=0 adv_cap_10hdx=0; 
          Each entry is separated by a semi-colon (also all on a single line, rather than across three lines per entry as given above), and notice that auto-negotiation (adv_autoneg_cap) is left ENABLED. The above example is allowing auto-negotiation but leaving only a single choice. Sort of like Henry Ford giving you any color Model T you want, so long as its black.

          If you want to force all interfaces to Same duplex and speed you do Not need the name, parent, or unit. You can generically set the global settings with just a single line:

          # more /platform/sun4u/kernel/drv/ce.conf
          adv_cap_autoneg=1 adv_cap_1000fdx=0 adv_cap_1000hdx=0 adv_cap_100fdx=1
          adv_cap_100hdx=0 adv_cap_100T4=0 adv_cap_10fdx=0 adv_cap_10hdx=0;

          3) Once you have set the parameters, save the /platform/sun4u/kernel/drv/ce.conf file.

          4) Reboot the system.


          The ce.conf instructions were taken from Re: Setting the speed of a Gigaswift card with some edits to ensure that the parameters exactly match "kstat" outputs.

          The same instructions will also work for bge interfaces on your Ultra 20 machine. Simply substitute bge for ce in the above example.

          Please provide feedback if you find this answer to solve your query.


          Best Regards,
          Bryan Wood
          • 2. Re: Change parameters on network interface card
            898229
            Hi there,

            I apologize for the delayed response, after many trials with ndd, dladm tool administration tutorials to set parameters temporarily or permanently and still no results, I had to change the Fast Ethernet optical fiber switch with Gigabit Ethernet optical fiber switch, wich works fine with workstations.
            I appreciate your help!

            Best regards,